Task_struct用于通过内核保存有关进程的必要信息.由于该结构,内核可以暂停进程,并在一段时间后继续执行.但我的问题是:这个task_struct存储在内存中的哪个位置(我读过有关内核堆栈的内容,是在虚拟地址空间的内核空间中的那个?)?内核在挂起进程后保留指向该结构和该结构的指针在哪里?
如果您提供一些参考资料,我将不胜感激.
PS.我忘了说这个问题是关于Linux内核的.
解决方法:
Linux内核通过kmem_cache工具分配task_struct.例如,在fork.c中有一段代码负责分配任务结构:
#define alloc_task_struct_node(node) \
kmem_cache_alloc_node(task_struct_cachep, GFP_KERNEL, node)
static struct kmem_cache *task_struct_cachep;
存储指向当前线程的指针的位置取决于体系结构.例如,这是x86(arch / x86 / include / asm / current.h)的工作原理:
static __always_inline struct task_struct *get_current(void)
{
return percpu_read_stable(current_task);
}
在PowerPC中(arch / powerpc / include / asm / current.h):
static inline struct task_struct *get_current(void)
{
struct task_struct *task;
__asm__ __volatile__("ld %0,%1(13)"
: "=r" (task)
: "i" (offsetof(struct paca_struct, __current)));
return task;
}
标签:linux,process,kernel,task
来源: https://codeday.me/bug/20190620/1249753.html