【Linux Kernel-task_struct专题】task_struct内存分配

在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值