後備快取記憶體 kmem cache

2021-09-10 19:46:41 字數 1961 閱讀 1469

linux核心的快取記憶體管理有時稱為『slab分配器』。因此,相關函式和型別在中宣告。

資料型別kmem_cache。

建立快取:

struct kmem_cache *kmem_cache_create(const char *name, size_t size, size_t align,

unsigned long flags,

void (*ctor)(void *));

name:a string which is used in /proc/slabinfo to identify this cache. 與整個快取記憶體相關聯,其功能是保管一些指向該名稱的指標,而不是複製其內容,因此,驅動程式應該將指向靜態(通常可取直接字串)的指標傳遞給這個函式。名稱不能包含空白。

size:the size of objects to be created in this cache.

align:the required alignment for the objects.

flags:slab flags。是乙個掩碼。

/*

* flags to pass to kmem_cache_create().

* the ones marked debug are only valid if config_debug_slab is set.

*/#define slab_consistency_checks 0x00000100ul /* debug: perform (expensive) checks on alloc/free */

#define slab_red_zone 0x00000400ul /* debug: red zone objs in a cache */

#define slab_poison 0x00000800ul /* debug: poison objects */

#define slab_hwcache_align 0x00002000ul /* align objs on cache lines */

#define slab_cache_dma 0x00004000ul /* use gfp_dma memory */

#define slab_store_user 0x00010000ul /* debug: store the last owner for bug hunting */

#define slab_panic 0x00040000ul /* panic if kmem_cache_create() fails */

ctor:a constructor for the objects.

分配記憶體物件:

一旦某個物件的快取記憶體被建立,就可以呼叫kmem_cache_alloc從中分配記憶體物件。

void *kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags);
cachep:the cache to allocate from.就是剛建立的cache。

flags:和傳遞給kmalloc的相同。

釋放記憶體物件:

void kmem_cache_free(struct kmem_cache *cachep, void *objp)
cachep:是建立的cache。

objp:是通過kmem_cache_alloc分配記憶體的物件。

釋放快取:

如果驅動程式**中和快取記憶體有關的部分已經處理完了(乙個經典的情況是模組被解除安裝的時候),這時驅動程式應該釋放它的快取記憶體,函式如下:

void kmem_cache_destroy(struct kmem_cache *s);

linux DNS快取記憶體

配置名稱伺服器 本機ip 172.25.254.117 1 安裝 bind 軟體包 yum install y bind2 編輯 etc named.conf listen on port 53 開啟埠 allow query 允許訪問 forwarders 如果伺服器沒有這個位址就去訪問250 3...

快取記憶體DNS

dns 客戶端修改dns 服務端yum install bind y firewall cmd permanent add service dns firewall cmd reload setenforce 0 netstat antulpe grep named vim etc named.co...

快取記憶體DNS

yum install bind y systemctl start named 啟動dns服務 此時可能需要在虛擬機器中進行無規律的敲鍵盤,動滑鼠等操作 systemctl enable named firewall cmd add service dns 設定dns可通過火牆 step1 首先配...