linux核心設計與實現讀書筆記 記憶體管理

2021-06-27 13:16:21 字數 1704 閱讀 8167

一、頁

記憶體管理的基本單位:頁。

核心中用struct page表示物理頁,位於,屬性包括flag頁狀態、count頁的引用計數,virtual頁虛擬位址。目的在於描述物理記憶體本身而非其中的資料。

1)獲得頁

核心:alloc_pages(gft_t gft_mask,order),連續分配2n個連續物理頁,返回至向第乙個頁page結構體的指標;也有函式返回邏輯位址get_free_page;也可以請求並填充為0。

引數gft_t ()分為:行為修飾符(分配方法,如不能中斷),區修飾符(分配區),型別(前兩種組合)。

釋放頁free_page

2)  kmalloc

獲得位元組為單位的一塊核心記憶體  ,kmalloc(size,gft_t flags)

由於連續,因此效能更好

kfree釋放由kmalloc申請的位址空間

3)vmalloc

分配的記憶體虛擬位址連續,而實體地址則無需連續。為把不連續的實體地址在邏輯位址上連續,需建立專門的頁表項,且每頁都需要一一對映。

宣告在定義在中

vfree:釋放

二、區a. zone_dma:執行dma操作 <16m

b. zone_dma32:只能被32位裝置訪問、

c. zone_noral:能正常對映的頁

永久對映:kmap(page),。用在高階記憶體中為永久對映,解出 kunmap

臨時對映:kmap_atomic(page,type)。使用核心的保留對映來進行臨時存放,主要用於上下文不能睡眠的情況來避免阻塞

高階記憶體一般使用alloc_pages(),返回指向strut page結構的指標,因為可能沒有邏輯位址與之對應。

三、slab層(slab分配器)

通用資料結構快取層

設計:乙個或多個物理連續頁組成slab,多個slab組成快取記憶體。乙個快取記憶體對應一種物件型別,將不同型別物件劃分為快取記憶體組,如存放程序描述符的快取記憶體組。

slab:包含一些物件成員;slab狀態:滿、部分、空。

快取記憶體kmem_cache包含三個鍊錶full、partial、slabs_empty,鍊錶包含快取記憶體中所有slab 。

slab描述符struct slab

管理:通過在快取記憶體的基礎上,提供給核心的介面完成對slab層的管理。

建立:kmem_cache_create(name,size,align,flag)

撤銷:kmem_cache_destroy(cachep)

分配:kmem_cache_alloc(cachep,flags)

釋放:kmem_cache_free(cachep,objp)

四、棧的靜態分配

程序的核心棧大小:體系結構&編譯選項。一般為1~2頁。

核心棧存放程序的呼叫鏈;中斷棧:可以不必與核心棧共享空間。

節省棧的資源:減小區域性變數、靜態分配。因為棧溢位時末端的thread_info可能會溢位。

五、cpu分配

cpu資料放在乙個陣列中,按照處理器號尋找陣列中對應的處理器。

cpu介面:percpu 提供簡化建立和操作cpu資料的方法。

定義 define_per_cpu(type,name)    ; 訪問變數  get_cpu_var(name)++禁止搶占;put_cpu_var(name)啟用搶占;

·動態分配:alloc_percpu()

使用每個cpu資料:最小化資料上鎖,但需要禁止核心搶占。

Linux核心設計與實現讀書筆記 1

我現在要做的科研專案涉及到核心程式設計的知識,所以在學校的圖書館借了一本 linux核心設計與實現 英文名 linux kernel development 打算通過這本書來了解一下linux核心各部分的原理。我選擇這本書的原因很簡單 薄。全書只有二百多頁,但內容還是很全面的。翻譯質量還可以,譯者還...

《Linux核心設計與實現》讀書筆記 程序排程

程序排程程式負責決定將哪個程序投入執行,何時執行以及執行多長時間。在執行態程序之間分配有限的處理器時間資源。多工系統分為搶占式和非搶占式。linux使用搶占式。大部分現代系統都是搶占式 io消耗型 處理器消耗型程序 把大多時間用於執行 的程序。程序優先順序 nice值 20 19,值越大優先順序越低...

linux核心設計與實現讀書筆記 程序的位址空間

記憶體描述符 描述程序的位址空間,mm struct定義在中,包括記憶體物件的位址 使用該位址的程序 頁表等資訊,自身鏈結在雙向鍊錶中。首元素init mm記憶體描述符,代表init程序的位址空間,操作時使用mmlist lock鎖防治併發。task struct結構體mm存放記憶體描述符。分配記憶...