在前一章,我们了解了进程的概念,进程的基本特征,以及最重要的是通过进程的特征分析,解决了为什么在操作系统中引入进程的问题。我们知道,进程是操作系统中最重要的概念之一,操作系统的四个特征,并发,虚拟,共享,异步也都是基于进程而存在的。
操作系统的并发性也就是指进程的并发性。为了清楚地表明进程之间并发执行以及顺序执行的情况,这里引入前趋图来表明,前趋图是一个有向不循环图,进程之间的前驱关系可以由箭头来表明,可表示为(p1,p2)属于->,也可以写成p1->p2,表示在p2运行之前p1必须完成。
在前一张我们有简单的介绍,PCB是指为了使参与并发执行的每个程序(含数据)都能独立的运行,在操作系统中必须为其专门分配的一个数据结构。它的全名叫做Process Control Block(进程控制块),它作为进程实体的一部分,记录了操作系统所需的记录了进程当前情况以及管理进程运行的全部信息,是操作系统中最重要的记录性数据结构。
进程控制块记录了四个方面的内容
1.进程标识符(英语:process identifier,又略称为进程ID(英语:process ID)、PID)是大多数操作系统的内核用于唯一标识进程的一个数值。这一数值可以作为许多函数调用的参数,以使调整进程优先级、kill (命令)进程之类的进程控制行为成为可能。通常有两种标识符,一种是内部标识符,是为了方便系统对进城的使用而设定的,赋予每一个进程一个唯一的数字标识符,它通常是一个进程的序号。另一种是外部标识符,为了方便用户(进程)对进程的访问,它是由创建者提供的,通常是数字和字母组成,为了描述进程的家族关系,还应该设置父进程和子进程。此外还可以设置用户标识,以指示拥有该进程的用户。
2.处理机的状态,处理机的状态信息也称为处理机的上下文,主要是有处理机的各种寄存器中的内容组成的,这些寄存器包括,1)通用寄存器,也称为用户可视化寄存器,他们是用户进程可以访问的,用于暂存信息。2)指令寄存器,其中存放了要访问的下一条指令的地址。3)程序状态寄存字,其中含有状态信息,如条件吗,执行方式,中断屏蔽标志等。4)用户栈指针,指每个用户进程都有一个或者若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址。栈指针指向该栈的栈顶。
处理机处理执行状态的时,正在处理的许多信息都是存放在寄存器中。当进程被切换的时候,处理机状态信息都必须保存在相应的PCB中,以便在该进程重新执行的时候能再从断点继续执行。
3.进程调度信息:
1)进程状态
2)进程优先级
3)进程调度所需要的其他信息
4)事件:是指进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因。
4.进程控制信息:是指用于进程控制所必须的信息:
1)程序和数据的地址:进程实体中的程序和数据的内存和外存地址,以便再调度到该进程执行的时候,能从PCB中找到程序和数据
2)进程同步和通信机制:这是进程和通信是必须的机制,如消息队列指针,信号量等
3)资源清单:在该清单中列出来了进程在运行期间所需的全部资源(除了CPU),另外还有一张已分配到该进程的资源清单
4)链接指针:他给出了本进程(PCB)所在队列中的下一个进程的PCB的首地址。
进程控制块的组织方式:
1)线性方式:将系统中所有的pcb都组织在一张线性表中,将该表的首地址存放在内存中的一个专用区域。
2)链接方式:将把具有相同状态的pcb分别通过PCB中的链接字链接程一个队列。每个队列按照进程的优先级排列。
3)索引方式:设置执行指针,就绪指针,还有阻塞指针,分别指向各自的索引表的首地址,索引表中的记录各类指针的地址。
在上面介绍PCB的时候提到了调度信息里面包含的进程状态,进程中状态是什么,在这里详细介绍一下。进程的状态一共有五种,就绪状态,执行状态,阻塞状态,创建状态,终止状态。
这五种状态之间互相转换,首先我们从创建一个进程到结束一个进程的角度来进行解释各个状态之间的进程如何转化的。
首先,进程申请一个空白的pcb,并向PCB中填写用于控制和管理进程的信息,然后为进程分配运行所需的资源,最后该进程转入就绪状态并插入就绪队列中。但是如果进程所需的资源不足,创建的工作没有完成,于是就把此时进程所处的状态称为创建状态。如果这个状态的进程获得了足够的资源,就会转为就绪状态。当处于就绪状态的进程一旦获得了cup的使用权就会转为执行状态,运行完相应的时间片以后,就会转变为就绪状态。处在执行状态的进程,一旦受阻,就会转为阻塞状态。当处在阻塞状态的进程受阻结束,转为就绪状态。当一个进程执行结束,或者或是出现无法克服的错误,或者是被操作系统终结,就会转为终止状态。进入终止状态的进程不能继续执行,等待操作系统进行善后处理,最后将PCB清零,返还给操作系统,但是在操作系统中依然保留一个记录,其中保存状态码和一些计时统计数据,供其他进程收集。
但是有时候我们会遇见这样的情况,终端用户在自己的程序运行期间发现有可疑的问题,希望暂停自己的程序的运行,使之停止下来,以便用户研究其执行状态或者对程序进行修改。父进程希望挂起自己的某个子进程,以便考察和修改该子进程,或者协调各子进程间的活动。当实时系统的工作负荷较重,已可能影响到实时任务的控制时,可由将系统把一些不重要的进程挂起,以保证系统的正常运行。有时操作希望挂起某些进程,以便检查运行中的资源使用情况或者进行记账。
于是进入了挂起操作。挂起语句Suspend 激起语句 Active
挂起后状态的转变:
1)活动就绪->静止就绪
2)活动阻塞->静止阻塞
激活后状态改变:
4)静止就绪->活动就绪
5)静止阻塞->活动阻塞
当然,操作系统中利用的数据结构除了PCB还有很多,总结了一下OS管理的这些数据结构一般分为以下四类:内存表,设备表,文件表和用进程管理的进程表。