1.父子进程可以共享含有程序代码的页,但是他们各自有独立的数据拷贝(堆和栈)。
2.进程描述符
3.进程的TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE区别
TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE差不多,但是TASK_UNINTERRUPTIBLE状态的进程不会(在某些特定场景下,等待特定事件的进程不能被中断)被中断。
4、 thread_info结构和进程内核栈存放在连续两个页框中
分别获取当前进程thread_info和task_struct首地址的两个宏定义如下:
(1)current_thread_info()
movl $0xffffe000,%ecx /* or 0xfffff000 for 4KB stacks */
andl %esp,%ecx
movl %ecx,p
(2)current
movl $0xffffe000,%ecx /* or 0xfffff000 for 4KB stacks */
andl %esp,%ecx
movl (%ecx),p
用栈存放进程描述符的另外一个优点体现在SMP系统上:对于每个处理器,仅通过检查栈就可以获得当前正确的进程。早先的Linux版本没有把内核栈与进程描述符存放在一起,而是强制引入全局静态变量current来标识正在运行进程的描述符。在SMP系统上,就需要把current定义为一个数组,每个元素对应一个可用CPU,这无疑增加了复杂度,降低了软件效率。
4、 进程链表