Linux內存管理之三 頁的分配和釋放

Linux對內存區內的頁框的分配和釋放,採用的算法是夥伴系統。


如上圖,Linux分配頁時,只能分配2^n個頁。內核維護MAX_ORDER個鏈表,每個鏈表記錄着連續的空閒頁。第一個鏈表中的每一項爲1個空閒頁,第二個鏈表中的每一項爲2個空閒頁,第三個鏈表中的每一項爲4個空閒頁。。。,依次類推。分配頁時,從對應的鏈表上摘除空閒頁;釋放頁時,將對應的頁歸還到對應的鏈表。分配釋放頁的過程中,可能伴隨着內存頁的拆分和合並。比如要分配16個空閒頁,但是對應的鏈表爲空,這時如果32個空閒頁對應的鏈表如果不爲空,則從鏈表中摘除32個空閒頁,並將其一分爲二,其中16個頁用於內存分配,剩餘16個頁則插入到16個頁對應的鏈表中。

儘管頁的分配算法是簡單的,但是實際過程卻非常複雜。這是因爲分配頁式必須考慮一下幾點:
1 備用內存區。當從一個內存區無法得到內存時,系統會從同一內存節點的其它內存區或者從另一個內存節點中的內存區中獲取內存。
2 頁的換入和換出,在沒有足夠多的空閒頁時,可能需要將頁換出以獲取空閒內存。
3 頁的回收,對一些緩衝區的不再使用的頁進行回收,以獲取空閒頁。
4 系統中必須保持一定“水位”的空閒頁,以應付對內存的緊急分配。如果系統將頁分配完,在急需內存時,再進行頁的回收或換出,無疑是非常糟糕的設計。系統中必須保持一定量的內存頁。
5 不同的分配策略。不同的分配策略可能採用的方法有區別。
總之,頁的分配和釋放需要考慮許多因素,儘量滿足內存分配的同時,要保證系統的穩定性和健壯性。
發佈了65 篇原創文章 · 獲贊 58 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章