use*_*361 4 c linux memory-management process linux-kernel
什么是void *stack在声明task_struct中sched.h中?
它是指向进程映像(堆栈、堆、.bss、数据、文本)堆栈的指针吗?如果是这样,指向过程映像其余部分的指针在哪里?
在 Linux 内核源代码中,您可以看到宏task_thread_info():
#define task_thread_info(task) ((struct thread_info *)(task)->stack)
Run Code Online (Sandbox Code Playgroud)
的void *stack指针task_struct指向thread_info。
从 2.6 版本开始,Linux 使用任务的内核堆栈页面框架的一部分来存储“线程信息”(thread_info)。所述thread_info在其又包括一个指针task_struct:
struct task_struct *task = info->task;
Run Code Online (Sandbox Code Playgroud)
Fe(对于栈向内存地址值递减的方向增长的平台):
指向过程映像其余部分的指针在哪里?
此类信息包含在内存描述符中 mm_struct。铁:
struct mm_struct {
//...
unsigned long start_code, end_code, start_data, end_data;
unsigned long start_brk, brk, start_stack;
//...
}
Run Code Online (Sandbox Code Playgroud)
必读:内核如何管理你的内存