核心中很多時候要求分配連續頁,而計算機經過長時間的執行以後,頻繁的分配和釋放記憶體,就會造成有很多記憶體雖然空閒可用,但是散布在實體地址空間的各處,這就是記憶體管理的碎片問題。為了能夠快速檢測記憶體中的連續區域,減緩碎片問題,linux核心採用了古老而歷經考驗的技術:夥伴系統。
如圖所示,第一幅圖中有2的4次方的一塊連續記憶體,此時,系統將其分為兩塊大小相等的2的3次方大小的記憶體,兩塊記憶體稱為夥伴記憶體,當需要使用記憶體時,將其中一塊分配使用,如第二幅圖所示。而剩下的2的3次方記憶體會被再次分為兩部分,根據記憶體需要,再進行一分為二,這就是夥伴系統。
記憶體管理 三 夥伴系統
linux核心記憶體管理的一項重要工作就是如何在頻繁申請釋放記憶體的情況下,避免碎片的產生。linux採用夥伴系統解決外部碎片的問題,採用slab解決內部碎片的問題 buddy演算法最主要的的特點任何時候區域裡的空閒記憶體都能以2的n次方進行拆分或合併。夥伴系統的宗旨就是用最小的記憶體塊來滿足核心的...
初窺記憶體管理(三)夥伴演算法
假設系統的可利用記憶體空間容量為2m個字 位址從0到2m 1 則在開始執行時,整個記憶體區是乙個大小為2m的空閒塊,在執行了一段時間之後,被分隔成若干占用塊和空閒塊。為了在分配時查詢方便起見,我們將所有大小相同的空閒塊建於一張子表中。每個子表是乙個雙重鍊錶,這樣的鍊錶可能有m 1個,將這m 1個表頭...
linux記憶體管理 夥伴系統演算法
分配記憶體 釋放記憶體 兩個塊的大小相同 兩個塊的位址連續 兩個塊必須是從同乙個大塊分離出來的 linux把每個zone分成max order個free area,每個free are的大小是2的冪次方。max order的值為11,第0組大小為2 0個頁,第1組大小為2 1個頁,依次類推,最大的是...