2020/2/812.1进程的概念2.2进程控制2.3进程同步2.4经典进程的同步问题2.5管程机制2.6进程通信2.7线程第二章进程管理2020/2/82计算机系统中,最宝贵的资源是CPU。为了提高它的利用率,需要引入多道程序设计的概念。当内存储器中同时有多个程序存在时,如果不对人们熟悉的“程序”概念加以扩充,就无法刻画多个程序共同运行时系统呈现出的特征。因此,在本章将给出操作系统中的重要概念:“进程”。它将是在多道程序运行环境下,系统资源分配和独立运行的基本单位。退出2020/2/832.1进程的概念2.1.1程序的顺序执行及其特点2.1.2前趋图2.1.3程序并发执行及其特征2.1.4进程的特征与状态2.1.5进程控制块2020/2/842.1.1程序的顺序执行程序的顺序执行如图在计算机系统中只有一个程序在运行,这个程序独占系统中所有资源,其执行不受外界影响。一道程序执行完后另一道才能开始。2020/2/852.1.1程序的顺序执行仅当前一操作(程序段)执行完后,才能执行后继操作。例如,在进行计算时,总须先输入用户的程序和数据,然后进行计算,最后才能打印计算结果。S1:a∶=x+y;S2:b∶=a-5;S3:c∶=b+1;(a)程序的顺序执行(b)三条语句的顺序执行I1C1P1I2C2P2S1S2S32020/2/86程序顺序执行的特点顺序性:一个程序开始执行必须要等到前一个程序已执行完成。绝对不可能出现在一个程序运行过程中,又夹杂进另一个程序执行的现象存在。2020/2/87程序顺序执行的特点封闭性:程序一旦开始执行,其计算结果不受外界因素影响。任何时候,位于内存中的程序可以使用系统中的一切资源,不可能有其他程序与之竞争。2020/2/88程序顺序执行的特点可再现性:程序的结果与它的执行速度无关(即与时间无关),只要执行环境和初始条件相同,当多次重复执行一个程序时,无论不停的执行还是“走走停停”,一定会得到相同的结果。2020/2/892.1.2前趋图概念:前趋图是一个有向无循环图。要求每个结点可用于表示一条语句、一个程序段或进程等结点间的有向边表示在两个结点之间存在的前趋关系-={(Pi,Pj)|Pi必须在Pj开始之前完成}用途:表示程序的执行顺序2020/2/810前趋图P1P3P8P9P4P2P5P6P7S1S2S3(a)具有九个结点的前趋图(b)具有循环的前趋图把没有前趋的结点称为初始结点(InitialNode),把没有后继的结点称为终止结点(FinalNode)。每个结点还具有一个重量(Weight),用于表示该结点所含有的程序量或结点的执行时间。2020/2/811前趋图P1→P2,P1→P3,P1→P4,P2→P5,P3→P5,P4→P6,P4→P7,P5→P8,P6→P8,P7→P9,P8→P9或表示为:P={P1,P2,P3,P4,P5,P6,P7,P8,P9}→={(P1,P2),(P1,P3),(P1,P4),(P2,P5),(P3,P5),(P4,P6),(P4,P7),(P5,P8),(P6,P8),(P7,P9),(P8,P9)}应当注意,前趋图中必须不存在循环,但在图2-2(b)中却有着下述的前趋关系:S2→S3,S3→S2这种前趋关系是不可能满足的。对于图2-2(a)所示的前趋图,存在下述前趋关系:2020/2/812练习习题2S1:a:=x+y;S2:b:=z+1;S3:c:=a-b;S4:w:=c+1;S1S3S2S42020/2/8132.1.3程序的并发执行及其特征所谓程序的并发执行是指:若干个程序同时在系统中执行,这些程序的执行在时间上是重叠的,一个程序的执行尚未结束,另一个程序的执行已经开始。并发与并行概念的区别?Concurrency,parallel2020/2/814程序并发执行的特征间断性失去程序的封闭性不可再现性任何并发执行都是不可再现的吗?2020/2/815间断性:“执行的顺序性”被打破了。例:从上图中可以看出,时刻6程序A打印完毕,按说应该继续执行,但是CPU已经分配给了程序B,因此程序A只能等到时刻9在程序B请求打印时,才能重新获得CPU。这就是说,在程序A执行过程时,夹杂进了程序B的执行,打破了程序执行的顺序性,内存中多个程序的执行过程被交织在一起。从宏观上看,好几个程序都在运行着(比如,在时间区间4~12,程序A和程序B都在做着自己的事情;在时间区间12~17,程序B和程序C都在做着自己的事情);而从微观上看,每个时刻CPU只能为一个程序服务,因此运行着的程序都是走走停停。总之,在程序并发执行时,各个程序的执行已经不再可能完全依照自己的执行次序执行了。2020/2/816封闭性被打破:程序并发执行时,多个程序共享系统中的资源,其状态可有多个程序来改变。因此,某程序在执行时必然受其他程序的影响。如可能有多个程序竞争cpu。2020/2/817不可再现性:“结果的再现性”被打破了。举例:有两个循环程序A和B,它们共享一个变量N。程序A每执行一次时,都要做N∶=N+1操作;程序B每执行一次时,都要执行Print(N)操作,然后再将N置成“0”。程序A和B以不同的速度运行。(1)N∶=N+1在Print(N)和N∶=0之前,此时得到的N值分别为n+1,n+1,0。(2)N∶=N+1在Print(N)和N∶=0之后,此时得到的N值分别为n,0,1。(3)N∶=N+1在Print(N)和N∶=0之间,此时得到的N值分别为n,n+1,0。2020/2/8182.1.4进程的特征与状态为了对并发执行的程序加以描述和控制,人们引入了“进程”。2020/2/819进程的特征(五个基本特征)结构特征:进程是由程序段、数据段、进程控制块三部分组成2020/2/820进程的特征(五个基本特征)动态性:(最基本特征)进程是程序的一次执行过程。“进程”是一个动态的概念。程序是一组有序指令的集合,在多道程序设计环境下,它不涉及“执行”,因此是一个静态的概念。可以这么来理解,一套电影拷贝相当于一个程序,它可以长期保存;该拷贝在电影院的一次放映,就相当于一个进程。进程有生命周期。进程既然是程序的执行,或者说是“一次运行活动”。因此当系统要完成某一项工作时,它就“创建”一个进程,以便能去执行事先编写好的、完成该工作的那段程序。程序执行完毕,完成了预定的任务后,系统就“撤消”这个进程,收回它所占用的资源。一个进程创建后,系统就感知到它的存在;一个进程撤消后,系统就无法再感知到它。于是,从创建到撤消,这个时间段就是一个进程的“生命期”。进程的存在是暂时的。而程序的存在是永久的。2020/2/821进程的特征(五个基本特征)并发性:多个进程可同存于内存中,能在一段时间内同时运行(重要特征,也是os重要特征)。这正是引入进程的目的,而程序(在没有为它创建进程时)的并发执行具有不可再现性,因此程序不能正确的并发执行。2020/2/822进程的特征(五个基本特征)独立性:独立运行的基本单位,独立获得资源和调度的基本单位。(目前有些变化)。而因程序(在没有为它创建进程时)不具有PCB,所以它是不可能在多道程序环境下独立运行的。2020/2/823进程的特征(五个基本特征)异步性:各进程按各自独立的不可预知的速度向前推进进程与程序的区别动态,静态有生命周期,永久的组成不同不是一一对应的。2020/2/824进程定义进程有很多各式各样的定义,如:进程是程序的一次执行进程是一个程序及其数据在处理机上顺序执行时所发生的活动进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。2020/2/825进程的三种基本状态进程间由于共同协作和共享资源,导致生命期中的状态不断发生变化。比如一个进程在等待输入/输出的完成,这时它不能继续运行。另一种情形是一个进程是可以运行的,但由于操作系统把处理机分配给了别的进程使用,于是它也只能处于等待。只有当前占有CPU的进程,才真正在处于运行。进程有三种基本状态:就绪、执行、阻塞2020/2/826进程的三种基本状态就绪状态(Ready):存在于处理机调度队列中的那些进程,它们已经准备就绪,一旦得到CPU,就立即可以运行。这些进程所处的状态为就绪状态。(可有多个进程)执行状态(Running):正在运行的进程所处的状态为执行状态。(只有一个进程)阻塞状态(Blocked):正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃CPU而处于暂停状态,称该进程处于等待状态、阻塞状态。典型事件:请求I/O,申请缓冲空间等。(可有多个队列)2020/2/827一个进程的状态,可以随着自身的推进和外界环境的变化而变化,从而使其从一种状态变迁到另一种状态。下图是进程状态变迁图,箭头表示的是状态变迁的方向,旁边标识的文字是引起这种状态变迁的原因。就绪阻塞执行时间片完进程调度I/O完成I/O请求2020/2/828进程基本状态的转换运行状态就绪状态等待状态处于运行状态的进程在时间片运行完毕时,会变为就绪状态,并被安排进入就绪进程的队列之中;处于运行状态的进程还没有使用完分配给它的时间片,由于某一种条件不满足,导致该进程必须退出运行状态,进程就变为等待状态,同时被安排进入某一个等待队列之中。处于等待队列之中的进程,如果其等待的条件被满足,它的状态就会变为就绪状态,同时被制造条件的那个进程安排进入就绪队列。处于就绪状态的进程可以变化为运行状态。进程调度程序按一定的规则从就绪队列中选出一个进程来执行,这一个被选中的进程就变化为运行状态。2020/2/829从图看出:一个正处于运行状态的进程,比如会由于提出I/O请求而使自己的状态变成为阻塞。由于这是进程自己提出的请求,“知道”到这里就会阻塞,以便等待I/O的完成,所以这属于进程自身推进过程中引起的状态变化。在I/O操作完成后,会使某个进程的状态由阻塞变为就绪。由于被阻塞的进程并不知道它的I/O请求何时能够完成,因此这属于由于外界环境的变化而引起的状态变化。2020/2/8301.处于就绪状态与阻塞状态的进程,虽然都“暂时无法运行”,但两者有着本质上的区别。前者已做好了运行的准备,只要获得CPU就可以投入运行;而后者要等待某事件(比如输入/输出)完成后才能继续运行,因此即使此时把CPU分配给它,它也无法运行。2020/2/831练习进程与程序的主要区别在于进程是___的,而程序是____的,一个程序可以对应_____进程。下列进程状态转换中,绝对不可能发生的状态转换是(),一般不会发生的状态转换是()A就绪—执行,B执行—就绪C就绪—阻塞D阻塞—就绪D阻塞—执行E执行—阻塞2020/2/832练习D阻塞—执行:是可能的,如果一个进程因等待I/O而产生阻塞,在I/O资源释放后,若CPU处于休眠状态,此进程就可以直接从阻塞状态迁移到执行状态。C就绪—阻塞:是不可能的,一个就绪的进程不会遇到其I/O或其它资源的阻塞,只有一个处于执行状态的进程才会阻塞。2020/2/833练习分配到必要的资源并获得处理机时的进程状态是_____。A、就绪状态B、执行状态C、阻塞状态D、撤消状态当_____时,进程从执行状态转变为就绪状态。A、进程被调度程序选中B、时间片到C、等待某一事件D、等待的事件发生2020/2/834练习下面对进程的描述中,错误的是:A、进程是动态的概念B、进程执行需要处理机C、进程是有生命周期的D、进程是指令的集合进程是基本状态有___、____、____。进程的基本特征是___、____、____、___、____。2020/2/835进程的挂起状态引入挂起状态主要原因:用户的需求父进程的需求负荷调节的需要操作系统的需求引入挂起状态后的进程状态转换执行状态→静止就绪活动就绪→静止就绪活动阻塞→