class="markdown_views prism-atom-one-light">
想要有顺序地学习Linux,入口在这里哦:
Linux:目录索引
PCB:进程控制块
0.PCB是干什么的?
学了操作系统后,我们都知道操作系统要想管理一个对象,它不是直接进行管理的,而是通过得到被管理者的一些有效信息加以管理的,因此在这里我们也可以这样理解,操作系统管理进程,实则是将进程的有效信息提取出来然后通过管理这些信息来管理进程,而所有的进程信息被存放在一个叫做进程控制块的数据结构中(可以理解为进程属性的集合),这也就是即将要介绍的进程控制块(PCB).
1.PCB简介
PCB(process control block),进程控制块,它用于管理系统的进程
一般情况下,PCB中包含4个部分
1.进程标识信息
2.处理机状态
3.进程调度信息
4.进程控制信息
详细如下图:
2.PCB4个部分包含的内容的解释:
(1). 进程标识信息
进程标识信息用于唯一地标识一个进程,一个进程通常有两种标识符:内部标志符&外部标识符。
内部标志符: 由操作系统赋予每个进程的一个唯一的数字标识符,它通常为一个进程的序号,方便了系统使用。
外部标识符: 由创建者产生,是由字母和数字组成的字符串,为用户进程访问该进程提供方便。
为了描述进程间的家族关系,通常还设有父进程标识和子进程标识,以表示进程间的家族关系。
此外,还设有用户名或用户标识号表示该进程属于哪个用户。
(2). 处理机状态
处理机状态信息主要由处理机的各个寄存器内的信息组成。 进程运行时的许多信息均存放在处理机的各种寄存器中。其中程序状态字(PSW)是相当重要的,处理机根据程序状态寄存器中的PSW来控制程序的运行。
(3). 进程调度信息
PCB中还存放着一些与进程调度有关的信息。
进程状态:标识进程的当前状态(就绪、运行、阻塞),作为进程调度的依据。
进程优先级:表示进程获得处理机的优先程度。
为进程调度算法提供依据的其他信息:例如,进程等待时间、进程已经获得处理器的总时间和进程占用内存的时间等。
事件:是指进程由某一状态转变为另一状态所等待发生的事件。(比如等待I/O释放)
(4). 进程控制信息
程序和数据地址:是指组成进程的程序和数据所在内存或外存中的首地址,以便在调度该进程时能从其PCB中找到相应的程序和数据。
进程同步和通信机制:指实现进程同步和通信时所采取的机制,如消息队列指针和信号量等,他们可以全部或部分存在PCB中。
资源清单:列出了进程所需的全部资源 及 已经分配给该进程的资源,但不包括CPU.
链接指针:它给出了处于同一队列中的下一个PCB的首地址。
3.Linux中的PCB:task_struct
(1)PCB中存储的信息
标识符:与进程相关的唯一标识符,用来区别正在执行的进程和其他进程。
状态:描述进程的状态,因为进程有挂起,阻塞,运行等好几个状态,所以都有个标识符来记录进程的执行状态。
优先级:如果有好几个进程正在执行,就涉及到进程被执行的先后顺序的问题,这和进程优先级这个标识符有关。
程序计数器:程序中即将被执行的下一条指令的地址。
内存指针:程序代码和进程相关数据的指针。
上下文数据:进程执行时处理器的寄存器中的数据。
I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表等。
记账信息:包括处理器的时间总和,记账号等等。
(2)task_struct的结构