Linux夥伴系統演算法 防止記憶體碎片的產生

2021-07-05 12:01:53 字數 1058 閱讀 1862

夥伴系統也存在一些問題,在系統長時間執行後,物理記憶體會出現很多碎片,如圖所示:

這是雖然可用記憶體頁還有很多,但是最大的連續物理記憶體也只有一頁,這對於使用者程式不成問題,因為使用者程式通過頁表對映,應用程式看到的總是連續的虛擬記憶體。但是對於核心來說就不行了,因為核心有時候需要使用連續的物理記憶體。

2 linux 夥伴系統的提出

linux核心中引入了夥伴系統演算法(buddy system)。把所有的空閒

頁框分組為11個塊鍊錶,每個塊鍊錶分別包含大小為1,2,4,8,16,32,64,128,256,512和1024個連續頁框的頁框塊。最大可以申請1024個連續

頁框,對應4mb大小的連續記憶體。每個

頁框塊的第乙個頁框的實體地址是該塊大小的整數倍。例如,大小為16個頁框的塊,其起始位址是16*2^12(2^12=4096)的整數倍。

假設要申請乙個256個

頁框的塊,先從256個頁框的鍊錶中查詢空閒塊,如果沒有,就去512個

頁框的鍊錶中找,找到了則將頁框塊分為2個256個頁框的塊,乙個分配給應用,另外乙個移到256個頁框的鍊錶中。如果512個頁框的鍊錶中仍沒有空閒塊,繼續向1024個頁框的鍊錶查詢。如果1024塊存在,則將其中的256頁框作為請求返回,剩餘的768分成256塊和512塊分別插到相應的鍊錶中。如果仍然沒有,則返回錯誤。

為清楚了解其分配制度,先給個夥伴系統資料的儲存框圖如下:

linux記憶體管理 夥伴系統演算法

分配記憶體 釋放記憶體 兩個塊的大小相同 兩個塊的位址連續 兩個塊必須是從同乙個大塊分離出來的 linux把每個zone分成max order個free area,每個free are的大小是2的冪次方。max order的值為11,第0組大小為2 0個頁,第1組大小為2 1個頁,依次類推,最大的是...

夥伴系統(演算法) 記憶體分配技術(2)

記憶體管理中的分割槽分配方法 1 夥伴系統 演算法 記憶體分配技術 2 分配核心記憶體 buddy系統和slab系統 3 靜態分割槽方案受固定活躍程序數的限制,並且空間的使用也可能不是最優的。夥伴系統是乙個記憶體分配與管理演算法,該演算法管理的記憶體以2的冪次增長。假設記憶體大小是2,假設需求s大小...

夥伴系統演算法

如有問題,歡迎一起討論 struct free area static struct page rmqueue struct zone zone,unsigned int order return null define mark used index,order,area change bit i...