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

來源:互聯網
上載者:User

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有不同的著色區,使它們能映射不同行中

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.