Linux内核分析第六周总结
进程控制块PCB——task_struct
操作系统的内核里的三大功能:
- 进程管理
- 内存管理
- 文件系统
进程描述符——task_struct
进程管理是最核心的内容
然而Linux进程的状态与操作系统原理中的描述的进程状态似乎有所不同,就绪状态和运行状态都是TASK_RUNNING,这两个TASK_RUNNING都是可运行的,但他们的区别在于是否获得CPU的控制权
进程描述符——task_struct的数据结构
所有进程都被这个双向循环链表strcut list_head tasks连起来
双向链表的操作:
进程间的父子关系:
进程的创建概览及fork一个进程的用户态代码
进程创建的回顾:
道生一(start_kernel...cpu_idle),一生二(kernel_init和kthreadd),二生三(即前面是0、1和2三个进程),三生万物(1号进程是所有用户态进程的祖先,2号进程是所有内核态线程的祖先)
fork系统调用在父进程与子进程各返回一次
系统调用回顾:
fork()函数系统调用的情况:
子进程copy了父进程的所有信息进行修改
实验
与上周一样的实验步骤:
进行gdb的过程:
总结:
Linux通过复制父进程来创建一个新进程,通过调用do_fork来实现,Linux为每个新创建的进程动态地分配一个task_struct结构,fork()函数被调用一次,但返回两次。