遍歷乙個程序中所有的vma
使用者態對程序位址空間的操作
理解task_struct, mm_struct, 和vm_area_struct之間的關係。
即是理解程序,程序位址空間和vma之間的關係
程序位址空間是指程序可以定址的虛擬位址空間。
32位的處理器中,程序可以雖然定址4g虛擬位址空間,但是記憶體空間使用者無權訪問。
把使用者有權訪問的位址空間稱為記憶體區域
每個程序都有一套自己的頁表,所以即使兩個程序訪問的虛擬位址相同,經過不同的頁表轉換之後,他們實際訪問到的實體地址還是不同的。
使用者程序的棧
mmap對映區域
堆對映區域
資料段對映
**段對映
struct mm_struct 管理的是這個程序的整個記憶體區域
struct vm_area_struct (vma)管理的是記憶體區域中的其中一段對映,例如**段對映
所有struct vm_area_struct 形成乙個鍊錶和一顆紅黑樹,煉表頭和紅黑數根結點在struct mm_struct 中。
malloc就是從記憶體區域中分一塊vma出來
以下這個**可以幫助理解task_struct, mm_struct, 和vm_area_struct之間的關係。
#include
#include
#include
#include
static
int pid;
module_param
(pid,
int, s_irugo)
;static
void
printit
(struct task_struct *tsk)
up_read
(&mm->mmap_sem);}
static
int __init my_init
(void
)elseif(
!tsk )
return-1
;printk
("examing vma's for pid = %d, command = %s\n"
, pid, tsk->comm)
;printit
(tsk)
;return0;
}static
void __exit my_exit
(void
)module_init
(my_init)
;module_exit
(my_exit)
;module_license
("gpl");
module_author
("zhouhan");
module_description
("get physpages");
module_alias
("han phypages get"
);
malloc是使用者態常用的分配記憶體介面的函式,mmap是使用者臺常用的用於建立檔案對映或匿名對映的函式,這兩個函式都是在程序位址空間中進行操作。 虛擬記憶體管理
定義 虛擬記憶體是計算機系統記憶體管理的一種技術。它使得應用程式認為它擁有連續的可用的記憶體 乙個連續完整的位址空間 而實際上,它通常是被分隔成多個物理記憶體碎片,還有部分暫時儲存在外部磁碟儲存器上,在需要時進行資料交換。我的理解 程序例項在使用者態並不直接操作物理記憶體位址,實際物理記憶體是可能是...
3 2 虛擬記憶體管理
3.2.1 虛擬記憶體的基本概念 1 傳統儲存管理方式的特徵 各種記憶體管理策略都是為了同時將多個程序保證在記憶體中以便允許多道程式設計。它們都具有以下兩個共同的特徵 1 一次性 作業必須一次性全部裝入記憶體後,方能開始執行。這會導致兩種情況發生 當作業很大,不能全部被裝入記憶體時,將使該作業無法執...
儲存管理 虛擬記憶體
儲存管理中虛擬記憶體是當記憶體容量不足時需要考慮的乙個問題。那麼 接下來看看,怎麼記憶體是通過外存來擴充套件的。為什麼提出這個問題,實際上問的是這個問題 程式真的可以劃分成很多塊,取部分程式塊裝入較小的記憶體中,然後還能正確執行麼?面對後者提問,可以將程式的邏輯位址正確轉化實體地址,實現程式的分塊 ...