3.2.4 进程控制块与进程映像
1.进程控制块
通常,进程的描述由3部分组成:进程控制块、程序段以及数据结构集。其中,程序段和数据结构集是进程的必需组成部分,刻画进程的静态特征;进程控制块用于刻画进程的动态特征。
进程控制块(Process Control Block,PCB)是系统为了管理和控制进程的运行而定义了一个数据结构,用于描述和记录进程状态、进程调度信息、进程占用资源状况等进程属性信息。当创建一个进程时,系统为该进程建立一个PCB;当进程执行的时候,系统通过其PCB了解进程的现行状态信息,以便对其进行控制和管理;当进程结束时,系统收回其PCB,该进程随之消亡,由此可见,系统根据PCB感知进程的存在,PCB是进程存在的唯一标志。它包含的主要内容有:
(1)标志信息
用于唯一地标志一个进程。包括用户使用的进程外部标志符和系统使用的进程内部标志号。
(2)现场信息
用于保存进程在运行时存放在处理器现场中的各种信息。当进程因某种原因不能继续占用CPU时(如等待外设),它让出CPU,这时需要将CPU的各种状态信息保护起来,为将来再次得到CPU恢复CPU的各种状态,继续运行。现场信息包括通用寄存器内容、控制寄存器内容、栈指针等。
(3)控制信息
用于管理和调度进程,包括:进程状态和优先级、等待的时间以及原因、队列指针等进程调度的相关信息;进程组成信息;消息队列指针、使用的信号量和锁等进程间通信信息;CPU的占用和使用信息;进程映像在外存中的地址、进程段表或页表指针;进程特权信息以及进程所需的资源清单等。
在逻辑上,系统可以将所有进程的PCB组织在一起,并将它们放在内存的固定区域,构成PCB表。PCB表的大小决定系统中最多可以同时存在的进程个数,即系统的并发度。
目前常用的PCB存储组织方式有链接和索引方式。
2.进程映像与进程上下文
进程是在进程映像中运行的。进程映像是进程执行的上下文环境,是系统为管理进程运行而设立的一种实时环境表现形式。主要包括进程控制块、进程执行的程序(code)、进程执行时所用的数据、进程执行时使用的工作区等要素。
进程上下文是进程物理实体和进程运行支持环境的总称,它主要由以下3部分组成:
1)用户级上下文:主要由进程虚地址空间中的正文(程序)、数据、用户栈(进程在用户态下运行时的工作区)和共享存储区组成。
2)寄存器级上下文:主要由CPU中的一些寄存器内容构成,如程序计数器(存放CPU要执行的下条指令的虚地址)、程序状态字寄存器、栈指针(指向栈的下一个可用单元或栈中最后使用的单元)、通用寄存器(用于存放进程在运行过程中所产生的数据)、控制寄存器等。
3)系统级上下文:包括PCB、内存管理信息和进程核心栈。
PCB处于核心段,用户进程不能直接访问、修改自己的PCB。核心栈是指进程在核心态下运行时的工作区,也位于内存中的核心段,每个进程都将绑定一个核心栈,用于保存中断或异常现场、各种参数以及系统调用或过程调用的地址等。
3.UNIX进程
(1)UNIX进程空间组成结构
UNIX的进程由3个逻辑段组成:存放控制块的内存段、存放CPU执行指令集合的正文段和被执行指令所访问的数据段。
(2)UNIX进程上下文的组成部分
UNIX进程上下文主要由以下部分组成:进程控制块(proc结构以及user结构)、用户栈和核心栈的内容、用户地址空间的正文段、数据段、硬件寄存器的内容,以及区表和页表等。
(3)UNIX进程上下文的PCB组成部分以及各部分的功能
UNIX进程的PCB由proc结构和user结构组成。其中,proc结构中存放的是系统感知进程存在所必需的数据和信息,而user结构中存放的是进程执行时所必需的各种控制数据和信息。因此,系统在内存中开辟有专用的proc结构区域,使proc结构常驻内存且系统可存取访问proc结构。而user结构则不常驻内存,且只有当一个进程被创建成功时,系统才为其分配user结构空间。通过这种分离,可以节省内存空间。
UNIX系统级上下文分为静态和动态两部分。静态部分由proc结构、user区和主存管理信息表组成。动态部分包括核心栈和若干层寄存器上下文,系统级上下文动态部分的数目是可变的。