在塊分配機制中,涉及到幾個主要的資料結構。
通過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...