Linux 内核 task_struct void *stack

use*_*361 4 c linux memory-management process linux-kernel

什么是void *stack在声明task_structsched.h中

它是指向进程映像(堆栈、堆、.bss、数据、文本)堆栈的指针吗?如果是这样,指向过程映像其余部分的指针在哪里?

red*_*0ct 5

在 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(对于栈向内存地址值递减的方向增长的平台):

在此处输入图片说明

有用的链接:1 , 2


指向过程映像其余部分的指针在哪里?

此类信息包含在内存描述符中 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)

必读:内核如何管理你的内存