日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux 核心--4.內(nèi)存管理( 五 )



為了實(shí)現(xiàn)跨平臺運(yùn)行,Linux提供了一系列轉(zhuǎn)換宏使得核心可以訪問特定進(jìn)程的頁表 。這樣核心無需知道 頁表入口的結(jié)構(gòu)以及它們的排列方式 。

這種策略相當(dāng)成功,無論在具有三級頁表結(jié)構(gòu)的Alpha AXP還是兩級頁表的Intel X86處理器中,Linux總是使 用相同的頁表操縱代碼 。

3.4頁面分配與回收
對系統(tǒng)中物理頁面的請求十分頻繁 。例如當(dāng)一個可執(zhí)行映象被調(diào)入內(nèi)存時,操作系統(tǒng)必須為其分配頁面 。當(dāng)映象執(zhí)行完畢和卸載時這些頁面必須被釋放 。物理頁面的另一個用途是存儲頁表這些核心數(shù)據(jù)結(jié)構(gòu) 。虛擬內(nèi)存子系統(tǒng)中負(fù)責(zé)頁面分配與回收的數(shù)據(jù)結(jié)構(gòu)和機(jī)制可能用處最大 。

系統(tǒng)中所有的物理頁面用包含mem_map_t結(jié)構(gòu)的鏈表mem_map來描敘,這些結(jié)構(gòu)在系統(tǒng)啟動時初始化 。每個 mem_map_t描敘了一個物理頁面 。其中與內(nèi)存管理相關(guān)的重要域如下:

count

記錄使用此頁面的用戶個數(shù) 。當(dāng)這個頁面在多個進(jìn)程之間共享時,它的值大于1 。
age
此域描敘頁面的年齡,用于選擇將適當(dāng)?shù)捻撁鎾仐壔蛘咧脫Q出內(nèi)存時 。
map_nr
記錄本mem_map_t描敘的物理頁面框號 。
頁面分配代碼使用free_area數(shù)組來尋找和釋放頁面,此機(jī)制負(fù)責(zé)整個緩沖管理 。另外此代碼與處理器使用的頁面大小和物理分頁機(jī)制無關(guān) 。

free_area中的每個元素都包含頁面塊的信息 。數(shù)組中第一個元素描敘1個頁面,第二個表示2個頁面大小的塊而接下來表示4個頁面大小的塊,總之都是2的次冪倍大小 。list域表示一個隊(duì)列頭,它包含指向mem_map數(shù)組中page數(shù)據(jù)結(jié)構(gòu)的指針 。所有的空閑頁面都在此隊(duì)列中 。map域是指向某個特定頁面尺寸的頁面組分配情況位圖的指針 。當(dāng)頁面的第N塊空閑時,位圖的第N位被置位 。

圖free-area-figure畫出了free_area結(jié)構(gòu) 。第一個元素有個自由頁面(頁面框號0),第二個元素有4個頁面大小的2個自由塊,前一個從頁面框號4開始而后一個從頁面框號56開始 。



3.4.1頁面分配
Linux使用Buddy算法來有效的分配與回收頁面塊 。頁面分配代碼每次分配包含一個或者多個物理頁面的內(nèi)存塊 。頁面以2的次冪的內(nèi)存塊來分配 。這意味著它可以分配1個、2個和4個頁面的塊 。只要系統(tǒng)中有足夠的空閑頁面來滿足這個要求(nr_free_pages > min_free_page),內(nèi)存分配代碼將在free_area中尋找一個與請求大小相同的空閑塊 。free_area中的每個元素保存著一個反映這樣大小的已分配與空閑頁面 的位圖 。例如,free_area數(shù)組中第二個元素指向一個反映大小為四個頁面的內(nèi)存塊分配情況的內(nèi)存映象 。

分配算法首先搜尋滿足請求大小的頁面 。它從free_area數(shù)據(jù)結(jié)構(gòu)的list域著手沿鏈來搜索空閑頁面 。如果沒有這樣請求大小的空閑頁面,則它搜索兩倍于請求大小的內(nèi)存塊 。這個過程一直將持續(xù)到free_area 被搜索完或找到滿足要求的內(nèi)存塊為止 。如果找到的頁面塊大于請求的塊則對其進(jìn)行分割以使其大小與請求塊匹配 。由于塊大小都是2的次冪所以分割過程十分簡單 ??臻e塊被連進(jìn)相應(yīng)的隊(duì)列而這個頁面塊被分配給調(diào)用者 。





圖3.4 free_area數(shù)據(jù)結(jié)構(gòu)

在圖3.4中,當(dāng)系統(tǒng)中有大小為兩個頁面塊的請求發(fā)出時,第一個4頁面大小的內(nèi)存塊(從頁面框號4開始)將分成兩個2頁面大小的塊 。前一個,從頁面框號4開始的,將分配出去返回給請求者,而后一個,從頁面框號6開始,將被添加到free_area數(shù)組中表示兩個頁面大小的空閑塊的元素1中 。

3.4.2頁面回收
將大的頁面塊打碎進(jìn)行分配將增加系統(tǒng)中零碎空閑頁面塊的數(shù)目 。頁面回收代碼在適當(dāng)時機(jī)下要將這些頁面結(jié)合起來形成單一大頁面塊 。事實(shí)上頁面塊大小決定了頁面重新組合的難易程度 。

推薦閱讀