在大多情况下,我们常说的进程,事实上值得是“进程实体”。那何为进程实体呢?进程实体是由程序段、相关的数据段和PCB三部分构成的。在早期的UNIX版本中,把这三部分总称为“进程映像”。而我们所谓创建进程,实质上是创建进程实体中的PCB。
今天我们主要介绍的是进程实体中的主角——PCB,程序段和相关的数据段是进程中的代码段及其相应的配置信息,在操作系统的调度中涉及的较少,而PCB却是密切相关的。下面我们来看下什么是PCB。
进程控制块PCB(Process Control Block)
PCB是系统为每个进程定义的数据结构,记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的
全部信息。进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单
位,一个能与其它进程并发执行的进程或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。其内部包括以
下四个方面
进程标识符
进程标识符用于惟一地标识一个进程。一个进程通常有两种标识符:
(1)内部标识符
在所有的操作系统中,都为每一个进程赋予了一个惟一的数字标识符,它通常是一个进程的序号。设置内部标识符主要是为了方便系统使用。
(2)外部标识符
它由创建者提供,通常是由字母、数字组成,往往是由用户(进程)在访问该进程时使用。为了描述进程的家族关系,还应设置父进程标识及子进程标识。此外,还可设置用户标识,以指示拥有该进程的用户。
处理机状态
处理机状态信息主要是由处理机的各种寄存器中的内容组成的。处理机在运行时,许多信息都放在寄存器中。当处理机被中断时,所有这些信息都必须保存在PCB中,以便在该进程重新执行时,能从断点继续执行。这些寄存器包括:① 通用寄存器,又称为用户可视寄存器,它们是用户程序可以访问的,用于暂存信息,在大多数处理机中,有 8~32个通用寄存器,在RISC结构的计算机中可超过100个;② 指令计数器,其中存放了要访问的下一条指令的地址;③
程序状态字PSW,其中含有状态信息,如条件码、执行方式、中断屏蔽标志等;④ 用户栈指针,指每个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址,栈指针指向该栈的栈顶。
进程调度信息
在PCB中还存放一些与进程调度和进程对换有关的信息,包括:① 进程状态,指明进程的当前状态,作为进程调度和对换时的依据;② 进程优先级,用于描述进程使用处理机的优先级别的一个整数,优先级高的进程应优先获得处理机;③ 进程调度所需的其它信息,它们与所采用的进程调度算法有关,比如,进程已等待CPU的时间总和、进程已执行的时间总和等;④
事件,指进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因。
进程控制信息
进程控制信息包括:① 程序和数据的地址,指进程的程序和数据所在的内存或外存地(首)址,以便再调度到该进程执行时,能从PCB中找到其程序和数据;② 进程同步和通信机制,指实现进程同步和进程通信时必需的机制,如消息队列指针、信号量等,它们可能全部或部分地放在PCB中;③ 资源清单,即一张列出了除CPU以外的、进程所需的全部资源及已经分配到该进程的资源的清单;④
链接指针,它给出了本进程(PCB)所在队列中的下一个进程的PCB的首地址。
ps:在操作系统中,具有统一状态的PCB一般以链接方式或者引索方式存在。