14第2章进程和线程的管理例题解析例2.2.1试说明进程和程序之间的区别和联系。解进程和程序是既有区别又有联系的两个概念。(1)进程是动态的,程序是静态的。程序是一组有序的指令集合,是一个静态的概念;进程则是程序及其数据在计算机上的一次执行,是一个动态的集合。离开了程序,进程就失去了存在的意义,但同一程序在计算机上的每次运行将构成不同的进程。程序可看作是电影的胶片,进程可以看作电影院放电影的过程。(2)一个进程可以执行多个程序,如同一个电影院的一场电影可放映多部影片。(3)一个程序可被多个进程执行,如同多个影院同时利用一个电影的胶片放映同一部电影。(4)程序可以长期保存,进程只能存在于一段时间。程序是永久存在的,而进程有从被创建到消亡的生命周期。例2.2.2举例说明多道程序系统失去了封闭性和再现性。解例如,有两个循环程序A和B,共享一个变量N。程序A每执行一次时,都要做N:=N+1操作;程序B则每执行一次时,都要执行print(N)操作,然后再将N的值置成“0”。程序A和B在多道程序系统中同时运行。假定某时刻变量N的值为n,可能出现下述三种情况:(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。所以,在A、B程序多次执行过程中,虽然其每次执行时的环境和初始条件都相同,但每次得到的结果却不一定相同。例2.2.3为什么将进程划分成执行、就绪和阻塞三个基本状态?解根据多道程序执行的特点,进程的运行是走走停停的。因此进程的初级状态应该是执行和等待状态。处于执行状态的进程占用处理机执行程序,处于等待状态的进程正在等待处理机或者等待其它某种事件的发生。但15是,当处理机空闲时,并不是所有处于等待状态的进程都能放到处理机上执行,有的进程即使分配给它处理机,它也不能执行,因为它的执行的条件没有得到满足。因此,将等待状态的进程分成两部分,一部分是放在处理机上就能立即执行,这就是就绪的进程;另一部分是仍需等某种事件发生的进程,即使放在处理机上也不能执行的进程,这就是阻塞进程。例2.2.4进程的挂起状态与进程的阻塞状态和就绪状态有何异同?解相同点是它们都没有占用处理机。不同点是挂起状态的进程是处于一种静止状态,不会参与对资源的竞争,在解除挂起之前,进程不会有新的资源要求,也不会有占用处理机的机会;阻塞状态和就绪状态的进程均处于活动状态,它们都有获得处理机的机会,都可能有新的资源要求。例2.2.5两个并发进程P1和P2的程序代码在下面给出。其中,A、B、C、D和E均为原语。P1:beginP2:beginA;D;B;E;C;endend请给出P1、P2两个进程的所有可能执行的过程。解P1和P2进程以不可预知的速度推进,它们所有可能的执行过程为:(1)A→B→C→D→E(2)A→B→D→E→C(3)A→B→D→C→E(4)A→D→B→E→C(5)A→D→B→C→E(6)A→D→E→B→C(7)D→E→A→B→C(8)D→A→B→C→E(9)D→A→B→E→C(10)D→A→E→B→C例2.2.6在操作系统中为什么要引入进程这一概念?解在单道程序设计环境下,CPU被一道程序独占,CPU严格按该程序的指令顺序来执行。单道程序具有顺序性、封闭性和可再现性。单道程序有许多局限性,于是出现了多道程序。在多道程序环境中,有若干个程序同时运行,具有了许多新的特征,如并发性、动态性以及相互制约性等。这时,程序的概念已经不能描述上述这些特征,并发程序的特征必须用新的概念来描述,于是引进了“进程”的概念。例2.2.7在多道程序系统,当进程需要等待某种事件发生时,进程将进入何种状态?解当进程需要等待某种事件发生时,进程进入何种状态取决于进程程16序的处理方式。进程可以调用阻塞原语,将自己阻塞,暂时放弃处理机;进程也可以采用不放弃处理机的循环等待的方式等待某种事件发生。因此,当进程需要等待某种事件发生时,进程并不是一定要进入阻塞状态。例2.2.8父进程创立子进程与主程序调用子程序有何不同?解父进程创立子进程后,父进程与子进程同时执行;主程序调用子程序,主程序暂停在调用点,子程序开始执行,直到子程序执行完毕返回,主程序开始执行。例2.2.9进程控制块PCB的作用是什么?它主要包含哪些内容?解操作系统管理的进程是多种多样的,要对这些进程实施有效的管理,必须对进程进行抽象。为了便于系统控制和描述进程的活动,在操作系统核心为进程定义了一个进程控制块PCB。PCB用于描述进程的基本情况以及进程运行和变化的过程,它与进程一一对应。当系统创建进程时,为进程分配一个PCB;在进程运行过程中,系统通过PCB对进程实施管理和控制;进程结束时,系统将收回PCB。PCB中的内容主要包括调度信息和现场信息两大部分。调度信息包括进程名、进程号、优先级、当前状态、资源信息、程序和数据的位置信息、隶属关系和各种队列指针信息等。现场信息主要包括程序状态字、时钟寄存器和界限寄存器等描述进程运行情况的信息。例2.2.10一个新创建的进程,第一次被调度到CPU上运行时,其“现场”从何而来?解进程在CPU上交替地执行是通过保存退出进程的现场和恢复新选中进程的现场实现的;而一个进程的“现场”是其上次从CPU上退出时获得的。但是,一个新创建的、尚未在CPU上运行过的进程还没有“上一次”,那么它的“现场”从何而来?是从其父进程继承而来,是在进程创建程序执行时,将父进程特意为子进程准备的“现场”复制给子进程。新创建的子进程就是以此“现场”实施其第一次运行的。例2.2.11用户级线程和内核支持线程有何区别?解两者的区别是:(1)内核支持线程是OS内核可感知的,而用户级线程是OS内核不可感知的。(2)用户级线程的创建、撤消和调度不需要OS内核的支持,是在语言(如Java)这一级处理的;而内核支持线程的创建、撤消和调度都需OS内核提供支持,而且与进程的创建、撤消和调度大体是相同的。(3)用户级线程执行系统调用指令时将导致其所属进程被中断,而内17核支持线程执行系统调用指令时,只导致该线程被中断。(4)在只有用户级线程的系统内,CPU调度还是以进程为单位,处于运行状态的进程中的多个线程,由用户程序控制线程的轮换运行;在有内核支持线程的系统内,CPU调度则以线程为单位,由OS的线程调度程序负责线程的调度。(5)用户级线程的程序实体是运行在用户态下的程序,而内核支持线程的程序实体则是可以运行在任何状态下的程序。例2.2.12说明SolarisOS的用户级线程、内核线程和轻型进程之间的关系。解首先要说明的是,这里所说的“内核线程”与“内核支持线程”是有区别的,即“内核线程”是与OS内核中的程序相对应的线程;而“内核支持线程”是指其创建、撤消和切换都需要内核程序支持才能实现的线程,其线程本身所对应的程序可以是OS的内核程序,也可以是内核外运行在用户态的程序,但主要是用户的应用程序。在SolarisOS中,为了实现“用户级线程”与内核的无关性,在“用户级线程”和“内核线程”之间设立了称之为“轻型进程”(LWP:Light-WeightProcess)的运行实体,作为两类线程的接口,用户级线程只能通过LWP请求内核线程的支持和服务。这样做的目的是要将两类线程隔离开来,使系统的运行层次更加清晰,效率和安全性更好。例2.2.13简述创建进程的大致过程。解创建一个进程大体分以下几步:(1)申请一个空白的PCB和唯一的进程标识号pid(2)为新进程分配除CPU以外的资源,包括内存空间;(3)初始化PCB中的数据项,包括标志信息、状态信息、控制信息等;(4)将新进程的PCB插入系统的就绪队列。2.3习题2.3.1选择最合适的答案1.UNIX操作系统的进程控制块中常驻内存的是()。A.proc结构B.proc结构和核心栈C.ppda区D.proc结构和user结构2.当()时,进程从执行状态转变为就绪状态。A.进程被调度程序选中B.时间片到18C.等待某一事件D.等待的事件发生3.在进程状态转换时,下列()转换是不可能发生的。A.就绪态→运行态B.运行态→就绪态C.运行态→阻塞态D.阻塞态→运行态4.下列各项工作步骤中,()不是创建进程所必需的步骤。A.建立一个PCBB.作业调度程序为进程分配CPUC.为进程分配内存等资源D.将PCB链入进程就绪队列5.下列关于进程的叙述中,正确的是()。A.进程通过进程调度程序而获得CPU。B.优先级是进行进程调度的重要依据,一旦确定不能改变。C.在单CPU系统中,任一时刻都有1个进程处于运行状态。D.进程申请CPU得不到满足时,其状态变为等待状态。6.从资源管理的角度看,进程调度属于()。A.I/O管理B.文件管理C.处理机管理D.存储器管理7.下列有可能导致一进程从运行变为就绪的事件是()。A.一次I/O操作结束B.运行进程需作I/O操作C.运行进程结束D.出现了比现运行进程优先权更高的进程8.一个进程释放一种资源将有可能导致一个或几个进程()。A.由就绪变运行B.由运行变就绪C.由阻塞变运行D.由阻塞变就绪9.一次I/O操作的结束,有可能导致()。A.一个进程由睡眠变就绪B.几个进程由睡眠变就绪C.一个进程由睡眠变运行D.几个进程由睡眠变运行10.当一个进程从CPU上退下来时,它的状态应变为()。A.静止就绪B.活动就绪C.静止睡眠D.活动睡眠11.为使进程由活动就绪变为静止就绪,应利用()原语?A.SUSPENDB.ACTIVEC.BLOCKD.WAKEUP12.在下面的叙述中,不正确的是()。A.一个进程可创建一个或多个线程B.一个线程可创建一个或多个线程C.一个线程可创建一个或多个进程D.一个进程可创建一个或多个进程13.若系统中只有用户级线程,则处理机调度单位是()。A.线程B.进程C.程序D.作业14.一个进程是()。A.由协处理机执行的一个程序B.一个独立的程序+数据集19C.PCB结构与程序和数据的组合D.一个独立的程序15.下列几种关于进程的叙述,()最不符合操作系统对进程的理解?A.进程是在多程序并行环境中的完整的程序。B.进程可以由程序、数据和进程控制块描述。C.线程是一种特殊的进程。D.进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。16.在下面的叙述中正确的是()。A.线程是比进程更小的能独立运行的基本单位。B.引入线程可提高程序并发执行的程度,可进一步提高系统效率。C.线程的引入增加了程序执行时的时空开销。D.一个进程一定包含多个线程。17.下面关于线程的叙述中,正确的是()。A.不论是系统支持线程还是用户级线程,其切换都需要内核的支持。B.线程是资源的分配单位,进程是调度和分配的单位。C.不管系统中是否有线程,进程都是拥有资源的独立单位。D.在引入线程的系统中,进程仍是资源分配和调度分派的基本单位。18.在下面的叙述中,正确的是()。A.引入线程后,处理机只在线程间切换。B.引入线程后,处理机仍在进程间切换。C.线程的切换,不会引起进程的切换。D.线程的切换,可能引起进程的切换。19.进程的控制信息和描述信息存放在()。A.JCBB.PCBC.AFTD.SFT20.进程依靠()从阻塞状态过渡到就绪状态。A.程序员的命令B.系统服务C.等待下一个时间片到来D.“合作”进程的唤醒21.在WINDOWSNT中()可以处于就绪状态。A.进程B.线程C.程序D.作业22.只作用于一个进程一次的原语是____________.A.创立B.解挂C.阻塞D.挂起23.在UNIX系统中,处于()状态的进程最容易被执行。A.辅存睡眠B.内存睡眠C.内存就绪D.辅存就绪24.从执行状态挂起的进程解除挂起时进入()状态。20A.就绪B.执行C.阻塞D.挂起25.一个进程执行过程中不能可能对应()。A.一个PCBB.一个JCBC.多个PCBD.