在Linux 内核中task_struct
的内存是一个kmem_cache
结构体对象,kmem_cache
是内核对象缓存(Slab 分配器)的一个结构体,用于管理内核对象的内存分配和释放。kmem_cache
结构体通常用于创建一个缓存,以便快速分配和释放特定类型的内核对象。
kmem_cache
源码定义kernel/fork.c Linux kernel -v6.11
static struct kmem_cache *task_struct_cachep;
static inline struct task_struct *alloc_task_struct_node(int node)
{
return kmem_cache_alloc_node(task_struct_cachep, GFP_KERNEL, node);
}
上面👆,static struct kmem_cache *task_struct_cachep;
这行代码定义了一个静态的指针变量 task_struct_cachep
,它指向一个 kmem_cache
结构体。这个指针通常用于指向一个特定类型的内核对象的缓存,例如进程描述符 task_struct
的缓存。
这里的 static
关键字表示这个变量具有静态存储期,它只能在定义它的文件内部访问,且在程序的整个运行期间都存在。
那么,kmem-cache
到底是什么呢?我们先看下它的定义,具体的详细剖析,在下一个专题中会讲到。
/*
* Slab cache management.
*/
struct kmem_cache {
#ifndef CONFIG_SLUB_TINY
struct kmem_cache_cpu __percpu *cpu_slab;
#endif
/* Used for retrieving partial slabs, etc. */
slab_flags_t flags;
unsigned long min_partial;
unsigned int size; /* Object size including metadata */
unsigned int object_size; /* Object size without metadata */
struct reciprocal_value reciprocal_size;
unsigned int offset; /* Free pointer offset */
#ifdef CONFIG_SLUB_CPU_PARTIAL
/* Number of per cpu partial objects to ke