ext4 12分配機制 關鍵的資料結構

2021-12-29 19:54:52 字數 1582 閱讀 5171

在塊分配機制中,涉及到幾個主要的資料結構。

通過ext4_allocation_request描述塊請求,然後基於塊查詢結果即上層需求來決定是否執行塊分配操作。

在分配過程中,為了更好執行分配,記錄一些資訊,需要對分配行為進行描述,就有結構體ext4_allocation_contex。

在搜尋可用空間過程中,是有可能使用預分配空間的,因此還需要有能夠描述預分配空間大小等屬性的描述符ext4_prealloc_space。

下面,對各個關鍵結構體進行詳細的分析。

1. 塊請求描述符ext4_allocation_request塊分配請求屬性,有請求描述符ext4_allocation_request來描述:

structext4_allocation_request else if (size <= 32 * 1024) else if (size <= 64 * 1024) else if (size <= 128 * 1024) else if (size <= 256 * 1024) else if (size <= 512 * 1024) else if (size <= 1024 * 1024) else if (nrl_check_size(size, 4 * 1024 * 1024, max, 2 * 1024)) else if (nrl_check_size(size, 8 * 1024 * 1024, max, 4 * 1024)) else if (nrl_check_size(ac->ac_o_ex.fe_len,

(8<<20)>>bsbits,max, 8 * 1024)) else u;

spinlock_t pa_lock;

atomic_t pa_count;

unsigned pa_deleted;

ext4_fsblk_t pa_pstart; /*phys. block */

ext4_lblk_t pa_lstart; /*log. block */

ext4_grpblk_t pa_len; /*len of preallocated chunk */

ext4_grpblk_t pa_free; /* howmany blocks are free */

unsigned short pa_type; /* pa type.inode or group */

spinlock_t *pa_obj_lock;

struct inode *pa_inode; /*hack, for history only */

其中有四個結構體非常重要:

pa_lstart -> prealloc 空間的起始邏輯位址(對檔案而言);

pa_pstart -> prealloc 空間的起始實體地址;

pa_len -> prealloc 空間的長度;

pa_free -> prealloc 空間的可用長度;

這個結構體是在函式ext4_mb_new_inode_pa()或ext4_mb_new_group_pa()中初始化。

暫時就分析這麼幾個結構體吧。

作者:younger liu,

本作品採用知識共享署名-非商業性使用-相同方式共享 3.0 未本地化版本許可協議進行許可。

C C 記憶體分配機制

1.c語言中的記憶體機制 在c語言中,記憶體主要分為如下5個儲存區 1 棧 stack 位於函式內的區域性變數 包括函式實參 由編譯器負責分配釋放,函式結束,棧變數失效。2 堆 heap 由程式設計師用malloc calloc realloc分配,free釋放。如果程式設計師忘記free了,則會造...

memcached記憶體分配機制

memcached slab allocator分配機制 slab allocator的基本原理是按照預先規定的大小,將分配的記憶體分割成特定長度的塊,以完全解決記憶體碎片問題。slab allocation的原理相當簡單,就是將分配的記憶體分割成各種尺寸的塊 chunk 並把尺寸相同的塊分成組 c...

Memcache記憶體分配機制

1.page 頁 為記憶體分配的最小單位 memcached 的記憶體分配以page為單位,預設情況下乙個page是1m,可以通過 i引數在啟動時指定。如果需要申請記憶體時,memcached會劃分出乙個新的page並分配給需要的slab區域。page一旦被分配在重啟前不會被 或者重新分配 2.sl...