linux記憶體管理之物理空間
linux核心中有個全域性變數mem_map,指向乙個page資料結構的陣列,每個page資料結構代表著乙個物理頁面,整個資料就代表著系統中的全部物理頁面。頁表項的高20位對於軟體和mmu硬體有著不同的意義。對於軟體,這是乙個物理頁面的序號,將這個序號用作下標就可以從mem_map找到這個物理頁面的page資料結構。對於硬體,在低位補上12個0後就是物理頁面的起始位址。
在記憶體對映的過程中,mmu首先檢查的是p標誌位,它指示所對映的頁面是否在記憶體中。只有在p標誌位為1的時候mmu才會完成對映的全過程;否則就會因為不能完成對映而產生一次缺頁異常。
除了mmu硬體根據頁面表項的內容進行頁面對映外,軟體也可以設定或檢測頁表的內容。對軟體來說,頁表項為0表示尚未為這個表項建立對映,如果表項不為0,但p標誌位為0,則表示對映已經建立,但是所對映的物理頁面不在記憶體中。
系統中的每乙個物理頁面都有乙個page結構,系統在初始化時根據物理記憶體的大小建立起乙個page結構陣列mem_map,作為物理頁面的倉庫,裡面的每個page資料結構都代表著系統中的乙個物理頁面。
page結構
typedef
struct pagemem_map_t;
在page資料結構裡面有乙個zone_struct結構,該結構中有一組空閒區間佇列(free_area_t)。為什麼是「一組」佇列,而不是「乙個」佇列呢?這是因為常常需要成」塊「地分配在物理空間中連續的多個頁面,所以要按塊的大小分別加以管理。因此,在管理區資料結構中既要有乙個佇列來保持一些長度為1的物理頁面,也要有乙個佇列來保持連續長度為2的頁面塊以及連續長度為4、8、16、…、直至1024。也就是說最大的連續頁面塊可達1024個頁面,即4mb。
zone_sturct結構
#define max_order 10
typedef
struct free_area_structfree_area_t;
typedef
struct zone_structzone_t;
linux記憶體管理之虛擬空間
在linux系統中,每乙個程序都有各自的虛存空間,也就是我們常說的使用者空間。在程序中的task_struct結構中有乙個mm_struct資料結構,該結構是程序整個使用者空間的抽象。需要指出的是cpu實際進行的記憶體對映並不涉及mm_struct結構,而是通過頁目錄和頁表進行的,但mm_struct描述了這種對映。
linux虛存管理資料結構圖:
mm_struct結構
struct mm_struct
;
vm_area_struct結構
vm_area_struct結構是對虛存空間的乙個抽象。
struct vm_area_struct
Linux 記憶體管理之highmem簡介
一 linux核心位址空間 一般來說linux 核心按照 3 1 的比率來劃分虛擬記憶體 x86等 3 gb 的虛擬記憶體用於使用者空間,1gb 的記憶體用於核心空間。當然有些體系結構如mips使用2 2 的比率來劃分虛擬記憶體 2 gb 的虛擬記憶體用於使用者空間,2 gb 的記憶體用於核心空間,...
Linux記憶體管理機制簡介
在linux中經常發現空閒記憶體很少,似乎所有的記憶體都被系統占用了,表面感覺是記憶體不夠用了,其實不然。這是linux記憶體管理的乙個優秀特性,在這方面,區別於 windows的記憶體管理。主要特點是,無論物理記憶體有多大,linux 都將其充份利用,將一些程式呼叫過的硬碟資料讀入記憶體,利用記憶...
記憶體管理 記憶體的簡介
32位機器具有4g的程式記憶體,這個記憶體並不是指實際的物理記憶體,而是虛擬記憶體這個虛擬記憶體並不是實際存在的。我們知道乙個虛擬空間由一組頁對映函式將虛擬空間的各個頁對映至相應的物理空間,那麼建立乙個虛擬空間實際上並不是建立空間而是建立對映函式所需要的相應的資料結構,在i386 的linux下,建...