成人在线你懂的-成人在线免费小视频-成人在线免费网站-成人在线免费视频观看-日韩精品国产一区二区-日韩精品国产一区

掃一掃
關注微信公眾號

Linux slab 分配器詳解3
2007-06-21   中國IT實驗室

在創建緩存之后, kmem_cache_create 函數會返回對它的引用。注意這個函數并沒有向緩存分配任何內存。相反,在試圖從緩存(最初為空)分配對象時,refill 操作將內存分配給它。當所有對象都被使用掉時,也可以通過相同的操作向緩存添加內存。

  kmem_cache_destroy

  內核函數 kmem_cache_destroy 用來銷毀緩存。這個調用是由內核模塊在被卸載時執行的。在調用這個函數時,緩存必須為空。

  void kmem_cache_destroy( struct kmem_cache *cachep );

  kmem_cache_alloc

  要從一個命名的緩存中分配一個對象,可以使用 kmem_cache_alloc 函數。調用者提供了從中分配對象的緩存以及一組標志:

  void kmem_cache_alloc( struct kmem_cache *cachep, gfp_t flags );

  這個函數從緩存中返回一個對象。注意如果緩存目前為空,那么這個函數就會調用 cache_alloc_refill 向緩存中增加內存。 kmem_cache_alloc 的 flags 選項與 kmalloc 的 flags 選項相同。表 2 給出了標志選項的部分列表。

  表 2. kmem_cache_alloc 和 kmalloc 內核函數的標志選項

標志 說明
GFP_USER 為用戶分配內存(這個調用可能會睡眠)。
GFP_KERNEL 從內核 RAM 中分配內存(這個調用可能會睡眠)。
GFP_ATOMIC 使該調用強制處于非睡眠狀態(對中斷處理程序非常有用)。
GFP_HIGHUSER 從高端內存中分配內存。

  kmem_cache_zalloc

  內核函數 kmem_cache_zalloc 與 kmem_cache_alloc 類似,只不過它對對象執行 memset 操作,用來在將對象返回調用者之前對其進行清除操作。

  kmem_cache_free

  要將一個對象釋放回 slab,可以使用 kmem_cache_free.調用者提供了緩存引用和要釋放的對象。

void kmem_cache_free( struct kmem_cache *cachep, void *objp );

  kmalloc 和 kfree

  內核中最常用的內存管理函數是 kmalloc 和 kfree 函數。這兩個函數的原型如下:

void *kmalloc( size_t size, int flags );
void kfree( const void *objp );

  注意在 kmalloc 中,惟一兩個參數是要分配的對象的大小和一組標志(請參看 表 2 中的部分列表)。但是 kmalloc 和 kfree 使用了類似于前面定義的函數的 slab 緩存。kmalloc 沒有為要從中分配對象的某個 slab 緩存命名,而是循環遍歷可用緩存來查找可以滿足大小限制的緩存。找到之后,就(使用 __kmem_cache_alloc)分配一個對象。要使用 kfree 釋放對象,從中分配對象的緩存可以通過調用 virt_to_cache 確定。這個函數會返回一個緩存引用,然后在 __cache_free 調用中使用該引用釋放對象。

  其他函數

  slab 緩存 API 還提供了其他一些非常有用的函數。 kmem_cache_size 函數會返回這個緩存所管理的對象的大小。您也可以通過調用 kmem_cache_name 來檢索給定緩存的名稱(在創建緩存時定義)。緩存可以通過釋放其中的空閑 slab 進行收縮。這可以通過調用 kmem_cache_shrink 實現。注意這個操作(稱為回收)是由內核定期自動執行的(通過 kswapd)。

unsigned int kmem_cache_size( struct kmem_cache *cachep );
const char *kmem_cache_name( struct kmem_cache *cachep );
int kmem_cache_shrink( struct kmem_cache *cachep );

  slab 緩存的示例用法

  下面的代碼片斷展示了創建新 slab 緩存、從緩存中分配和釋放對象然后銷毀緩存的過程。首先,必須要定義一個 kmem_cache 對象,然后對其進行初始化(請參看清單 1)。這個特定的緩存包含 32 字節的對象,并且是硬件緩存對齊的(由標志參數 SLAB_HWCACHE_ALIGN 定義)。

熱詞搜索:

上一篇:Linux slab 分配器詳解2
下一篇:Linux slab 分配器詳解4

分享到: 收藏
主站蜘蛛池模板: 辛颖| 恩齐| 裸体模特| 新条由芽| dnf代码大全| 林丹出轨视频| 三峡游轮重庆到宜昌4天三夜| 迪卡娅电影| 正在直播乒乓赛事| 母鸡评课| 杨采钰电影| free hd xxxx moms movie777| 难兄难弟电视剧| 消防给水及消火栓系统技术规范| 女女调教视频| 好男当家 电视剧| 鸡毛信电影| 拾贝的小女孩阅读理解答案 | jayden jaymes| 木村拓哉电影| 大西南电视剧| 混沌行走| 杏色xs| 韩红个人资料| 程嘉美电影| 演觉法师| 迷宫法国电影| 西海情歌歌词全文| 电子请柬结婚模板免费| 多田有花与老丈人电影叫什么名字| 成全免费观看高清电影大侦探| 黄网站在线观看视频| 何丽萍| 分手男女| 电影危机航线什么时候上映| 澳门风云3演员表| 天元突破| 房事性生活| 美女浴室写真| 被打屁股作文| 小学一年级古诗《风》|