讓虛擬記憶體管理觸手可及(一) VMA顯身

2021-05-06 07:33:52 字數 1555 閱讀 1654

乙個程式編譯、連線後形成的位址空間就在虛擬位址空間,在核心中,用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虛擬位址空間,但是記憶體...