乙個程式編譯、連線後形成的位址空間就在虛擬位址空間,在核心中,用mm_struct結構描述,為了有效的管理整個虛擬空間,又把此空間分為乙個個區間叫做vma(virtual memory area),用vma_area_struct結構描述。vma是虛存管理的基本單位,其組織方式有鍊錶和紅黑樹。如何編寫**檢視自己的程序到底有哪些虛擬區? (以下程式均來自intel otc的nanhai.zou)
static void mtest_dump_vma_list(void)
up_read(&mm->mmap_sem);
}此**片段比較簡單,注意為什麼要加down_read()和up_read()?
如果知道某個虛位址,比如,0x8049000, 又如何找到這個位址所在vma是哪個?
static void mtest_find_vma(unsigned long addr)
else
up_read(&mm->mmap_sem);}
核心分配列印出位址資訊
#include
#include
#include
#include
#include
unsigned long pagemem;
unsigned char *kmallocmem;
unsigned char *vmallocmem;
module_license("gpl");
module_author("chen li-jun, wang cong");
static int __init init_mmshow(void)
static void __exit cleanup_mmshow(void)
module_init(init_mmshow);
module_exit(cleanup_mmshow);
執行結果:
the current process is insmod.old
mtest_dump_vma_list
vma 0x8048000-0x805f000 read exec
vma 0x805f000-0x8060000 write read
vma 0x8060000-0x8078000 write read exec
vma 0x40000000-0x40015000 read exec
vma 0x40015000-0x40016000 write read
vma 0x40016000-0x40017000 write read
vma 0x42000000-0x4212e000 read exec
vma 0x4212e000-0x42131000 write read
vma 0x42131000-0x42133000 write read
vma 0xbfff3000-0xc0000000 write read exec
hello world init over
pagemem=0xcda75000
kmallocmem=0xdce51600
vmallocmem=0xe0902000
讓雲觸手可及 微軟虛擬化遠端直播
讓雲觸手可及 微軟虛擬化遠端直播 2011年it屆的明星,非虛擬化莫屬,特別是剛剛結束的微軟2011teched大會上,虛擬化更是受到了熱捧,越來越多的人追隨虛擬化的腳步,虛擬化如此火熱,如果你還不知道虛擬化,就out了,如何快速了解虛擬化,掌握這個代表it產業發展新 高地 的新生事物的動向呢?從微...
《讓雲觸手可及 微軟雲計算實踐指南》 筆記
1 雲計算概念 雲計算就是基於網際網路的計算,它能像電網供電一樣,按需把共享的資源 軟體和資訊提供給計算機和其他裝置 雲計算就是資訊科技作為服務 it as a service 的一種計算 和消費方式。要理解雲計算這種計算提供方式,對 於下面幾個關鍵點的理解將非常重要 1.雲計算強調資源的共享,而不...
虛擬記憶體管理 一
遍歷乙個程序中所有的vma 使用者態對程序位址空間的操作 理解task struct,mm struct,和vm area struct之間的關係。即是理解程序,程序位址空間和vma之間的關係 程序位址空間是指程序可以定址的虛擬位址空間。32位的處理器中,程序可以雖然定址4g虛擬位址空間,但是記憶體...