《深入理解Linux内核》copy_process之dup_task_create函数

2019-07-14 12:37发布

该函数作用是“为子进程获取进程描述符” 从下面的文章可以明白是如何获取进程描述符的 -----“fork() 函数创建一个进程首先就是开辟2个数据块,每个4K,共8K,用来存放进程的内核栈和PCB。”  PCB 和 thread_info是互相关联的。   linux kernel current宏 摘自 http://blog.163.com/zhe_wang_2009/blog/static/17228212120123151046236/    wanny   1,先看个示意图吧. linux kernel current宏 - wanny - wanny

2,每个进程在内核态下都会开辟一个内核栈,一般就是8KB,一般把thread_info这个结构体和
内核栈放在一起,这样内核就可以很方便从ESP寄存器中获取当前CPU上正在运行的thread_info
结构体的首地址,通过thread_info就可以找到PCB了。这个PCB就是当前进程的PCB。
将esp中的值屏蔽掉末尾的13位即是thread_info的首地址。

3,每个进程都有个thread_info这个结构,这个结构和task_struct是一一对应的。 fork() 函数创建一个进程首先就是开辟2个数据块,每个4K,共8K,用来存放进程的内核栈和PCB。