Linux記憶體管理6---夥伴演算法與slab

來源:互聯網
上載者:User

標籤:記憶體 Clerk   展開   zone地區   完成   頁面   img   page   cpu   關聯   

1.前言

本文所述關於記憶體管理的系列文章主要是對陳莉君老師所講述的記憶體管理知識講座的整理。

本講座主要分三個主題展開對記憶體管理進行講解:記憶體管理的硬體基礎、虛擬位址空間的管理、物理地址空間的管理.

本文將主要以X86架構為例來介紹夥伴演算法和slab分配

2.夥伴演算法概述
  • 塊鏈表

Linux的夥伴演算法將所有的空閑頁面分成MAX_ORDER+1(MAX_ORDER預設大小為11)個塊鏈表

每個鏈表中的一個節點指向一個含有2的冪次個頁面的塊,即頁塊或簡稱塊

  • 夥伴

大小相同、物理地址連續的兩個頁塊稱為夥伴

  • 夥伴演算法工作原理

首先在大小滿足要求的塊鏈表中尋找是否有空閑塊,若有則直接分配,否則在更大的塊的塊鏈表中尋找;

逆過程是塊的釋放,此時會把滿足夥伴關係的塊合并,組成一個更大的塊,並插入到相應的塊鏈表中

3.與夥伴演算法有關的資料結構

每個頁框對應一個struct page執行個體

每個記憶體區關聯一個struct zone地區,該結構中用free_area數組對空閑頁框進行管理

4.夥伴演算法結構執行個體

圖 夥伴演算法結構執行個體圖

 

 5.夥伴演算法分配原理

 

 

 

 

 

 

 

 

 

 

 

 

6. 頁框分配的實現

 

7.實體記憶體分配器

基於夥伴演算法、每CPU快取和slab快取形成兩種記憶體 Clerk

  • 分區頁框分配器(zoned page frame allocator)

處理對連續頁框的記憶體配置請求。分區頁框分配器分為兩大部分:前端的管理區分配器和夥伴系統

管理區分配器負責搜尋一個能滿足請求頁框大小的管理區;

在每個管理區中,具體的頁框分配工作由夥伴系統負責,為了達到更好的效能,單個頁框的申請直接由每cpu頁框快取完成

圖 分區頁框分配器樣本圖

  • slab分配器

將各種指派至分區放進快取,即每個快取都對同類型指派至的一種“儲備”

 

 

 

 

Linux記憶體管理6---夥伴演算法與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.