linux – task_struct存储在哪里?
发布时间:2020-12-13 23:06:05 所属栏目:Linux 来源:网络整理
导读:Task_struct用于通过内核保存有关进程的必要信息.由于该结构,内核可以暂停进程,并在一段时间后继续执行.但我的问题是:这个task_struct存储在内存中的哪个位置(我读过有关内核堆栈的内容,是在虚拟地址空间的内核空间中的那个?)?内核在挂起进程后保留指向该
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; } 您可以使用Elixir Cross Reference轻松浏览内核源代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 使用awk正则表达式捕获插入符号(^)
- 【转贴】Debian 10 "buster" 正式发布
- 如何设置R的环境变量以在RedHat Linux(RHEL6)上的Tomcat中使
- kali linux 常用文件与指令路径
- R包:RCurl和curl包在Linux上安装失败
- linux. -bash: fork: retry: Resource temporarily unavail
- linux – 如何设置简单的自托管动态DNS服务器
- linux – 与blkid和tune2fs不同的uuid
- linux – 如何遍历Bash中的所有ASCII字符?
- linux – 仅安装VirtualBox Headless