linux記憶體管理 之 slab分配器

2021-06-09 18:12:00 字數 822 閱讀 3509

1、頁面分配器是頁面級的記憶體分配工具,能分配2的order次冪的連續物理記憶體。

linux在頁面級記憶體分配的基礎上,開發了小記憶體分配方案--slab、slob、slub。

後兩者分別針對大型系統和嵌入式系統。

2、slab分配器的思想

先利用頁面分配器分配出單個或者一組連續的物理頁面,然後在此基礎上將整塊頁面分割成多個相等的小記憶體單元,以滿足小記憶體空間分配的需要。

3、slab的資料結構

struct kmem_cache

struct slab

malloc_sizes

他們的結構關係如下圖:

4、kmalloc kzalloc

void *kmalloc(size_t size, gfp_t flags)

**流程:現利用size引數在malloc_sizes陣列中找到大於等於size的值,通過它找到乙個對應的slab分配器的kmem_cache,然後在它上面分配記憶體。

不會分配zone_highmem區域的記憶體。

static inline void *kzalloc(size_t size, gfp_t flags)

把分配出來的記憶體清零

5、kcalloc

static inline void *kcalloc(size_t n, size_t size, gfp_t flags)

6、kfree

void kfree (const void *objp)

**流程:根據要釋放的記憶體指標objp呼叫virt_to_page來獲得objp所在頁面物件的指標*page

呼叫_cache_free來釋放記憶體。

Linux記憶體管理之slab演算法簡述

slab 分配機制。slab 快取 linux 所使用的 slab 分配器的基礎是 jeff bonwick 為 sunos 作業系統首次引入的一種演算法。jeff 的分配器是圍繞 物件快取進行的。在核心中,會為有限的 物件集 例如 檔案描述符 和其他常見結構 分配大量記憶體。jeff 發現對核心中...

Linux記憶體管理之slab分配器分析

一 準備知識 前面我們分析過了大記憶體分配的實現機制,事實上,若為小塊記憶體而請求整個頁面,這樣對於記憶體來說是一種極度的浪費。因此linux 採用了slab 來管理小塊記憶體的分配與釋放。slab 最早是由sun 的工程師提出。它的提出是基於以下因素考慮的 1 核心函式經常傾向於反覆請求相同的資料...

Linux記憶體管理slab分配器

在solaris 2.4以前,linux核心採用基於夥伴演算法實現的分割槽頁框分配器適合大塊記憶體的請求。夥伴將空閒頁面分為m個組,第1組儲存2 0個單位的記憶體塊,第2組儲存2 1個單位的記憶體塊,第3組儲存2 2個單位的記憶體塊,第4組儲存2 3個單位的記憶體塊,以此類推.直到m組.但是夥伴演算...