第二章进程的描述与控制.docx
- 文档编号:9576599
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:38
- 大小:497.40KB
第二章进程的描述与控制.docx
《第二章进程的描述与控制.docx》由会员分享,可在线阅读,更多相关《第二章进程的描述与控制.docx(38页珍藏版)》请在冰豆网上搜索。
第二章进程的描述与控制
第二章进程的描述与控制
第1节进程的基本概念
一、程序的顺序执行
程序是一个在时间上有严格次序的指令序列,仅当前一操作(指令)执行完后,才能执行后继操作,如下图b。
如果在单道环境下对用户作业的处理,总须先输入用户的程序和数据,然后进行计算,最后才能打印计算结果,见下图a。
程序顺序执行的前驱图
所以,在单道系统中,程序执行具有以下特征:
(1)顺序性;
(2)封闭性;(3)可再现性----P33-34
其中最大特征就是程序的顺序执行。
二、前趋图(描述程序执行顺序的工具)
前趋图(PrecedenceGraph)是一个有向无循环图,记为DAG(DirectedAcyclicGraph),用于描述进程之间执行的前后关系。
图中的每个结点可用于描述一个进程、一段程序、乃至一条语句;结点间的有向边“→”则用于表示两个结点之间存在的偏序关系(PartialOrder)或前趋关系(PrecedenceRelation)。
如果Pi→Pj,称Pi是Pj的直接前趋,而称Pj是Pi的直接后继。
在前趋图中,把没有前趋的结点称为初始结点(InitialNode),把没有后继的结点称为终止结点(FinalNode)。
每个结点还具有一个重量(Weight),用于表示该结点所含有的程序量或结点的执行时间。
前趋图
对于上图(a)所示的前趋图,存在下述前趋关系:
P1→P2,P1→P3,P1→P4,P2→P5,P3→P5,P4→P6,P4→P7,
P5→P8,P6→P8,P7→P9,P8→P9
对于具有下述四条语句的程序段,可以用右边的前驱图描述语句间的前驱关系:
前趋图:
S1:
a∶=x+2
S2:
b∶=y+4
S3:
c∶=a+b
S4:
d∶=c+b
三、程序的并发执行
1、什么是并发执行、并行执行----回顾概念
在下图中,每一个作业由输入程序、计算程序和打印程序组成,以至对一个作业的输入、计算和打印三个操作,必须顺序执行,三操作之间存在着Ii→Ci→Pi这样的前趋关系。
对于同类的四个作业,每个作业的内部操作之间、作业和作业的操作之间存在下图描述的前驱关系:
程序并发执行时的前趋图
讨论:
哪些操作的执行必须是顺序的;哪些操作的执行是可以并行的?
在该例中存在下述前趋关系:
Ii→Ci,Ci→Pi,Ii→Ii+1,Ci→Ci+1,Pi→Pi+1;
而Ii+1和Ci及Pi-1是重迭的,亦即在Pi-1和Ci以及Ii+1之间,可以并行执行。
多程序并发执行表现为,这些程序的执行在时间上是重叠的,一个程序的执行尚未结束,另一个程序的执行已经开始,即使这种重叠是很小的一部分。
前驱图上重叠的部分,是不同程序在不同资源上并行工作形成的。
程序的并发执行可进一步分为:
①不同程序间的并发执行;
②同一程序中不同程序段(线程)的并发执行,例如,在一个程序中有5个程序段:
上图。
2、程序并发执行带来的影响:
(与程序的顺序执行相比较)
(1)程序运行的间断性、异步性;
(2)程序的执行失去了封闭性和以此为基础的可再现性;
例如,有两个循环程序A和B,它们共享一个变量n,初值为10。
并发程序相互影响示意图
①n∶=n+1在Print(n)和n∶=0之前,此时得到的n值分别为11,11,0
②n∶=n+1在Print(n)和n∶=0之后,此时得到的n值分别为10,0,1
③n∶=n+1在Print(n)和n∶=0之间,此时得到的n值分别为10,11,0。
(3)程序之间由于资源共享与竞争,形成了相互制约。
为了合理管理系统资源、协调各程序间在执行时对资源的竞争,需要一个记录和描述程序执行过程的基本单位,于是引进了“进程”这一概念。
四、进程的定义
1、较典型的进程定义有:
(1)进程是一个程序在给定活动空间和初始环境下,在一个处理机上的一次执行过程。
(2)进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
2、进程实体:
程序段、相关数据、PCB(进程控制块,是管理进程的数据结构)
程序与数据:
描述进程本身所应完成的功能;
PCB:
记录进程的动态特征,记录进程与其他进程、与系统资源间的关系。
进程
控制块
(PCB)
程序
与
数据
3、进程的特征:
(1)结构特征
(2)动态性(3)并发性(4)独立性(5)异步性----P36
在引入了进程实体的概念后,我们可以把传统OS中的进程定义为:
“进程是进程实体的一次运行过程,是系统进行资源分配和调度的一个独立单位”。
五、进程的三种基本状态
执行状态:
进程已获得当前运行所必需的资源,并已获得处理机,它的程序正在处理机上执行。
----P36
就绪状态:
进程已获得除CPU之外的,继续往下运行所必需的资源,一旦得到CPU控制权,立即可以投入运行。
(就绪队列)----P36
阻塞状态(等待状态):
进程由于等待某一事件的发生而暂停执行,这时,即使给它CPU控制权,它也无法执行。
(等待队列)----P36
进程的三种基本状态间的转换:
进程的三种基本状态及其转换图
再增加两种常见状态:
创建状态:
创建进程是一个复杂的过程,要持续一段时间。
----P37
终止状态:
撤销进程也是一个复杂的过程,要持续一段时间。
----P37
进程的五种基本状态及转换图
六、挂起状态
在一般OS中,进程的基本状态只有前面三种。
而在另一些OS中,由于控制的需要,引入“挂起”状态。
“挂起”状态分为静止就绪和静止阻塞两种。
“挂起”就意味着暂停对该进程分配CPU资源。
挂起状态同样有对应的队列。
引入挂起后,进程的5种状态转换:
具有挂起状态的进程状态转换图
具有创建、终止和挂起状态的进程状态图
引起“挂起”的原因:
----P38
(1)负荷调节的需要。
(2)终端用户的请求。
(3)父进程请求。
(4)操作系统的需要。
七、进程控制块(PCB)
1、进程控制块:
是进程管理的数据结构。
包含了一个进程的描述信息、控制信息、资源信息的。
它随进程的创建而产生、在进程执行的过程中动态地记录进程各信息的变化。
当一个进程完成其功能后,系统则回收PCB,进程也随之消失。
PCB是进程存在的唯一标志;是操作系统的一种资源。
2、进程控制块中的信息
(1)进程标识符
进程标识符用于唯一标识一个进程。
一个进程通常有两种标识符:
①内部标识符。
在所有的操作系统中,都为每一个进程赋予一个唯一的数字标识符,它通常是一个进程的序号。
设置内部标识符主要是为了方便系统使用。
②外部标识符。
它由创建者提供,通常是由字母、数字组成,往往是由用户(进程)在访问该进程时使用。
为了描述进程的家族关系,还应设置父进程标识及子进程标识。
此外,还可设置用户标识,以指示拥有该进程的用户。
(2)处理机状态(处理机上下文)
处理机状态信息主要包括进程运行过程中处理机的各种寄存器中的内容:
①通用寄存器,又称为用户可视寄存器,它们是用户程序可以访问的,用于暂存信息,在大多数处理机中,有8~32个通用寄存器,在RISC结构的计算机中可超过100个;②指令计数器,其中存放了要访问的下一条指令的地址;③程序状态字PSW,其中含有状态信息,如条件码、执行方式、中断屏蔽标志等;④用户栈指针,指每个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址。
栈指针指向该栈的栈顶。
(3)进程调度信息
在PCB中还存放一些与进程调度和进程对换有关的信息,包括:
①进程状态,指明进程的当前状态,作为进程调度和对换时的依据;②进程优先级,用于描述进程使用处理机的优先级别的一个整数,优先级高的进程应优先获得处理机;③进程调度所需的其它信息,它们与所采用的进程调度算法有关,比如,进程已等待CPU的时间总和、进程已执行的时间总和等;④事件,是指进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因。
(4)进程控制信息
进程控制信息包括:
①程序和数据的地址,是指进程的程序和数据所在的内存或外存地(首)址,以便再调度到该进程执行时,能从PCB中找到其程序和数据;②进程同步和通信机制,指实现进程同步和进程通信时必需的机制,如消息队列指针、信号量等,它们可能全部或部分地放在PCB中;③资源清单,是一张列出了除CPU以外的、进程所需的全部资源及已经分配到该进程的资源的清单;④链接指针,它给出了本进程(PCB)所在队列中的下一个进程的PCB的首地址。
3、进程控制块的作用:
标识进程的存在;动态地记录进程运行过程中的各类信息,如进程状态、中断现场、进程的优先级等,提供给OS的进程管理和进程调度使用;实现进程的间断性运行方式;实现与其他进程的同步与通信。
----P40
4、进程的队列
在系统中存在的各种进程队列,就是由进程的PCB组成的。
PCB组成队列的方式:
链接方式、索引方式。
(1)链接方式
PCB链接队列示意图
(2)索引方式
按索引方式组织PCB示意图
5、进程与程序的区别
(1)程序是静态的,进程是动态的;
(2)进程更能真实地描述并发,而程序不能;
(3)一个程序可对应多个进程;
(4)进程有生命周期,有诞生有消亡,是短暂的;程序是相对长久的;
(5)程序可作为软件资源长期保存,而进程只是一次执行过程,是暂时的;
(6)进程是系统分配/调度的独立单位,能与其他进程并发执行;
(7)进程包含程序、数据、PCB三部分;
(8)进程具有创建其他进程的功能,而程序没有。
第2节进程控制
一、OS的内核
1、什么是OS的内核:
一个完整的OS是由内核和外壳两大部分组成,内核主要是指:
----P43
2、OS内核的两大功能:
----P43
二、进程控制的有关概念
1、处理机的执行状态:
----P43
2、原语:
是由若干机器指令构成的、完成特定功能的程序段。
原语只能在系统状(核心态)下被执行。
原语的执行是不能被打断的。
----P43
OS内核中包括的原语主要有:
进程控制原语、进程通信原语、资源管理原语和其他方面的原语。
其中,进程控制原语包括:
创建原语、撤消原语、阻塞原语、唤醒原语等等。
3、进程控制:
就是操作系统用一些具有特定功能的程序段来创建、终止进程,完成进程在各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。
操作系统的进程控制机构属于OS的内核,它是硬件的首次延伸,它通过执行各种原语来实现其控制功能。
学习关于进程控制的原语,我们应该关注:
(1)什么时候、由于什么事件导致原语的执行;
(2)由谁来启动原语;
(3)每个原语的内部处理流程是什么。
三、进程的创建
1、进程创建的两种方式:
(1)由系统创建:
在OS生成时建立的一些系统进程;一个应用系统被启动时最初的一些进程。
(2)由父进程创建:
当一个进程执行,去完成所规定的功能时,它能自己创建一些子进程,使其各自分担其中的部分功能;子进程也可以创建自己的子进程。
这样就形成了进程家族和进程树。
2、进程树:
描述进程家族关系的有向树
进程树示意图
UNIX系统中,在树型进程关系中,子进程可以继承其父进程所拥有的资源;在子进程撤消时,继承的资源归还给父进程。
Windows系统中,在树型进程关系中,子/父进程间没有资源继承关系。
3、引起创建进程的事件----P44
(1)作业调度。
(2)用户登录。
(3)提供服务。
(4)启动应用程序。
(5)应用请求。
4、进程创建原语的流程----P45
(1)申请空白PCB和进程ID;
(2)为新进程分配运行所需资源;
(3)初始化进程的PCB;
(4)将新进程(的PCB)插入就绪队列。
三、进程的终止
1、引起进程终止(TerminationofProcess)的事件
(1)正常结束
在任何计算机系统中,都应有一个用于表示进程已经运行完成的指示。
例如,在批处理系统中,通常在程序的最后安排一条Holt指令或终止的指令。
当程序运行到Holt指令时,将产生一个中断,去通知OS本进程已经完成。
在分时系统中,用户可利用Logsoff去表示进程运行完毕,此时同样可产生一个中断,去通知OS进程已运行完毕。
(2)异常结束
在进程运行期间,由于出现某些错误和故障而迫使进程终止。
这类异常事件很多,常见的有:
①越界错误。
这是指程序所访问的存储区,已越出该进程的区域;②保护错。
进程试图去访问一个不允许访问的资源或文件,或者以不适当的方式进行访问,例如,进程试图去写一个只读文件;③非法指令。
程序试图去执行一条不存在的指令。
出现该错误的原因,可能是程序错误地转移到数据区,把数据当成了指令;④特权指令错。
用户进程试图去执行一条只允许OS执行的指令;⑤运行超时。
进程的执行时间超过了指定的最大值;⑥等待超时。
进程等待某事件的时间,超过了规定的最大值;⑦算术运算错。
进程试图去执行一个被禁止的运算,例如,被0除;⑧I/O故障,这是指在I/O过程中发生了错误等。
(3)外界干预
外界干预并非指在本进程运行中出现了异常事件,而是指进程应外界的请求而终止运行。
这些干预有:
①操作员或操作系统干预。
由于某种原因,例如,发生了死锁,由操作员或操作系统终止该进程;②父进程请求。
由于父进程具有终止自己的任何子孙进程的权利,因而当父进程提出请求时,系统将终止该进程;③父进程终止。
当父进程被终止时,OS也将它的所有子孙进程终止。
2、进程终止原语的工作流程
(1)根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态。
(2)若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度。
(3)若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防他们成为不可控的进程。
(4)将被终止进程所拥有的全部资源,或者归还给其父进程,或者归还给系统。
(5)将被终止进程(它的PCB)从所在队列(或链表)中移出,等待其他程序来搜集信息。
(归还给系统)
四、进程的阻塞与唤醒
1、引起阻塞与唤醒的事件:
(1)向系统请求共享资源失败
(2)启动了某种操作,等待它的完成
(3)新数据尚未到达(4)等待新任务到达
引起阻塞的事件,当事件被处理完成(事件结束)后必然引起唤醒。
2、进程阻塞的过程
正在执行的进程,由于发生了上述某一事件而无法继续往下执行,于是该进程便调用阻塞原语block,把自己置于阻塞状态。
可见,进程的阻塞是进程自身的一种主动行为。
进程阻塞原语的流程:
进入block过程后,由于此时该进程还处于执行状态,所以应先立即停止执行,把进程控制块中的现行状态由“执行”改为“阻塞”,并将PCB插入阻塞队列。
如果系统中设置了因不同事件而阻塞的多个阻塞队列,则应将本进程插入到具有相同事件的阻塞(等待)队列。
最后,CPU的使用权交给OS的调度程序。
调度程序进行重新调度,将处理机分配给另一就绪进程,并进行现场切换,亦即,保留被阻塞进程的处理机状态(在阻塞进程的PCB中),再按新进程的PCB中的处理机状态设置CPU的环境。
3、进程的唤醒
处于阻塞状态的某进程所等待的某一事件处理完成(事件发生了),由“发现者进程”(比如,用完并释放了阻塞进程需要的I/O设备的进程、传送来了阻塞进程所需数据的进程)启动唤醒原语,将对应的被阻塞进程送入就绪队列。
进程唤醒原语的流程:
首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。
注意:
阻塞与唤醒原语是一对作用刚好相反的原语。
因此,如果在某进程中调用了阻塞原语,则必须在与之合作的另一进程中或其他相关进程中,安排唤醒原语,以唤醒被阻塞的进程;否则,被阻塞的进程将会长期处于阻塞状态,从而无机会继续运行。
五、进程的挂起与激活
1、进程的挂起
当出现“挂起事件”时,系统启动挂起原语,将某个进程挂起。
2、进程的激活
当发生“激活事件”时,系统启动激活原语,将指定的进程激活。
3、进程挂起原语的流程
首先检查将被挂起进程的状态,若处于活动就绪或执行状态,便将其改为静止就绪;对于活动阻塞状态的进程,则将之改为静止阻塞。
再将进程的PCB移入相应队列。
为了方便用户或父进程考查该进程的运行情况而把该进程的PCB复制到某指定的内存区域。
最后,若被挂起的进程刚才正在执行,则转向调度程序重新调度。
4、进程激活原语的流程
激活原语先将进程从外存调入内存,检查该进程的现行状态,若是静止就绪,便将之改为活动就绪;若为静止阻塞便将之改为活动阻塞。
再将进程的PCB移入相应队列。
假如采用的是抢占调度策略,则每当有新进程进入活动就绪队列时,应检查是否要进行重新调度,即由调度程序将被激活进程与当前进程进行优先级的比较,如果被激活进程的优先级更低,就不必重新调度;否则,立即剥夺当前进程的运行,把处理机分配给刚被激活的进程。
第3节进程的相互制约(相互协调)
一、进程间的两种相互制约关系
进程间的相互制约关系是由于并发执行的进程间相互合作和/或共享资源而引起的,OS要协调实现这种相互制约关系。
1、间接的相互制约关系----进程互斥:
进程a----资源----进程b(共享资源)
进程A、B互斥示意图
2、直接的相互制约关系----进程同步:
进程a----进程b(相互合作)
读、写进程同步示意图1
读、写进程同步示意图2
二、进程的互斥
1、临界资源和临界区
在一段时间内只允许一个进程访问的资源称为临界资源,许多物理设备,如输入机、打印机、磁带机等都具有这种性质;软件资源,如公用变量、数据、表格、队列等也都具有这一特点。
各进程中对临界资源进行操作的程序段称为临界区;并发进程中访问同一临界资源的临界区应该互斥执行。
例:
公共变量Count是临界资源
P1:
P2:
…………
Count=R1Count=R2
Count=Count+1Count=Count-1
R1=CountR2=Count
…………
进程P1,P2并发执行。
如果P1,P2的的临界区执行不互斥……
2、进程的互斥
临界区互斥执行示意图
“进程互斥”的概念描述:
两个或以上的进程不能同时使用同一个临界资源,只能一个进程用完了(资源完成了一个任务)另一个再用,这种现象称为进程的互斥。
也就是说,不允许两个或以上的共享同一临界资源的并发进程同时进入临界区、造成进程的临界区在时间上有重叠。
互斥反映了并发进程间由于资源共享而形成的制约关系。
3、控制进程间实现互斥应遵循的原则----P51
(1)空闲让进
(2)忙则等待(3)有限等待(4)让权等待
4、进程互斥的实现方法
(1)硬件同步机制----P51-52
(2)整型信号量和对应的P、V操作
整型信号量是一个与资源的物理实体个数有关的整型变量,除初始化外,仅能通过两个标准的原子操作(AtomicOperation):
wait(S)和signal(S)来访问。
这两个操作一直被分别简称为P、V操作。
wait和signal操作可分别描述为:
----P53
用整型信号量和简单的P、V操作实现进程互斥:
Pa:
Pb:
…………
wait(s)wait(s)
signal(s)signal(s)
…………
(3)记录型信号量和对应的P、V操作
在整型信号量机制中的wait操作,只要是信号量S≤0,就会不断地测试。
因此,该机制并未遵循“让权等待”的准则,而是使进程处于“忙等”的状态。
记录型信号量机制,则是一种不存在“忙等”现象的进程同步机制。
但在采取了“让权等待”的策略后,又会出现多个进程等待访问同一临界资源的情况,需要组织等待队列。
于是引进记录型信号量,描述为:
structsemaphore
{intvalue;
list_of_process*L;
};
其中:
整型分量:
是一个与资源的物理实体个数有关的整型变量,当其值≥0时,代表系统中供并发进程使用的同一类资源的数量;当其值<0时,其绝对值代表目前等待该类资源的等待队列的长度。
指针型分量:
指向该类资源等待队列的头结点。
这时,wait和signal操作可分别描述为:
semaphoreS;
P操作:
procedurewait(S)
{
S.value=S.value-1;/*申请消耗一个资源*/
ifS.value<0thenblock(S.L);/*阻塞*/
}
V操作:
proceduresignal(S)
{
S.value=S.value+1;/*归还/回收一个资源*/
ifS.value≤0thenwakeup(S.L);/*唤醒*/
}
用记录型信号量和对应的P、V操作,互斥的实现与使用整型信号量时相同。
(4)AND型信号量和对应的P、V操作
多个进程共享多个资源时采用记录型信号量和P、V操作实现进程的互斥,可能会出现死锁问题。
于是引进AND型信号量,和与其对应的P、V操作。
AND同步机制的基本思想是:
将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放。
只要尚有一个资源未能分配给进程,其它所有可能为之分配的资源,也暂不分配给他。
亦即,对若干个临界资源的分配,采取原子操作方式:
要么全部分配到进程,要么一个也不分配。
由死锁理论可知,这样就可避免上述死锁情况的发生。
AND型信号量的定义与记录型信号量相同,对应的P、V操作定义如下:
----P55
(5)信号量集和对应的P、V操作
信号量集机制的基本思想是:
一次分配若干类资源;每类资源一次分配一批(而不是一个);当某类资源的空闲数量少于下限时,停止分配该类资源。
----P55
用不同类型的信号量和其对应的P、V操作实现进程的互斥,原理是一致的,即用一对P、V操作将临界区括起来,只是P、V操作的意义不同。
Pa:
Pb:
wait(s)wait(s)
signal(s)signal(s)
…………
三、进程的同步
1、引例:
两进程A、B,A进程向缓冲区buf中放数据、B进程从buf中取数据打印;进程A、B的工作要多次进行;进程A和进程B并发执行、相互合作。
A写进程:
dowhile
(1){
while(buf≠空){};
计算,得到一个结果;
结果放入buf;
……}
B读进程:
dowhile
(1){
while(buf==空){};
取出buf中的数据,打印;
清空buf;
……}
2、进程同步
如果用引例中的方法由应用程序自己控制同步执行的步骤,则不符合“让权等待”的原则,会造成CPU资源的极大浪费。
“进程同步”的概念描述:
异步环境下的一组并发进程,由于需要互发消息/数据、相互合作,在一些关键点上要相互等待,从而相互制约彼此的执行速度,要步调一致地向前推进。
同步反映了并发进程间由于相互合作而形成的制约关系。
3、用信号量和P、V操作来实现进程同步控制
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 进程 描述 控制