点我查看秘籍连载数据结构
内核负责管理维护全部进程,为了管理进程,内核在内核空间维护了一个称为进程表(Process Table)的数据结构,这个数据结构中记录了全部进程,每一个进程在数据结构中都称为一个进程表项(Process Table Entry),如图。指针
从图中可知,进程表中除了记录了全部进程的PID,还使用一个字段记录了全部进程的指针,指向每一个进程的进程控制块(Process Control Block,PCB),请记住PCB这个词,它过重要了。code
既然PCB表明的是进程,在这个数据结构(task_struct)中天然保留了和进程相关的不少信息,至少在进行上下文切换时,可以保存下在CPU中关于当前运行进程的一些重要寄存器信息(因此,PCB表明的是未执行的进程,CPU中某些寄存器中的数据表明当前正在运行的进程)。如下是PCB中包含的内容,有兴趣的话能够了解下各项是什么东西:blog
1.Process management: Registers Program counter Program status word Stack pointer Process state Priority Scheduling parameters Process ID Parent process Process group Signals Time when process started CPU time used Children’s CPU time Time of next alarm 2.Memory management: Pointer to text segment info Pointer to data segment info Pointer to stack segment info 3.File management: Root directory Working directory File descriptors User ID Group ID
PCB包含了进程很是重要的信息,是上下文切换的关键,它保存在每一个进程的内核栈中(是否还记得前面提到过的每一个进程都有两个栈空间:用户栈和内核栈)。进程