Linux頁框 夥伴演算法以及slab機制

2022-05-19 09:13:22 字數 496 閱讀 6892

無論是上層應用還是作業系統核心開發,記憶體問題都是我們所需要關注的。

我們來看看linux核心管理和分配機制。

夥伴演算法

夥伴演算法從物理連續的大小固定的段上進行分配。從這個段上分配記憶體,採用 2 的冪分配器來滿足請求分配單元的大小為 2 的冪(4kb、 8kb、16kb 等)。請求單元的大小如不適當,就圓整到下乙個更大的 2 的冪。例如,如果請求大小為 11kb,則按 16kb 的段來請求。

核心使用struct page的結構體來描述每個物理頁,也叫做頁框。在系統裡分配了多少個物理頁就會有對應多少個struct page結構體。

slab是針對小記憶體管理的機制,是分配核心記憶體的第二種策略,每個 slab 由乙個或多個物理連續的頁面組成,每個 cache 由乙個或多個 slab 組成,每個核心資料結構都有乙個 cache。

Linux夥伴演算法

最近 一由於筆者能力有限,文中難免存在不足,如果發現錯誤之處,希望能幫助我及時糾正錯誤之處。1 夥伴演算法的用途 管理物理記憶體,解決外碎片問題。2 滿足以下條件的兩個塊稱為夥伴 l 兩個塊具有相同的大小,記作b l 它們的實體地址是連續的 l 第一塊的第乙個頁框的實體地址是2 b 2 12 的倍數...

linux夥伴演算法

它要解決的問題是頻繁地請求和釋放不同大小的一組連續頁框,必然導致在已分配頁框的塊內分散了許多小塊的空閒頁面,由此帶來的問題是,即使有足夠的空閒頁框可以滿足請求,但要分配乙個大塊的連續頁框可能無法滿足請求。夥伴演算法 buddy system 把所有的空閒頁框分為11個塊鍊錶,每塊鍊錶中分布包含特定的...

夥伴演算法的實現 分配頁框

核心中alloc pages系列頁框分配函式都是基於夥伴演算法實現的,這些函式最終都會呼叫夥伴演算法的入口函式buffered rmqueue linux核心管理物理記憶體有三種方式,其一就是經典的夥伴演算法。但是夥伴演算法分配物理記憶體的基本單位是頁框,因此核心又引入了slab機制,基於此機制實現...