第二章-进程的描述与控制
2.1前趋图和程序执行
2.1.1程序的顺序执行及其特征
1、程序的顺序执行
一个程序由若干个程序段组成,而这些程序段的执行必须是顺序的,这种程序执行的方式就称为程序的顺序执行。
2、程序顺序执行时的特征
- 顺序性
处理机的操作严格按照程序所规定的顺序执行。 - 封闭性
程序一旦开始执行,其计算结果不受外界因素的影响。 - 可再现性
程序执行的结果与它的执行速度无关(即与时间无关),而只与初始条件有关。
2.1.2前趋图
前趋图是一个有向无环图,用于描述进程之间执行的前后关系。
2.1.3程序的并发执行及其特征
1、程序并发执行时的特征
- 间断性
- 失去封闭性
- 不可再现性
- 程序与计算不再一一对应
2、程序并发执行时失去程序的封闭性和可再现性的主要原因是什么?
并发运行的程序相互制约。
3、程序并发执行 - 若干个程序段同时在系统中运行,这些程序的执行在时间上是重迭的;
- 一个程序段的执行尚未结束,另一个程序段的执行已经开始;
- 即使这种重迭是很小的,也称这几个程序段是并发执行的。
4、采用并发程序设计的目的
- 充分发挥硬件的并行性,消除处理器和I/O 设备的互等现象,提高系统效率。
- 并发程序设计是多道程序设计的基础,多道程序的实质就是把并发程序设计引入到单处理器的系统中。
2.2进程的描述
2.2.1进程的定义
1、进程的定义
进程是一个可并发执行的程序在其数据集上的一次运行过程,是操作系统进行资源分配的单位,进程表示资源的占用和所要做的工作。
进程是对CPU 的抽象。
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
2、各种不同的进程定义:
行为的一个规则叫做程序,程序在处理机上执行时所发生的活动称为进程(Dijkstra)。
进程是这样的计算部分,它是可以和其它计算并行的一个计算。(Donovan)
进程(有时称为任务)是一个程序与其数据一道通过处理机的执行所发生的活动。(Alan.C. Shaw)
进程是执行中的程序。(Ken Thompson and Dennis Ritchie )
3、进程的特征
- 动态性——进程是程序在处理机上的一次执行过程。具有生命期。
- 并发性——多个进程实体同存于内存中,在一段时间内同时运行。以提高资源利用率。
- 独立性
进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位,而程序则不是。 - 异步性
进程按各自独立的、不可预知的速度向前推进。 - 结构性
进程控制块(PCB)+程序段+相关的数据段=进程实体。
4、进程与程序的区别
1、进程是动态的,程序是静态的
2、进程是暂时的,程序是永久的
3、进程与程序的组成不同:程序是指令的有序集合;进程包括程序、数据和进程控制块(即进程状态信息)
4、进程与程序的对应关系:无一一对应关系(一个进程可顺序执行多个程序;一个程序可由多个进程共用)
5、进程的基本状态——三态模型
- 运行态(running):进程占有处理器正在运行。
- 就绪态(ready):进程具备运行条件,等待系统分配处理器以便运行。
- 等待态(wait):又称为阻塞(blocked)态或睡眠(sleep)态,进程不具备运行条件,正在等待某个事件的完成。
引起进程状态转换的具体原因
- 运行态→等待态:等待使用资源或某事件发生;
- 等待态→就绪态:资源得到满足或事件发生;
- 运行态→就绪态:运行时间片到;出现有更高优先权进程。
- 就绪态→运行态:CPU空闲时选择一个就绪进程。
7、五态模型
五态模型在三态模型的基础上引进了新建态和终止态。
- 新建态—对应进程刚被创建的状态。为一个新进程创建必要的管理信息,它并没有被提交,而是在等待操作系统完成创建进程的必要操作。
- 终止态—进程的终止状态。首先,等待操作系统进行善后,然后,退出主存。进入终止态的进程不再执行,但依然临时保留在系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,系统将删除该进程。
进程状态转换的具体原因:
- NULL→新建态:创建一个子进程。
- 新建态→就绪态:系统完成了进程创建操作,且当前系统的性能和内存的容量均允许。
- 运行态→终止态:一个进程到达自然结束点,或出现了无法克服的错误,或被操作系统所终结,或被其他有终止权的进程所终结。
- 终止态→NULL:完成善后操作。
- 就绪态→终止态:某些操作系统允许父进程终结子进程。
- 等待态→终止态:某些操作系统允许父进程终结子进程。
8.七态模型
具有挂起功能的进程状态
(1)为什么要有“挂起”状态?
由于进程的不断创建,系统资源已不能满足进程运行的要求,就必须把某些进程挂起(suspend),对换到磁盘镜像区中,暂时不参与进程调度,起到平滑系统负载的目的。
(2)引起挂起状态的原因
- 终端用户的需要:
终端用户在自己程序运行中发现问题要求使正在执行的进程暂停执行而使进程处于挂起状态。 - 父进程的需要:
父进程为了考查和修改某个子进程,或者协调各子进程间的活动,需要将该子进程挂起。 - 操作系统的需要:
操作系统为了检查运行中的资源使用情况或进行记帐,而将某些进程挂起。 - 对换的需要:
为了提高内存的利用率,而将内存中某些进程挂起,以调进其它程序运行。 - 负荷调节的需要:
由于工作负荷较重,而将一些不重要的进程挂起,以保证系统能正常运行(实时操作系统)。
(3)进程增加的两个新状态
- 挂起就绪态(ready suspend)
表明进程具备运行条件但目前在辅助存储器中,当它被对换到主存才能被调度执行。 - 挂起等待态(blocked suspend)
表明进程正在等待某一个事件且在辅助存储器中。
(4)引起进程状态转换的具体原因
-
等待态→挂起等待态:
系统根据当前资源状况和性能要求,决定将一个等待态进程对换出去成为挂起等待态; -
就绪态→挂起就绪态:
系统根据当前资源状况和性能要求,决定把就绪态进程对换出去成为挂起就绪态。 -
挂起等待态→挂起就绪态:
引起进程等待的事件发生之后,相应的挂起等待态进程将转换为挂起就绪态。 -
挂起等待态→等待态:
当一个进程等待一个事件时,原则上不需要把它调入内存。但是,当其它进程退出后,主存已经有了足够的自由空间,而某个挂起等待态进程具有较高的优先级并且操作系统已经得知导致它阻塞的事件即将结束,便可能发生这一状态变化。 -
挂起就绪态→就绪态:
内存中没有就绪态进程,或挂起就绪态进程具有比就绪态进程更高的优先级,将把挂起就绪态进程转换成就绪态。 -
运行态→挂起就绪态:当一个高优先级等待进程的等待事件结束后,它将抢占CPU,而此时主存不够,从而可能导致正在运行的进程转化为挂起就绪态。运行态的进程也可以自己挂起自己。
-
新建态→挂起就绪态:根据系统当前资源状况和性能要求,可以将新建进程对换出去成为挂起就绪态。
(5)挂起进程特征
- 该进程不能立即被执行。
- 挂起进程可能会等待事件,但所等待事件是独立于挂起条件的,事件结束并不能导致进程具备执行条件。
- 进程进入挂起状态是由于操作系统、父进程或进程本身阻止它的运行。
- 结束进程挂起状态的命令只能通过操作系统或父进程发出。
9、进程控制块
(1)进程控制块中的信息
每个进程都必须有一个唯一的标识符
内部标识符:便于系统使用
外部标识符:便于用户使用
(2)处理机状态信息(现场信息)
处理机状态信息主要由处理机的各种寄存器中的内容组成。处理机运行时的信息存放在寄存器中,当被中断时这些信息要存放在PCB中。
(3)进程调度信息
进程优先级
进程调度所需的其他信息(执行时间等)
事件
进程状态
(4)进程控制信息
程序和数据的地址
进程同步和通信机制
资源清单(打开文件表等)
链接指针
10、CPU模式和进程类型
进程的两大类:
系统进程,运行在内核模式,执行操作系统代码;
用户进程,运行在用户模式,执行用户程序代码。
练习题
1、进程控制块中的现场信息是在中断处理程序处理中断前保存的。
2、程序并发执行时失去封闭性和可再现性的主要原因是:运行程序的相互制约
3、简述进程控制块的作用
答:
①进程控制块是进程存在的唯一标志。
②是操作系统对进城进行控制和管理的依据。
③记录进程的各种属性,描述进程的动态变化过程;
④与进程一一对应。
2.3进程控制
原语(primitive):由若干条指令构成的“原子操作(atomic operation)”过程,作为一个整体而不可分割--要么全都完成,要么全都不做。许多系统调用就是原语。
特征:“不可中断性”。
实现方法:屏蔽中断。
2.3.1进程创建
**1、**进程图(描述进程的家族关系的有向树)。
计算机系统的启动过程:
BIOS启动(POST加电自检,读取MBR)
系统引导(bootloder)
启动内核
初始化系统
2、引起创建进程的事件
用户登录;作业调度;提供服务;应用请求
3、进程的创建过程
操作系统发现有创建新进程的事件后,调用进程创建==原语(CreateProcess/Fork)==创建新进程。
创建过程:
- 申请空白PCB
- 为新进程分配资源
- 初始化PCB
- 将新进程插入就绪队列
4、fork() -------- 一次调用,两次返回
int fork();
错误返回:-1
正确返回:
=0:子进程返回
>0:父进程返回, 返回值为子进程的进程标识号
示例:一个高度简化的shell框架
5、父进程创建子进程与主程序调用子程序有何不同?
- 父进程创建子进程后,父进程与子进程同时执行
- 主程序调用子程序,主程序暂停在调用点,子程序开始执行,直到子程序执行完毕返回,主程序开始执行。
2.3.2进程终止
1、引起进程终止的事件
(1)正常结束
(2)异常结束
越界错误、保护错、非法指令、特权指令错、运行超时
(3)外界干预
操作员或操作系统干预;父进程请求;父进程终止
2、进程的终止过程
- 根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态。
- 若被终止进程正处于执行状态,应立即终止该进程的执行,置调度标志为真,用于指示该进程被终止后应重新进行进程调度。
- 若该进程有子孙进程,应将其所有子孙进程予以终止,以防他们成为不可控的进程。
- 将被终止进程所拥有的全部资源,或归还其父进程,或归还系统。
- 将被终止进程的PCB从所在队列或链表中移出,挂入空白PCB队列。
2.3.3进程的阻塞与唤醒(block与wakeup原语)
1、引起进程阻塞的事件
- 请求系统服务
- 启动某种操作
- 新数据尚未到达
- 无新工作可做
2、进程阻塞过程
- 调用阻塞原语阻塞自己,终止该进程的执行,将PCB中的状态改为阻塞,并加入到阻塞队列中;
- 然后转进程调度,将处理机分配给另一进程,并进行进程切换以及处理机状态的保护与重新设置。
3、进程唤醒过程
- 阻塞进程等待的事件发生,有关进程调用唤醒原语把等待该事件的进程唤醒。
- 把阻塞进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态改为就绪,将PCB插入到就绪队列中。
- 阻塞原语与唤醒原语作用相反,成对使用!
2.3.4进程挂起/激活
1、进程的挂起:
当出现引起进程挂起的事件时,系统利用挂起原语将指定进程挂起。
- 检查被挂起进程的状态;
- 若处于活动就绪,则改为静止就绪;
- 若处于活动阻塞,则改为静止阻塞;
- 将该进程PCB复制到内存指定区域;
- 若挂起的进程正在执行,则重新进行进程调度。
2、进程激活
当发生激活进程的事件时,系统利用激活原语将指定进程激活。
激活原语先将进程从外存调入内存,检查该进程的状态;
- 若处于静止就绪,则改为活动就绪;
- 若处于静止阻塞,则改为活动阻塞;
- 若采用抢占调度策略,则新进程进入就绪队列时,检查是否要重新进行进程调度。
练习题
1、用于进程控制的四种常见的原语:创建原语;撤销原语;阻塞原语;唤醒原语。
2、操作系统对进程的管理和控制主要是通过控制原语实现的。
3、原语的执行时屏蔽中断的。
2.4进程同步
2.4.1进程同步的基本概念
进程同步机制—用于保证多个并发进程在执行次序上的协调关系的相应机制
1、两种制约关系
- 直接: 相互制约关系源于进程合作,表现为:
进程—进程
(同步:合作完成任务的关系!)
在执行时间上必须按一定的顺序协调进行 - 间接: 相互制约关系源于资源共享,表现为:
进程—资源—进程
(互斥:竞争使用资源的关系!)
运行不具有时间次序的特征
2、进程间相互作用
- 直接相互作用:发生在相关进程之间
- 间接相互作用:发生在任何进程之间