linux 內存管理基本框架

概述

linux 內核機制採用3層映射機制,邏輯上把32位線性地址劃分4個段,各段佔有若干位,依次爲PGD(全局頁面目錄),PMD(中間頁面目錄),PT(頁表),以及物理頁的偏移。

這裏寫圖片描述

基地址->PGD->PMD->PT->OFFSET->物理頁面中相應的地址

進程虛擬空間

32位地址代表4G的地址空間,Linux將這4G地址空間劃分爲2個部分,最高的1G(0xC000000-0XFFFFFFFF)用於內核本身,稱爲系統空間,相對應的剩餘3G爲用戶空間,這樣每個進程可用的用戶空間位3G,系統空間由所有的進程共享,當進程通過系統調用陷入內核時,該進程在共享的地址空間運行,不在有獨立的地址空間,但從進程的角度看還是獨自擁有4G的虛擬空間。

這裏寫圖片描述

地址映射過程

linux內存管理保留段式存儲,但是映射過程中什麼也不做,而是採用頁式存儲。與段式相比頁存儲管理具有效率高,固定大小,便於管理的特點,每個進程都有自己的PGD,保存在mm_struct中,當調度進程運行的時候內核設置好CR3寄存器,MMU硬件從CR3寄存器取到指向當前頁目錄指針,對照線性地址格式最終找到物理地址。CPU需要3次訪問內存(PGD,PMD,PT)的查找,所以,虛擬內存的高效依賴於cache。

每個進程控制塊task_struct中只有一個mm_struct,mm_struct是進程在用戶空間的抽象,也是總的控制結構,mm->pgd指向進程頁目錄,當內核調度進程運行時,就將這個指針轉換爲物理地址,mm_struct 以及下屬結構vm_area_struct表示對內存的需求,當得不到滿足時就會產生缺頁中斷,通過前面頁目錄等分配物理內存。
這裏寫圖片描述

如果一個區域是一個文件的映射,vm_file將被映射,通過i_mapping獲取到這個地址空間的內存。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章