Linux內存管理數據結構之間的關係

linux內存管理是一個相當複雜的機制,這裏只是基礎的內存管理知識結構,不包括頁面換出換入。
可以從以下角度思考問題
用戶地址空間:
用戶內存請求被認爲是不緊迫的
用戶訪問是危險的 權限控制

用戶程序典型應用:
shell中運行個命令,全新的地址空間
正在運行的程序裝入了別一個程序exec,進程標識不變,線性區變了
用戶程對文件作內存映射
用戶malloc
用戶棧增長
IPC共享內存
多線程共享

內存管理數據結構設計原因,其考慮的問題。
UMA 與 NUMA

DMA
NORMAL
HIGHMEM

可阻塞路徑中分配內存 永久內存映射
不可阻塞路徑中分配內存 保留頁池 try… 臨時內核映射

碎片:
內:
外:1 2 4 8 16 …1024

memzone中:
申請內存要考慮NUMA,從本CPU結點到其他CPU結點,從HIGHMEM到NORMAL到DMA的優先級

夥伴系統
內核經常請求和釋放單個頁框,定義每CPU頁框高速緩存。 一個頁可能是熱的,在CPU緩存中。
從夥系統到每CPU高速緩存
從每CPU高速緩存到夥伴系統
每次申請和釋放都是批量的,因此有上限、下限、批量值。

slab分配器
對象構造與析構
對象緩存
內核反覆申請一些固定大小對象
對象對齊
不同slab中有相同偏移量的對象可能放在高速緩存到同一行中。通過着色避免。

每CPU本地高速緩存 降低自旋鎖的競爭

非連續內存區 vmalloc
對內存請求不是很頻繁。
沒有外碎片

缺頁異常處理程序考慮:
是編程錯誤導致?
是無效線性地址 進程地址空間,介有待分配
寫時複製?

內存頁面換入換出。算法。
內存管理知識體系

**

linux內存管理數據結構之間的關係

**
內存管理數據結構之間的關係

SLAB經典圖

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章