Linux2 6為資料結構分配記憶體 slab

2021-06-06 03:51:10 字數 1097 閱讀 7745

1.快取記憶體描述符、slab描述符、資料結構物件之間的關係

slab描述符也可以在外面

不管slab描述符在**,空閒鏈結陣列緊跟在slab描述符後面

第一張圖跟2.6的不太一樣,2.6中,所有箭頭都是雙向的,且沒有不同各種類slab描述符的鏈結

建立乙個緩衝的專用佇列:

1.從cache_cache中分配乙個kmem_cache_t結構的快取記憶體描述符

2.進行一系列計算,以確定最佳的slab構成

3.設定各種引數

4.將kmem_cache_t結構鏈入cache_cache的next佇列中

利用這個專用佇列來為這個專用的資料結構分配空間

1.找到第乙個含有空閒物件的slab

若找到,則分配乙個空閒物件給資料結構

若未找到,則擴充該slab佇列

擴充slab佇列

1.計算下一塊slab應有的著色區大小

2.分配若干連續的物理頁面

3.建立slab的管理資訊

4.設定用於具體物件的頁面

5.將頁面構造成slab

6.鏈入給定的slab佇列

建立slab的管理資訊

1.大物件--->分配乙個slab_t

小物件--->留出一部分空間作為slab_t

2.向slab_t寫入管理資訊

釋放乙個資料結構物件

1.找到物件所在的slab

2.計算物件在鏈結陣列中的編號

3.釋放物件(只是修改陣列指標)

真正的頁面記憶體的釋放,由kswapd定期地呼叫kmem_cache_reap來完成

普通快取記憶體的管理類似於夥伴系統

同一資料結構可以有幾個slab,組成乙個slab佇列。

同一資料結構由於大小相同,不同slab佇列的物件很可能會對映到同一快取記憶體行中。

為了提高命中率,同一資料結構的不同slab有不同的著色區,使它們能對映不同行中

資料結構 分配排序

基於分配和收集 先將資料分配到不同的桶中 再將桶中的資料收集到一起 桶式排序 單關鍵字排序 鏈式基數排序 多關鍵字排序 排序過程無須比較關鍵字,而是通過 分配 和 收集 過程來實現排序 它們的時間複雜度可達到線性階 o n 假設待排序的記錄的值在0 m 1之間 設定m個桶,依次掃瞄待排序的記錄,r ...

資料結構內的概念

資料結構中的基本概念 資料結構的內容 需要說的是 上面三個概念是乙個整體,比如相同的邏輯結構會有不同的物理結構 線性表的順序儲存和鏈式儲存 再比如仙童的邏輯結構執行不同的運算方式,產生的效果也是不同的 雙端佇列和單端佇列 所以我們要將三個概念融匯在一起考慮,任何乙個條件發生改變,那麼最終的資料結構可...

資料結構常用內排序

以下排序均使用順序表作為排序資料的儲存結構 順序表基本運算演算法 seqlist.h include define maxl 100 最大長度 typedef int keytype 定義關鍵字型別為int typedef char infotype typedef struct rectype 查...