亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關注微信公眾號

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

slab 背后的動機

  與傳統的內存管理模式相比, slab 緩存分配器提供了很多優點。首先,內核通常依賴于對小對象的分配,它們會在系統生命周期內進行無數次分配。slab 緩存分配器通過對類似大小的對象進行緩存而提供這種功能,從而避免了常見的碎片問題。slab 分配器還支持通用對象的初始化,從而避免了為同一目而對一個對象重復進行初始化。最后,slab 分配器還可以支持硬件緩存對齊和著色,這允許不同緩存中的對象占用相同的緩存行,從而提高緩存的利用率并獲得更好的性能。

  API 函數

  現在來看一下能夠創建新 slab 緩存、向緩存中增加內存、銷毀緩存的應用程序接口(API)以及 slab 中對對象進行分配和釋放操作的函數。

  第一個步驟是創建 slab 緩存結構,您可以將其靜態創建為:

  struct struct kmem_cache *my_cachep;

  然后其他 slab 緩存函數將使用該引用進行創建、刪除、分配等操作。kmem_cache 結構包含了每個中央處理器單元(CPU)的數據、一組可調整的(可以通過 proc 文件系統訪問)參數、統計信息和管理 slab 緩存所必須的元素。

  kmem_cache_create

  內核函數 kmem_cache_create 用來創建一個新緩存。這通常是在內核初始化時執行的,或者在首次加載內核模塊時執行。其原型定義如下:

struct kmem_cache *
kmem_cache_create( const char *name, size_t size, size_t align,
unsigned long flags;
void (*ctor)(void*, struct kmem_cache *, unsigned long),
void (*dtor)(void*, struct kmem_cache *, unsigned long));

  name 參數定義了緩存名稱,proc 文件系統(在 /proc/slabinfo 中)使用它標識這個緩存。 size 參數指定了為這個緩存創建的對象的大小, align 參數定義了每個對象必需的對齊。 flags 參數指定了為緩存啟用的選項。這些標志如表 1 所示。

  表 1. kmem_cache_create 的部分選項(在 flags 參數中指定)

選項 說明
SLAB_RED_ZONE 在對象頭、尾插入標志,用來支持對緩沖區溢出的檢查。
SLAB_POISON 使用一種己知模式填充 slab,允許對緩存中的對象進行監視(對象屬對象所有,不過可以在外部進行修改)。
SLAB_HWCACHE_ALIGN 指定緩存對象必須與硬件緩存行對齊。

  ctor 和 dtor 參數定義了一個可選的對象構造器和析構器。構造器和析構器是用戶提供的回調函數。當從緩存中分配新對象時,可以通過構造器進行初始化。

熱詞搜索:

上一篇:Linux slab 分配器詳解1
下一篇:Linux slab 分配器詳解3

分享到: 收藏