linux中把内核栈和进程描述符结构体放在一个固定大小的区域内(比如4K或8K字节),这样处理有如下好处:
1、内核可以快速通过栈指针获得当前在CPU上正在运行进程的描述符地址;
2、在多处理器上,可以仅通过检查栈就可以获得当前正确的进程,不用强制引入全局静态数组current;
对于不同的版本,类似的定义可能有一点区别:
< linux-2.4.0 >
1、内核可以快速通过栈指针获得当前在CPU上正在运行进程的描述符地址;
2、在多处理器上,可以仅通过检查栈就可以获得当前正确的进程,不用强制引入全局静态数组current;
对于不同的版本,类似的定义可能有一点区别:
< linux-2.4.0 >
union task_union {
struct task_struct task;
unsigned long stack[INIT_TASK_SIZE/sizeof(long)];
};
<linux-2.6.22.6>
union thread_union {
struct thread_info thread_info;
unsigned long stack[THREAD_SIZE/sizeof(long)];
};