进程控制块PCB

什么是进程控制块PCB

进程控制块 PCB(Process Control Block)是用来描述和控制进程的运行的一个数据结构,是进程实体的一部分,是操作系统中最重要的记录型数据结构。PCB 是进程存在的唯一标志。

系统能且只能通过 PCB 对进程进行控制和调度,PCB 记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息。

PCB中的信息

01_进程控制块PCB.png

进程标识符

进程标识符用于唯一地标识一个进程。一个进程通常有两种标识符:

  • 内部标识符:在所有的操作系统中,都为每一个进程赋予了一个惟一的数字标识符,它通常是一个进程的序号。设置内部标识符主要是为了方便系统使用。

  • 外部标识符:它由创建者提供,通常是由字母、数字组成,往往是由用户(进程)在访问该进程时使用。为了描述进程的家族关系,还应设置父进程标识及子进程标识。此外,还可设置用户标识,以指示拥有该进程的用户。

处理机状态

处理机状态信息主要是由处理机的各种寄存器中的内容组成的。包括:

  • 通用寄存器

  • 指令计数器

  • 程序状态字 PSW

  • 用户栈指针

这些信息显然和进程相关,因此,进程一旦被中断,就必须把这些信息保存在 PCB 中,以便在恢复运行时能完全恢复中断前的状态。

进程调度信息

在 PCB 中还存放一些与进程调度和进程对换有关的信息,包括:

  1. 进程状态。

  2. 进程优先级。

  3. 进程调度所需的其它信息,它们与所采用的进程调度算法有关,比如,进程已等待 CPU 的时间总和、进程已执行的时间总和等。

  4. 事件,指进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因。

进程控制信息

进程控制信息包括:

  1. 程序和数据的地址。

  2. 进程同步和通信机制,指实现进程同步和进程通信时必需的机制,如消息队列指针、信号量等,它们可能全部或部分地放在 PCB 中。

  3. 资源清单,即一张列出了除 CPU 以外的、进程所需的全部资源及已经分配到该进程的资源的清单。

  4. 链接指针,它给出了本进程(PCB)所在队列中的下一个进程的 PCB 的首地址。

PCB的作用

  1. PCB 的作用是使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。

  2. PCB 能实现间断性运行方式。在多道程序环境下,程序是采用停停走走间断性的运行方式运行的。当进程因阻塞而暂停运行时,它必须保留自己运行时的CPU现场信息。在有了 PCB 后,系统就可以将 CPU 现场信息保存在被中断进程的 PCB 中,供该进程再次被调度执行时恢复 CPU 现场时使用。由此,可再次明确,在多道程序环境下,作为传统意义上的静态程序,因其并不具有保护或保存自己运行现场的手段,无法保证其运行结果的可再现性,从而失去运行的意义。

  3. PCB 提供进程管理所需要的信息。当调度程序调度到某进程运行时,只能根据该进程 PCB 中记录的程序和数据在内存或外存中的始址指针,找到相应的程序和数据;在进程运行过程中,当需要访问文件系统中的文件或 I/O 设备时,也都需要借助于 PCB 中的信息。另外,还可根据 PCB 中的资源清单了解到该进程所需的全部资源等。可见,在进程的整个生命周期中,操作系统总是根据 PCB 实施对进程的控制和管理。

  4. PCB 提供进程调度所需要的信息。只有处于就绪状态的进程才能被调度执行,而在 PCB 中就提供了进程出于何种状态的信息。如果进程处于就绪状态,系统便将它插入到进程就绪队列中,等待着调度程序的调度;另外在进行调度时往往还需要了解进程的其他信息,如在优先级调度算法中,就需要知道进程的优先级。在有些较为公平的调度算法中,还需要知道进程的等待时间和已执行过的事件等。

  5. PCB 实现与其他进程的同步与通信。进程同步机制是用于实现诸进程的协调运行的,在采用信号量机制时,它要求在每个进程中都设置有相应的用于同步的信号量。在 PCB 中还具有用于实现进程通信的区域或通信队列指针等。

PCB的组织方式

PCB 的组织方式是指如何组织和管理多个 PCB,主要有两种方式,即链接方式和索引方式。

链接方式

把具有同一状态的 PCB,用其中的链接字链接成一个队列。这样,可以形成就绪队列、若干个阻塞队列和空白队列等。就绪队列常按进程优先级的高低排列,把优先级高的进程的 PCB 排在队列前面。

根据阻塞原因的不同把处于阻塞状态的进程的 PCB 排成等待 I/O 操作完成的队列和等待分配内存的队列等。

索引方式

系统根据所有进程的状态建立几张索引表。例如,就绪索引表、阻塞索引表等,并把各索引表在内存的首地址记录在内存的一些专用单元中。在每个索引表的表目中,记录具有相应状态的某个 PCB 在 PCB 表中的地址。