Linux作業系統記憶體管理(一)

2021-09-11 00:08:40 字數 904 閱讀 9238

✅ 空閒頁面的管理

空閒記憶體管理的基本單位是頁面。linux核心管理的每個記憶體空閒塊都是2的冪次方個頁面,大小為order。

存放:乙個空閒頁面的放在一起,2個空閒頁面的放在一起,4個空閒頁面的放在一起......(實體地址連續)一直到max_order-1。(定義max_order=11)最大連續空閒物理記憶體大小是4mb。

區域(zone)資料結free_area[max_order]構中陣列儲存每個空閒記憶體塊鍊錶。

struct free_area

list_head是乙個雙向鍊錶結構,鍊錶中元素的型別將為struct page結構。

map域指向乙個位圖,其大小取決於現有的頁面數。free_area第k項位圖的每一位,描述的就是大小為2k個頁面的兩個夥伴塊的狀態。如果點陣圖的某位為0,表示一對兄弟塊中或者兩個都空閒,或者兩個都被分配,如果為1,肯定有一塊已被分配。當兄弟塊都空閒時,核心把它們當作乙個大小為2k+1的單獨快來處理。

linux核心物理記憶體三個層次:節點,區域,頁面。節點下的每個區域都管理著自己的空閒物理頁面。

·夥伴演算法(記憶體分配演算法)

減少外部碎片,允許快速分配與**物理頁面。

情景:當需求乙個4個連續頁面的時候,檢查是否又大小為2^3-1個頁面的空閒塊滿足,如果鍊錶上又,就分配給使用者,否則向下乙個級別(order)的鍊錶中查詢。

可以借助二叉樹的資料結構來實現夥伴演算法的**模擬(具體待議)

·頁面分配過程

在4k頁面大小的系統中,每次最多分配4mb的連續物理記憶體。如果核心需要的記憶體大於4mb,只能連續多次申請4mb記憶體拼成大塊記憶體,並且必須保證實體地址連續。

·頁面**過程

標記頁面塊空閒;檢視相鄰物理頁面是否空閒,如果空閒合併成更大的的物理頁面塊;有合併要更新freearea中煉表元素;更新統計資訊。

Linux作業系統之記憶體管理

作業系統的記憶體管理,主要分為三個方面 乙個記憶體管理系統至少應該做三件事情 檢視程序記憶體空間的布局的命令 cat proc 程序id maps 分段機制的原理 linux 傾向於另外一種從虛擬位址到實體地址的轉換方式,稱為分頁 paging 虛擬記憶體中的頁通過頁表對映為物理記憶體中的頁。把記憶...

作業系統記憶體管理

作業系統記憶體管理 一 程序的虛擬位址空間 每個程序都被賦予自己的虛擬位址空間,對於32位程序來說,這個位址空間為4g,因此程序中的位址可以為0x00000000至0xffffffff之間的任何乙個值。其中4g空間中的低區的2g空間留給程序使用,而高區的2g空間則留給系統使用。在windows200...

作業系統記憶體管理

作業系統記憶體管理一 程序的虛擬位址空間 每個程序都被賦予自己的虛擬位址空間,對於 32位程序來說,這個位址空間為 4g,因此程序中的位址可以為 0x00000000 至0xffffffff 之間的任何乙個值。其中 4g空間中的低區的 2g空間留給程序使用,而高區的 2g空間則留給系統使用。在win...