1、第 3 章进程的描述与控制3.1 进程的引入3.2 进程的描述3.3 进程控制3.4 进程控制的实现举例习题第 3 章进程的描述与控制3.1.1 程序的顺序执行程序的顺序执行1程序顺序执行程序顺序执行一个程序通常由若干个程序段组成,它们必须按照某种先后次序来执行,仅当前一操作执行完后,才能执行后续操作,这类执行过程就是程序的顺序执行。例如,在处理一个作业时,总是先输入用户的程序和数据,然后进行计算,最后将所得的结果打印出来。若用结点代表各个程序段的操作,其中I代表输入操作,C代表计算操作,P代表打印操作,则上述程序段的执行过程如图3-1所示。对一个作业的输入、计算和打印三个操作,必须顺序执行。
2、3.1 进进程程的的引引入入第 3 章进程的描述与控制图3-1 程序的顺序执行第 3 章进程的描述与控制2.程序顺序执行的特征程序顺序执行的特征1)顺序性当顺序程序在处理机上执行时,处理机的操作是严格按照程序所规定的顺序执行的,即只有前一操作结束后,才能执行后续操作。2)封闭性程序是在封闭的环境下运行的。即程序在运行时,它独占全机资源,因而机内各资源的状态只有本程序才能改变。程序一旦开始运行,其执行结果不受外界因素的影响。3)可再现性只要程序执行时的环境和初始条件相同,当程序多次重复执行时,不论它是从头到尾不停顿地执行,还是“停停走走”地执行,都将获得相同的结果。第 3 章进程的描述与控制3.
3、1.2 程序的并发执行程序的并发执行 1.程序并发执行程序并发执行如图3-1所示的输入操作、计算操作和打印操作是一个作业的三个处理过程,逻辑上要求顺序执行。但实际上,实现上述三个步骤的输入机、中央处理机和打印机这三个物理部件是可以同时操作的。由于作业本身的特点,这三个作业步骤只能顺序执行。当有一批作业进行处理时,情况就不同了。输入了作业1的程序和数据后,在对该作业进行计算的同时,可输入作业2的程序和数据,即作业1的计算操作和作业2的输入操作同时进行。如图3-2所示,说明了系统对一批作业进行处理时,各程序段执行的先后顺序。第 3 章进程的描述与控制图3-2 程序的并发执行第 3 章进程的描述与控
4、制从图3-2中可以看出,有的程序执行是有先后顺序的,如:I1先于I2和C1,C1先于P1和C2等。有的程序段可以并发执行,如:I2和C1,C2和P1。所以,对于并发执行的程序来说,它有时处于执行状态,但由于并发程序之间的相互制约关系,有时因需要的某种资源得不到满足,处于暂停状态。因此,并发程序执行时就是像这样停停走走向前推进的。为了能正确反映程序执行时的活动规律和状态变化,要引入一个新的概念进程,以便从变化的角度动态地描述程序的执行。第 3 章进程的描述与控制2程序并发执行时的特征程序并发执行时的特征1)间断性程序在并发执行时,由于它们共享资源或为完成同一项任务而相互合作,致使在并发程序之间形
5、成了相互制约的关系。例如,图3-2所示的I、C和P是三个相互合作的程序,当计算程序完成Ci-1的计算后,如果输入程序I但计算程序尚未完成Ii的处理,则计算程序就无法进行Ci的处理,致使计算程序暂停运行。又如,打印程序完成了Pi的打印后,若计算程序尚未完成对Ci-1的计算,则打印程序就无法对Ci-1的处理结果进行打印。一旦使某程序暂停的因素消失,计算程序便可恢复执行对Ci进行处理。简言之,相互制约将导致并发程序具有“执行暂停执行执行”这种间断性的活动规律。第 3 章进程的描述与控制2)失去封闭性程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行
6、已失去了封闭性。这样,某程序在执行时,必然会受到其他程序的影响。例如,当处理机资源被其他程序占有时,某程序必须等待。3)不可再现性程序在并发执行时,由于失去了封闭性,也将导致失去其可再现性。现以两个并发的循环程序共用一个公共变量N来说明这个问题。设程序A每执行一次都要做N=N+1操作,程序B每隔一定时间打印出N值,并将它重新置为0,变量N的初值为N0。这两个程序如图3-3所示。第 3 章进程的描述与控制图3-3 两个程序并发执行实例第 3 章进程的描述与控制由于程序A和程序B的执行都以各自独立的速度向前推进,故程序A与程序B之间对变量N的操作会有如下三种可能:(1)程序A的N=N+1操作,在程
7、序B的PRINT(N)和N=0操作之前,如图3-4所示。这种情况下打印机打印出来的N值为“N0+1”。(2)程序A的N=N+1操作,在程序B的PRINT(N)和N=0操作之间,如图3-5所示。这种情况下打印机打印出来的N值为“N0”。(3)程序A的N=N+1操作,在程序B的PRINT(N)和N=0操作之后,如图3-6所示。第 3 章进程的描述与控制图3-4 第一种执行情况第 3 章进程的描述与控制第 3 章进程的描述与控制图3-6 第三种执行情况第 3 章进程的描述与控制这种情况下打印机打印出来的N值为“N0”。之所以出现上述错误,是因为它们公用了一个公共变量N,而又没有采取恰当的措施。这个例
8、子说明并发程序的执行结果与执行速度有关,也就是说,并发程序已丧失了顺序程序所具有的封闭性和可再现性的特征。第 3 章进程的描述与控制3.2.1 进程的定义进程的定义进程的概念是在20世纪60年代初期,首先由美国麻省理工学院的MULTICS和IBM公司的CTSS/360系统引入的,其后又有许多人从不同的角度给进程下过各种定义。其中较能反映进程实质的定义有:(1)进程是程序的一次执行。(2)进程可定义为一个数据结构及能在其上进行操作的一个程序。3.2 进进程程的的描描述述第 3 章进程的描述与控制(3)进程是一个程序与其数据一起通过处理机的执行所发生的活动。(4)进程是程序在一个数据集合上的运行过
9、程,是系统进行资源分配和调度的一个独立单位。据此,可以把进程定义为:可并发执行的程序在处理机上的执行过程。显然,进程和程序是两个截然不同的概念。程序是指令的有序集合,本身没有任何运行的含义。而进程是程序在处理机上的一次执行过程,是一个动态的概念,进程是有生命期的,能够动态地产生和消亡。其动态性还表现为:“进程由创建而产生,由调度而执行,因得不到资源而暂停,由撤销而消亡”。第 3 章进程的描述与控制程序和进程是既有区别又有联系的两个概念,它们的区别如下:(1)程序是一个静态的概念,而进程是一个动态的概念。(2)程序的存在是永久的,而进程是有生命期的。(3)进程是一个能独立运行的基本单位,是系统资
10、源分配和调度的基本单位。(4)进程与程序之间不是一一对应的,即同一程序同时运行于若干不同的数据集合上,属于若干个不同的进程。第 3 章进程的描述与控制3.2.2 进程的基本状态进程的基本状态前面已经介绍过,进程并不是一口气运行到底的,它与并发执行的其他进程的执行是相互制约的。进程有时处于运行状态,有时又由于某种原因而暂停,等到使它暂停的原因消失后,它又准备运行了,所以进程在运行中不断地改变其运行状态。一个进程在活动期间至少具备以下三种状态:第 3 章进程的描述与控制就绪状态:当进程已经获得除处理机以外的所有资源后,一旦获得CPU,就可以立即运行,这时的进程状态称为就绪状态。在一个系统中,可以有
11、多个进程同时处于就绪状态,通常把这些进程排成一个或多个队列,称为就绪队列。运行状态:进程已获得处理机,它的程序正在执行,这时的进程状态称为运行状态。在单处理机系统中,只能有一个进程处于运行状态。只有在多处理机系统,才存在运行队列。第 3 章进程的描述与控制等待状态:进程因发生某事件(如请求I/O等)而暂时停止运行,即使给它CPU也无法运行,这时的进程状态称为等待状态,也称为阻塞状态。把处于等待状态的进程排成一个队列,称为等待队列。有时也按阻塞的原因不同排成多个队列。进程并非固定地处于某个状态,它将随着程序的执行和外界条件的变化而发生变化,可以用进程状态变迁图(如图3-7所示)来说明系统中进程的
12、状态和这些状态之间变迁的原因。在图3-7中,以结点表示进程的状态,以箭头表示状态的变化。第 3 章进程的描述与控制图3-7 进程状态变迁图第 3 章进程的描述与控制从图3-7中可以看出,处于就绪状态的进程,当进程调度程序为它分配了处理机后,该进程由就绪状态变为运行状态;正在运行的进程因发生某事件而无法执行,则进程将由运行状态变为阻塞状态;处于阻塞状态的进程,若其等待的事件已经发生,则由阻塞状态变为就绪状态;正在执行的进程,如因时间片用完而被暂停执行,该进程由执行状态转为就绪状态。第 3 章进程的描述与控制3.2.3 进程的描述进程的描述当程序并发执行时,由于并发程序之间的相互制约关系,造成程序
13、在执行过程中受阻而暂停,如果系统无法保留该程序的现场,也就意味着无法恢复该程序的现场以继续执行。为了使程序在多道程序设计环境下能并发执行,并能对并发执行的程序加以控制和描述,专门配置了称为“进程控制块”的数据结构。第 3 章进程的描述与控制1.进程控制块进程控制块为了描述和控制进程的运行,系统为每个进程定义了一个数据结构进程控制块(PCB,Process Control Block)。所谓系统创建一个进程,就是由系统为某个程序设置一个PCB,用于对该进程进行控制和管理。进程执行完成时,由系统收回其PCB,该进程便消亡了。对于不同的操作系统来说,进程PCB所包含的内容会有些不同,但通常会包括表3
14、-1所示的内容。第 3 章进程的描述与控制表表3-1 进程进程PCB结构结构NAME STATUS NEXT ALL-Q-NEXT START-ADDR PRIORITY CPUSTATUS COMMUNICATION-INFORMATION PROCESS-FAMILY OWN-RESOURCE 第 3 章进程的描述与控制对PCB所包含的内容具体说明如下:(1)进程标识符(NAME):每个进程都必须有唯一的标识符,以区别于系统内的其他进程。在进程创建时,由创建者给出进程的标识符。(2)进程当前状态(STATUS):说明本进程目前处于何种状态,即运行、就绪或等待,以作为进程调度程序分配处理机的
15、依据。(3)进程队列指针(NEXT):用于记录处于同一状态下的下一个PCB的地址,以此可以将同一状态的所有进程链接起来。第 3 章进程的描述与控制(4)总链指针(ALL-Q-NEXT):当系统中存在大量进程时,所有的进程根据自己的状态分别处于相应的队列中,这便于对进程实施调度控制。当进行某些管理功能,如执行创建新进程时,就感到系统具有所有进程的总链将是十分方便的。因为进程的标识符必须是唯一的,为了避免重名,必须先检查系统中已有的进程名,如果在各个不同状态的队列中进行查询是非常麻烦的,所以,通过提供一个总链指针来方便查询。PCB中的该项内容是存放总链队列中下一个PCB的地址。第 3 章进程的描述
16、与控制(5)程序开始地址(START-ADDR):该进程的程序从此地址开始执行。(6)进程优先级(PRIORITY):反映进程要求CPU的紧迫程度,优先级高的进程可以优先获得CPU。(7)CPU现场保护(CPUSTATUS):当进程因某种原因释放处理机时,CPU现场信息被保存在PCB的该区域中,以便在进程重新获得处理机后继续执行。(8)通信信息(COMMUNICATION-INFORMATION):记录该进程在执行过程中与别的进程所发生的信息交换情况。第 3 章进程的描述与控制(9)进程家族(PROCESS-FAMILY):有的系统允许进程创建子进程,从而形成一个进程家族树。在PCB中必须指明
17、进程与家族的关系。(10)占有资源清单(OWN-RESOURCE):列出进程所需资源及当前已分配资源清单。第 3 章进程的描述与控制2.进程的组成进程的组成从结构上讲,每个进程都是由程序、数据和一个进程控制块PCB组成的,如图3-8所示。进程的程序部分描述了进程所要完成的功能。数据集合是程序在执行时所需要的数据和工作区。这两部分是进程存在的基础。PCB是进程存在的标识。第 3 章进程的描述与控制图3-8 进程的组成第 3 章进程的描述与控制3.2.4 进程进程PCB的组织方式的组织方式在一个系统中,通常存在许多PCB。为能对它们实现有效的管理,应采用适当的方式将它们组织起来。目前常用的组织方式
18、有链接方式和索引方式两种。1链接方式链接方式把具有相同状态的PCB用其中的链接字链接成一个队列,这样,可形成就绪队列、若干个阻塞队列和空白队列等。对其中的就绪队列常按进程优先权的大小排列,把优先权高的进程的PCB排在队列前面。此外,也可根据阻塞原因的不同,把处于阻塞状态的进程的PCB排成等待I/O操作完成队列、等待分配内存队列。图3-9所示是一种链接队列的组织方式。第 3 章进程的描述与控制图3-9 PCB链接队列示意图第 3 章进程的描述与控制2索引方式索引方式系统根据所有进程的状态,建立几张索引表。例如,就绪索引表、阻塞索引表等。并把各索引表在内存的首地址记录于内存中的一些专用单元中。在每
19、个索引表的表目中,记录具有相应状态的某个PCB在PCB表中的地址。按索引方式组织PCB,如图3-10所示。第 3 章进程的描述与控制图3-10 按索引方式组织PCB第 3 章进程的描述与控制3.3.1 进程创建进程创建进程创建是由创建原语实现的。当需要进程时,就可以建立一个新进程。被创建的进程称为子进程,创建者称为父进程。创建原语的主要功能是为被创建进程形成一个PCB,并填入相应的初始值,同时将PCB插入就绪队列,返回一个进程的标识号(PID)。该原语的实现过程如图3-11所示。3.3 进进 程程 控控 制制第 3 章进程的描述与控制图3-11 进程创建算法流程图第 3 章进程的描述与控制3.
20、3.2 进程撤销进程撤销进程撤销是由撤销原语实现的。一个进程在完成其任务后,应予以撤销,以便及时释放所占有的各类资源。撤销原语的主要功能是收回被撤销进程占用的所有资源,并撤销它的PCB,从总链队列中摘除它,然后转进程调度程序。该原语实现过程如图3-12所示。第 3 章进程的描述与控制图3-12 进程撤销算法流程图第 3 章进程的描述与控制3.3.3 进程的阻塞与唤醒进程的阻塞与唤醒阻塞原语的作用是将进程由执行状态转为阻塞状态,而唤醒原语的作用是将进程由阻塞状态转为就绪状态。当一个进程所期待的某一事件尚未出现时,该进程调用阻塞原语将自己阻塞起来。阻塞原语在阻塞一个进程时,由于该进程正处于执行状态
21、,应先中断处理机和保存该进程的CPU现场,然后将该进程插入到等待该事件的等待队列中,再从就绪队列中选择一个新的进程投入运行。该原语实现过程如图3-13所示。第 3 章进程的描述与控制进程由运行状态转变为阻塞状态是由于进程必须等待某一事件的发生,因此处于等待状态的进程是绝对不可能叫醒自己的。当该进程期待的事件出现时,由发现者进程调用唤醒原语将阻塞的进程唤醒,使其进入就绪状态。发现者进程和被唤醒进程是合作的并发进程。唤醒原语的功能是:当进程等待的事件发生时,唤醒该进程。该原语实现过程如图3-14所示。第 3 章进程的描述与控制图3-13 进程阻塞算法流程图 第 3 章进程的描述与控制图3-14 进
22、程唤醒算法流程图第 3 章进程的描述与控制1进程创建进程创建Linux系统中,除初始化进程外,其他进程都是通过fork()系统调用建立的。使用fork()的进程为父进程,通过fork()创建的新进程为子进程。使用fork()系统调用后,对父进程返回子进程的进程号,对子进程返回零。3.4 进程控制的实现举例进程控制的实现举例第 3 章进程的描述与控制利用fork()系统调用创建进程的程序如下:#include#include#include void main()第 3 章进程的描述与控制 int i;if(fork()=0)printf(this is the child process!n)
23、;else printf(this is the parent process!n);第 3 章进程的描述与控制2进程终止、阻塞和唤醒进程终止、阻塞和唤醒当进程完成任务后,Linux系统提供了exit系统调用,实现进程的自我终止,并通知其父进程。在Linux系统中,进程可以利用wait系统调用将自己阻塞,直到被子进程通过软中断唤醒。wait系统调用的主要功能是等待子进程结束执行,并做好其善后处理工作。而对于要唤醒一个进程,在Linux中是使用wake_up或wake_up_interruptible来实现的,将进程的状态从等待状态变为运行状态,并插入到可运行队列中。第 3 章进程的描述与控制下
24、面的程序是说明父子进程之间是如何使用exit和wait进行工作的。#include#include#include void main()pid_t child;int status;第 3 章进程的描述与控制 printf(this will demonstrate how to get child statusn);if(child=fork()=-1)printf(fork error!n);exit(1);else if(child=0)第 3 章进程的描述与控制 int i;printf(this is the parent process:%ldn,getpid();for(i=0
25、;i1000000;i+)sin(i);i=5;printf(I exit with:%dn,i);exit(i);第 3 章进程的描述与控制while(child=wait(&status)=-1)&(errno=EINTR)if(child=-1)printf(wait errorn);else if(!status)printf(child%ld terminated normally return status is zeron,child);else if(WIFEXITED(status)printf(child%ld terminated normally return stat
26、us is%dn,child,WEXITSTATUS(status);else if(WIFSIGNALED(status)printf(child%ld terminated normally return status is%dn,child,WTERMSIF(status);第 3 章进程的描述与控制1.请简述为什么在操作系统中引入进程的概念。2.程序并发执行为何会失去封闭性和可再现性?3.叙述程序和进程的主要区别。4.试说明PCB的作用。为什么说PCB是进程存在的唯一标识。5.请画出进程基本状态变迁图,并说明进程在三个基本状态之间转换的典型原因。6.请描述进程创建的算法。7.某系统的进程状态变迁图如图3-15所示,请说明:习习 题题第 3 章进程的描述与控制图3-15 某系统的进程状态变迁图第 3 章进程的描述与控制(1)引起各种状态变迁的原因是什么?(2)如果在系统中某一进程产生的一次状态变化能引起另一进程作一次状态变化。在什么情况下,当一个进程发生变迁3时能立即引起另一进程发生变迁1?(3)试说明是否会发生下述因果变迁?