现代操作系统课后习题答案

更新时间:2024-05-28 06:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第二章 进程管理

第一部分 教材习题(P81)

3、为什么程序并发执行会产生间断性特征?(P36)

4、程序并发执行,为何会失去封闭性和可再现性?(P37)

【解】程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行已失去了封闭性。同时由于失去了封闭性,也将导致其再失去可再现性。程序在并发执行时,由于失去了封闭性,程序经过多次执行后,其计算机结果已与并发程序的执行速度有关,从而使程序的执行失去了可再现性。

5、在操作系统中为什么要引入进程概念?(P37)它会产生什么样的影响? 【解】

在操作系统中引入进程的概念,是为了实现多个程序的并发执行。传统的程序不能与其他程序并发执行,只有在为之创建进程后,才能与其他程序(进程)并发执行。这是因为并发执行的程序(即进程)是“停停走走”地执行,只有在为它创建进程后,在它停下时,方能将其现场信息保存在它的PCB中,待下次被调度执行是,再从PCB中恢复CPU现场并继续执行,而传统的程序却无法满足上述要求。

建立进程所带来的好处是使多个程序能并发执行,这极大地提高了资源利用率和系统吞吐量。但管理进程也需付出一定的代价,包括进程控制块及协调各运行机构所占用的内存空间开销,以及为进行进程间的切换、同步及通信等所付出的时间开销。 6、试从动态性、并发性和独立性上比较进程和程序?(P37) 【解】

(1)动态性:进程既然是进程实体的执行过程,因此,动态性是进程最基本的特性。动态性还表现为:“它由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤消而消亡”。可见,进程有一定的生命期。而程序只是一组有序指令的集合,并存放在某种介质上,本身并无运动的含义,因此,程序是个静态实体。

(2)并发性:所谓进程的并发,指的是多个进程实体,同存于内存中,能在一段时间内同时运行。并发性是进程的重要特征,同时也成为OS的重要特征。引入进程的目的也正是为了使其程序能和其它进程的程序并发执行,而程序是无法并发执行的。

(3)独立性:进程实体是一个能独立运行的基本单位,也是系统中独立获得资源和独立调度的基本单位。凡未建立进程的程序,都不能作为一个独立的单位参加运行。

试比较进程与程序的异同。

【解】进程和程序是紧密相关而又完全不同的两个概念。

(1)每个进程实体中包含了程序段和数据段这两个部分,因此说进程与程序是紧密相关的。但从结构上看,进程实体中除了程序段和数据段外,还必须包含一个数据结构,即PCB。 (2)进程是程序的一次执行过程,因此是动态的;动态性还表现在进程由创建而产生、由调度而执行、由撤消而消亡,即它具有一定的生命期。而程序则只是一组指令的有序集合,并可

第 1 页 共 33 页

永久地存放在某种介质上,其本身不具有运动的含义,因此是静态的。

(3)多个进程实体可同时存放在内存中并发地执行,其实这正是引入进程的目的。程序(在没有为它创建进程时)的并发执行具有不可再现性,因此程序不能正确地并发执行。

(4)进程是一个能够独立运行、独立分配资源和独立接受调度的基本单位。程序(在没有为它创建进程时)因其不具有PCB,所以它是不可能在多道程序环境下独立运行的。

(5)进程与程序不一一对应。同一个程序的多次运行,将形成多个不同的进程;同一个程序的一次执行也可以产生多个进程;一个进程在其生命期的不同时候也可以执行不同的程序。

7、试说明PCB的作用?为什么说PCB是进程存在的惟一标志?(P41)

【解】PCB是进程实体的一部分,是OS中最重要的记录型数据结构。它记录了OS所需的、用于描述进程情况及控制进程运行所需的全部信息。PCB的作用,是使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。

在进程的整个生命期中,系统总是通过PCB对进程进行控制,也就是说,系统是根据进程的PCB感知到该进程的存在的,所以说,PCB是进程存在的标志。

8、试说明进程在三个基本状态之间转换的典型原因?(P38) 【解】

(1)处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程就由就绪状态变为执行状态

(2)正在执行的进程因发生某事件而无法执行,如暂时无法取得所需资源,则由执行状态转变为阻塞状态。

(3)正在执行的进程,如因时间片用完或被高优先级的进程抢占处理机而被暂停执行,该进程便由执行转变为就绪状态。

第 2 页 共 33 页

某系统的进程状态转换图如图所示。

(1)说明引起各种状态转换的典型事件。

(2)分析下述状态转换是否可立即引起其他的状态转换:1,2,3,4。

执行 1 2 就绪 4 阻塞 3

【解】

(1)引起各种状态转换的典型事件如表所示。 状态转换 引起转换的典型事件 转换1 CPU调度 转换2 执行进程的时间片用完,或被其他优先权更高的进程抢占CPU 转换3 等待某种事件(如I/O的完成,或被他人占用的临界资源变为可用状态 转换4 进程所等待的事件发生(如I/O完成,或所等待的临界资源变为可用状态) (2)状态转换1不会立即引起其他状态转换。 状态转换2必然立即引发状态转换1:状态转换2发生后,进程调度程序必然要选出一个新的就绪进程投入运行,该新进程可能是其他进程,也可能是刚从执行状态转换成就绪状态的那个进程。

状态转换3可能立即引发状态转换1:状态转换3发生后,若就绪队列非空,则进程调度程序将选出一个就绪进程投入执行。 状态转换4可能引发状态转换1:状态转换4发生后,若CPU空闲,并且没有其他进程竞争CPU,则该进程将被立即调度。

另外,状态转换4还可能同时引发状态转换1和2:若系统采用抢占调度方式,而新就绪的进程具备抢占CPU的条件(如其优先权很高),则它可立即得到CPU转换成执行状态,而原来正在执行的进程则转换成就绪状态。

某系统的进程状态变迁图,请说明:

执行 2 1 3 就绪 4 阻塞

第 3 页 共 33 页

(1) 引起各种状态转换的典型事件有哪些? (2) 当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程

作一次状态转换。在什么情况下,当一个进程发生转换3时能立即引起另一个进程发生转换1?

(3) 试说明是否会发生下述因果转换:

a) 2?1 b) 3?2 c) 4?1 解:

(1) 当进程调度程序从就绪队列中选取一个进程投入运行时引起转换1;正在执行的进程如

因时间片用完而被暂停执行就会引起转换2;正在执行的进程因等待的事件尚未发生而无法执行(如进程请求完成I/O)则会引起转换3;当进程等待的事件发生时(如I/O完成)则会引起转换4。

(2) 如果就绪队列非空,则一个进程的转换3会立即引起另一个进程的转换1。这是因为一

个进程发生转换3意味着正在执行的进程由执行状态变为阻塞状态,这时处理机空闲,进程调度程序必然会从就绪队列中选取一个进程并将它投入运行,因此只要就绪队列非空,一个进程的转换3能立即引起另一个进程的转换1。 (3) 所谓因果转换指的是有两个转换,一个转换的发生会引起另一个转换的发生,前一个转

换称为因,后一个转换称为果,这两个转换称为因果转换。当然这种因果关系并不是什么时候都能发生,而是在一定条件下才会发生。

a) 2?1:当某进程发生转换2时,就必然引起另一进程的转换1。因为当发生转换2时,

正在执行的进程从执行状态变为就绪状态,进程调度程序必然会从就绪队列中选取一个进程投入运行,即发生转换1。

b) 3?2:某个进程的转换3决不可能引起另一进程发生转换2。这是因为当前执行进程

从执行状态变为阻塞状态,不可能又从执行状态变为就绪状态。

c) 4?1:当处理机空闲且就绪队列为空时,某一进程发生转换4,就意味着有一个进程

从阻塞状态变为就绪状态,因而调度程序就会将就绪队列中的此进程投入运行。

9、为什么要引入挂起状态?(P39)该状态具有哪些性质?

10、在进行进程切换时,所要保存的处理机状态信息主要有那些?(P42)

【解】保存的处理机状态信息主要由处理机中的各种寄存器内容组成。这些寄存器包括:通用寄存器,指令寄存器,程序状态字PSW,用户栈指针。 11、试说明引起进程创建的主要事件。(P44) 【解】

(1)用户登录 在分时系统中,用户在终端键入登录命令后,若是合法用户,系统将为该终端用户建立一个进程,并插入到就绪队列中。

(2)作业调度 批处理程序中,作业调度程序按一定的算法调度到某个作业时,就将该作业装入内存,为它分配必要的资源,并立即为其创建进程,插入就绪队列中。 (3)提供服务 运行中用户程序提出某种请求,系统专门创建一个进程来提供用户所需服务。 (4)应用请求 应用进程自己创建一个进程,使自己和新进程以并发运行方式完成特定任务。

12、试说明引起进程被撤消的主要事件。

13、在创建一个进程时所要完成的主要工作是什么?(P44) 【解】需完成的主要工作有:

第 4 页 共 33 页

(1)申请空白PCB ; (2)为新进程分配资源;

(3)初始化PCB ,其中包括:

? 初始化标识符信息。将系统分配的标识符、父进程标识符填入新PCB中;

? 初始化处理机状态信息。使程序计数器指向程序入口地址,使栈指针指向栈顶; ? 初始化处理机控制信息。将进程状态设置为就绪或静止就绪,对于优先级通常设置为

最低,除非用户提出高优先级要求。

(4)将新进程插入就绪队列。

14、在撤消一个进程时所要完成的主要工作是什么?

15、试说明引起进程阻塞或被唤醒的主要事件是什么?(P46) 16、进程在运行时,存在哪两种形式的制约?并举例说明之。

17、为什么进程在进入临界区之前,应先执行“进入区”代码,在退出临界区后又执行“退出区”代码?(P50)

【解】为了保证诸进程互斥进入自己的临界区,便可实现它们对临界资源的互斥访问。为此,每个进程在进入临界区之前应先对欲访问的临界资源进行检查,看它是否正被访问。如果此刻临界资源没被访问,则该进程便可进入临界区,对该资源进行访问,并设置它正被访问的标志;如果此刻该临界资源正被某进程访问,则本进程不能进入临界区。因此,必须在临界区前增加一段用于上述检查的代码,把这段代码称为进入区。相应地,在临界区后面也要加上一段称为退出区的代码,用于将临界区正被访问的标志恢复为未被访问标志。

18、同步机构应遵循哪些基本准则?为什么?(P50) 【解】同步机构应遵循的基本准则有: (1)空闲让进

无进程处于临界区时,相应的临界资源处于空闲状态,因而可允许一个请求进入临界区的进程立即进入自己的临界区,以有效利用临界资源。 (2)忙则等待

当已有进程进入自己的临界区时,意味着相应的临界资源正被访问,因而所有其他试图进入临界区的进程必须等待,以保证诸进程互斥地访问临界资源。 (3)有限等待

对要求访问临界资源的进程,应保证该进程能在有限时间内进入自己的临界区,以免陷入“死等”状态。 (4)让权等待

当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”。 19、试从物理概念上来说明记录型信号量wait和signal操作?(P51)

【解】在记录型信号量机制中,S.value的初值表示系统中某类资源的数目,因而又称资源信号量,每次的wait操作,意味着进程请求一个单位的资源,因此描述为S.value:=S.value-1;当S.value<0时,表示资源已分配完毕,因而进程调用block原语,进行自我阻塞,放弃处理机,并插入到信号量链表S.L中。可见,该机制遵循了让权等待准则。此时S.value的绝对值表示在该信号量链表中已阻塞进程的数目。每次signal操作,表示执行进程释放一个单位资源,故S.value:=S.value+1操作表示资源数目加1。若加1后仍是S.value<=0则表示该信号量链表中,仍有等待该资源的进程被阻塞,故还要调用wakeup原语,将S.L链表中的第一个等待进程唤醒。如果S.value的初值为1,表示只允许一个进程访问临界资源,此时的信号量转化为互斥信号量。

第 5 页 共 33 页

20、你认为整型信号量机制是否完全遵循了同步机构的四条准则?(P52)

【解】在整型信号量机制中的wait操作,只要是信号量S<=0,就会不断地测试,因此,该机制并未遵循“让权等待”的准则,而是使该进程处于“忙等”的状态。

21、如何利用信号量机制来实现多个进程对临界资源的互斥访问?并举例说明之。 22、试写出相应的程序来描述图2-17所示的前趋图。

S11 S21 S31 S2 S11 S3 S41 S51 S61 S41 S51 S61 S71 S71 S81

【解】(1)

Var a,b,c,d,e,f,g,h; semaphore:=0,0,0,0,0,0,0,0; begin

parbegin

begin S1;signal(a);signal(b);end;

begin wait(a);S2;signal(c);signal(d);end; begin wait(b);S3;signal(e); end; begin wait(c);S4;signal(f);end; begin wait(d);S5;signal(g);end; begin wait(e);S6;singal(h);end;

begin wait(f);wait(g); wait(h); S7;end; parend end (2)

Var a,b,c,d,e,f,g,h,i,j; semaphore:=0,0,0,0,0,0,0,0,0,0,0; begin

parbegin

begin S1;signal(a);signal(b);end;

begin wait(a);S2;signal(c);signal(d);end; begin wait(b);S3;signal(e);signal(f);end; begin wait(c);S4;signal(g);end; begin wait(d);S5;signal(h);end; begin wait(e);S6;singal(i);end;

第 6 页 共 33 页

begin wait(f);S7;signal(j);end;

begin wait(g); wait(h);wait(i);wait(j); S8;end; parend end

23、在生产者—消费者问题中,如果缺少了signal(full)或 signal(empty),对执行结果会有什么影响?

【解】在生产者—消费者问题中,如果缺少了signal(full) ,那么消费者会认为生产者没有生产而阻塞,而生产者会不断生产,直到empty为0后阻塞,然后两个进程陷入“死等”状态。

如果缺少了signal(empty)开始两进程可同步运行。但当empty为0 时生产者会因此而阻塞,然后消费者进程继续运行直到full也为0阻塞,然后两个进程陷入“死等”状态。 24、在生产者—消费者问题中,如果将两个wait操作即wait(full)和wait(mutex)互换位置,或者将signal(mutex)与signal(full)互换位置,结果会如何?

【解】如果将wait(full)和wait(mutex)互换位置,则如果consumer先进入临界区,就会一直等待full,但由于没有signal(mutex) ,producer将无法进入临界区而等待,则两个进程相互等待,陷入死锁。

如果signal(full)与signal (mutex)互换位置,则会使full的值不再是等待的consumer进程数目。

var mutex,empty,full:semaphore:=1,n,0;

buffer:array[0,?,n-1]of item; in,out:integer:=0,0; Begin

parbegin

producer: begin repeat

??

producer an item in nextp; ??

wait(mutex);//前2句颠倒则死锁 wait(empty);

buffer(in):=nextp; in:=(in+1)mod n;

signal(full); //后2句颠倒不死锁 signal(mutex); until false; end consumer: begin

repeat

wait(full); wait(mutex);

nextc:=buffer(out); out:=(out+1)mod n; signal(mutex); signal(empty);

第 7 页 共 33 页

consume the item in nextc; until false; end Parend end

由于V操作是释放资源,因此对调V操作的次序无关紧要。 而对调P操作的次序则可能导致死锁。 这时因为对调P操作后,有可能出现这样一种特殊情况:在某一时刻缓冲池中已装满了产品且缓冲池中无进程工作(这时信号量full的值为n,信号量empty的值为0,信号量mutex的值为1),若系统此时调度生产者进程运行,生产者进程又生产了一个产品,它执行P(mutex)并顺利进入临界区(这时mutex值为0),随后它执行p(empty)时因没有空闲缓冲区而受阻等待,等待消费者进程进入缓冲池取走产品以释放出缓冲区;

消费者进程执行p(full)后再执行p(mutex)时,因缓冲池被生产者进程占据而无法进入。 这样就形成了生产者进程在占有临界资源的情况下,等待消费者进程取走产品,而消费者进程又无法进入临界区取走产品的僵局,此时两进程陷入死锁。

25、我们为某临界资源设置一把锁W,当W=1时表示关锁;当W=0时表示锁已打开。试写出开锁和关锁原语,并利用它们去实现互斥。 【解】我们采用一个变量W作为“锁”,代表某个临界资源的状态,W=0(false,锁已打开)表示该资源未用,W=1(true,关锁)表示该资源正被使用。同时,用一段程序作为开锁原语,用另一段程序作为关锁原语,要进入临界区的进程首先要执行关锁原语,当它退出临界区时,要执行开锁原语。从而实现对临界区的互斥控制。两个原语的作用是:

加锁原语lock

测试W是否为0 若W=0,让W=1 若W=1,继续测试

开锁原语unlock

使W=0

可见,加锁原语首先要判断临界区中有无进程,若W=0,表示无进程进入临界区,它可以马上进入,并立即将W置为1,同时禁止其他进程进入。若W=1,表示已经有进程进入,它只得等待。这种机构简单方便,但存在CPU的时间浪费,因为等待进入临界区的进程将不断循环测试W,等待W变为0。

26、试修改下面生产者-消费者问题解法中的错误:

producer: begin repeat ?

produce an item in nextp; wait(mutex); wait(full);

buffer(in):=nextp; signal(mutex); until false; end

第 8 页 共 33 页

consumer: begin repeat

wait(mutex); wait(empty);

nextc:=buffer(out); out:=out+1; signal(mutex);

consume item in nextc; until false; end

修改为: producer:

begin repeat

produce an item in nextp; wait (empty); wait (mutex);

buffer (in): =nextp; in:=(in+1) mod n; signal (mutex); signal (full) until false; end

consumer: begin

repeat

wait (full);

wait(mutex);

nextc:=buffer(out); out:=(out+1) mod n; out:=out+1; signal(mutex);

signal(empty);

consume item in nextc; until false end

27、试利用记录型信号量机制写出一个不会出现死锁的哲学家进餐问题的算法。

第 9 页 共 33 页

28、在测量控制系统中的数据采集任务时,把所采集的数据送往一单缓冲区;计算任务从该单缓冲区中取出数据进行计算。试写出利用信号量机制实现两任务共享单缓冲区的同步算法。 【解】算法如下:

Var mutex, empty, full: semaphore: =1,1,0; buffer: item; begin

parbegin

Receive: begin

repeat

Wait(empty); Wait(mutex); buffer: =nextp; Signal(mutex); Signal(full); until false end

Get: begin repeat

Wait (full); Wait (mutex); nextp: =buffer; Signal (mutex); Signal (empty); until false end parend end

第 10 页 共 33 页

第二部分 选择题

1.在进程管理中,当 C 时,进程从阻塞状态变为就绪状态。 A.进程被进程调度程序选中 B.等待某一事件 C.等待的事件发生 D.时间片用完

2.分配到必要的资源并获得处理机时的进程状态是 B 。 A.就绪状态 B.执行状态 C.阻塞状态 D.撤消状态 3.P、V操作是 A 。

A.两条低级进程通信原语 B.两组不同的机器指令 C.两条系统调用命令 D.两条高级进程通信原语

4.设系统中有n(n>2)个进程,且当前不在执行进程调度程序,试考虑下述4种情况, 不可能发生的情况是 A 。

A.没有运行进程,有2个就绪进程,n个进程处于等待状态。 B.有1个运行进程,没有就绪进程,n-1个进程处于等待状态。 C.有1个运行进程,有1个就绪进程,n-2个进程处理等待状态。 D.有1个运行进程,n-1个就绪进程,没有进程处于等待状态。

5.若P、V操作的信号量S初值为2,当前值为-1,则表示有 B 等待进程。 A. 0个 B. 1个 C. 2个 D. 3个

6.进程的三个基本状态在一定条件下可以相互转化,进程由就绪状态变为运行状态的条件是 D 。

A.时间片用完 B.等待某事件发生 C.等待的某事件已发生 D.被进程调度程序选中

7.进程的三个基本状态在一定条件下可以相互转化,进程由运行状态变为阻塞状态的条件是 B 。

A.时间片用完 B.等待某事件发生 C.等待的某事件已发生 D.被进程调度程序选中 8.下列的进程状态变化中, C 变化是不可能发生的。

A.运行?就绪 B.运行?就绪 C.等待?运行 D.等待?就绪 9.一个运行的进程用完了分配给它的时间片后,它的状态变为 A 。

A.就绪 B.等待 C.运行 D.由用户自己确定 10.用V操作唤醒一个等待进程时,被唤醒进程的状态变为 B 。 A.等待 B.就绪 C.运行 D.完成 11.操作系统通过 B 对进程进行管理。

A. JCB B. PCB C. DCT D. CHCT 12.用P、V操作可以解决 A 互斥问题。

A. 一切 B. 某些 C. 正确 D. 错误 13.一个进程被唤醒意味着 D 。

A. 该进程重新占有了CPU B. 它的优先权变为最大 C. 其PCB移至等待队列队首 D. 进程变为就绪状态 14.多道程序环境下,操作系统分配资源以 C 为基本单位。

A. 程序 B. 指令 C. 进程 D. 作业 15. 从静态的角度看,进程是由(A)、(B)、(C)三部分组成的,其中(C)是进程存在的唯一标志。当几个进程共享(A)时,(A)应当是可重入代码。 A:程序段;

第 16 页 共 33 页

B:数据段; C:PCB;

16. 进程的三个基本状态是(A)、(B)、(C)。由(A)到(B)是由进程调度所引起的;由(B)到(C)是正在执行的进程发生了某事件,使之无法继续执行而引起的。 A:就绪; B:执行; C:阻塞;

17. 正在等待他人释放临界资源的进程处于(A)状态,已分配到除CPU外的所有资源的进程处于(B)状态,已获得CPU的进程处于(C)状态。 A:阻塞; B:就绪; C:执行;

18. 下列进程状态转换中,绝对不可能发生的状态转换是(A);一般不会发生的状态转换是(B)。 A:就绪?阻塞; B:阻塞?执行;

19. 在一个单处理机系统中,存在5个进程,最多可有(A)个进程处于就绪队列;如果这5个进程中有一个系统进程IDLE(也叫空转进程,因为它只是不断循环地执行空语句),则最多可有(B)个进程处于阻塞状态。 A,B:(1)5;(2)4;(3)3;(4)2;(5)1;(6)0。

20. 正在执行的进程由于其时间片用完被暂停执行,此时进程应从执行状态变为(A)状态;处于静止阻塞状态的进程,在进程等待的事件出现后,应变为(B)状态;若进程正处于执行状态时,因终端的请求而暂停下来以便研究其运行情况,这时进程应转变为(C)状态,若进程已处于阻塞状态;则此时应转变为(D)状态。 A:(1)静止阻塞;(2)活动阻塞;(3)静止就绪;(4)活动就绪;(5)执行。 B:(1)静止阻塞;(2)活动阻塞;(3)静止就绪;(4)活动就绪;(5)执行。 C:(1)静止阻塞;(2)活动阻塞;(3)静止就绪;(4)活动就绪;(5)执行。 D:(1)静止阻塞;(2)活动阻塞;(3)静止就绪;(4)活动就绪;(5)执行。

21. 为使进程由活动就绪转变为静止就绪,应利用(A)原语;为使进程由执行状态转变为阻塞状态,应利用(B)原语;为使进程由静止就绪变为活动就绪,应利用(C)原语;从阻塞状态变为就绪状态应利用(D)原语。 A:(1)create;(2)suspend;(3)active;(4)block;(5)wakeup。 B:(1)create;(2)suspend;(3)active;(4)block;(5)wakeup。 C:(1)create;(2)suspend;(3)active;(4)block;(5)wakeup。 D:(1)create;(2)suspend;(3)active;(4)block;(5)wakeup。 22. 在分时系统中,导致进程创建的典型事件是(A);在批处理系统中,导致进程创建的典型事件是(B);由系统专门为运行中的应用进程创建新进程的事件是(C)。在创建进程时,(D)不是创建所必需的步骤。 A:(1)用户注册;(2)用户登录;(3)用户记账;(4)用户通信。 B:(1)作业录入;(2)作业调度;(3)进程调度;(4)中级调度。 C:(1)分配资源;(2)进行通信;(3)共享资源;(4)提供服务。 D:(1)为进程建立PCB;(2)为进程分配内存等资源;(3)为进程分配CPU;(4)将进程插入就绪队列。

23. 从下面对临界区的论述中,选出一条正确的论述。 (1)临界区是指进程中用于实现进程互斥的那段代码。

第 17 页 共 33 页

(2)临界区是指进程中用于实现进程同步的那段代码。 (3)临界区是指进程中用于实现进程通信的那段代码。 (4)临界区是指进程中用于访问共享资源的那段代码。 (5)临界区是指进程中访问临界资源的那段代码。 24. 进程A和B共享同一临界资源,并且进程A正处于对应的临界区内执行。请从下列描述中选择一条正确的描述。C

A. 进程A的执行不能被中断,即临界区的代码具有原子性。

B. 进程A的执行能被中断,但中断A后,不能将CPU调度给进程B。

C. 进程A的执行能被中断,而且只要B进程就绪,就可以将CPU调度给进程B。 D. 进程A的执行能被中断,而且只要B进程就绪,就必定将CPU调度给进程B。 25. (A)是一种只能由wait和signal操作所改变的整型变量,(A)可用于实现进程的(B)和(C),(B)是排他性访问临界资源。 A:(1)控制变量;(2)锁;(3)整型信号量;(4)记录型信号量。 B:(1)同步;(2)通信;(3)调度;(4)互斥。 C:(1)同步;(2)通信;(3)调度;(4)互斥。

26. 对于记录型信号量,在执行一次wait操作时,信号量的值应当(A),当其值为(B)时,进程阻塞。在执行signal操作时,信号量的值应当为(C),当其值为(D)时,应唤醒阻塞队列中的进程。 A:(1)不变;(2)加1;(3)减1;(4)加指定数值;(5)减指定数值。 B:(1)大于0;(2)小于0;(3)大于等于0;(4)小于等于0. C:(1)不变;(2)加1;(3)减1;(4)加指定数值;(5)减指定数值。 D:(1)大于0;(2)小于0;(3)大于等于0;(4)小于等于0. 27. 用信号量S实现对系统中4台打印机的互斥使用,S.value的初值应设置为(A),若S.value的初值为-1,则表示S.L队列中有(B)个等待进程。 A:(1)1;(2)0;(3)-1;(4)4;(5)-4 B:(1)1;(2)2;(3)3;(4)4;(5)5;(6)6;(7)0。

28. 设有10个进程共享一个互斥段,如果最多允许有1个进程进入互斥段,则所采用的互斥信号量初值应设置为(A),而该信号量的取值范围为(B);如果最多允许有3个进程同时进入互斥段,则所采用的互斥信号量初值应设置为(C)。 A:(1)10;(2);3;(3)1;(4)0。 B:(1)0~1;(2)-1~0;(3)1~-9;(4)0~-9。 C:(1)10;(2);3;(3)1;(4)0。

29. 在生产者-消费者问题中,应设置互斥信号量mutex、资源信号量full和empty。它们的初值应分别为(A)、(B)、(C)。 A:(1)0;(2)1;(3)-1;(4)-n;(5)+n。 B:(1)0;(2)1;(3)-1;(4)-n;(5)+n。 C:(1)0;(2)1;(3)-1;(4)-n;(5)+n。

30. 对生产者-消费者问题的算法描述如下,请选择正确的答案编号填入方框中。

第 18 页 共 33 页

Producer: begin Repeat (A); (B);

Buffer(in):=m; In:=(in+1)mod n; (C); (D);

Until false End

Consumer: begin Repeat (E); (B);

M:=buffer(out); Out:=(out+1)mod n; (C); (F);

Until false end

A: (1)wait(mutex); (2)signal(mutex); (3)wait(empty); (4)signal(full); (5)wait(full); (6)signal(empty)。

B: (1)wait(mutex); (2)signal(mutex); (3)wait(empty); (4)signal(full); (5)wait(full); (6)signal(empty)。

C: (1)wait(mutex); (2)signal(mutex); (3)wait(empty); (4)signal(full); (5)wait(full); (6)signal(empty)。

D: (1)wait(mutex); (2)signal(mutex); (3)wait(empty); (4)signal(full); (5)wait(full); (6)signal(empty)。

E: (1)wait(mutex); (2)signal(mutex); (3)wait(empty); (4)signal(full); (5)wait(full); (6)signal(empty)。

F: (1)wait(mutex); (2)signal(mutex); (3)wait(empty); (4)signal(full); (5)wait(full); (6)signal(empty)。 31. 试选择(A)~(D),以便能正确地描述图2.12所示的前趋关系。 Var a,b,c: semaphore:=0,0,0; Begin

S1 S2 Parbegin

Begin S1; (A); end;

b Begin S2; (B); end; a Begin

S3 Wait(a); wait(b); S3; (C); End c Begin (D); S4 end

Parend

S4 End

第 19 页 共 33 页

A: (1)signal(a); (2)signal(b); (3)wait(c); (4)signal(c)。 B: (1)signal(a); (2)signal(b); (3)wait(c); (4)signal(c)。 C: (1)signal(a); (2)signal(b); (3)wait(c); (4)signal(c)。 D: (1)signal(a); (2)signal(b); (3)wait(c); (4)signal(c)。

32. 有两个程序:A程序按顺序使用CPU10秒、设备甲5秒、CPU5秒、设备乙10秒、CPU10秒;B程序按顺序使用设备甲10秒、CPU10秒、设备乙5秒、CPU5秒、设备乙10秒。在顺序环境下,执行上述程序,CPU的利用率约为(A)。若允许它们采用非抢占方式并发执行,并且不考虑切换等开销,则CPU的利用率约为(B)。 A(1)30%;(2)40%;(3)50%;(4)60%;(5)70%;(6)80%;(7)90%。 B(1)30%;(2)40%;(3)50%;(4)60%;(5)70%;(6)80%;(7)90%。 33. 从下面的叙述中选出一条正确的叙述:

(1)操作系统的一个重要概念是进程,不同的进程所执行的代码也不同。 (2)操作系统通过PCB来控制和管理进程,用户进程可从PCB中读出与本身运行状态相关的信息。

(3)当进程由执行状态变为就绪状态时,CPU现场信息必须被保存在PCB中。 (4)当进程申请CPU得不到满足时,它将处于阻塞状态。

(5)进程是可与其他程序并发执行的程序在一个数据集合上的运行过程,所以程序段是进程存在的唯一标志。

34. 从下面的叙述中选出4条正确的叙述:

(1)一个进程的状态发生变化总会引起其它一些进程的状态发生变化。 (2)进程被挂起(suspend)后,状态变为阻塞状态。 (3)信号量的初值不能为负数。

(4)线程是CPU调度的基本单位,但不是资源分配的基本单位。

(5)在进程对应的代码中使用wait、signal操作后,可以防止系统发生死锁。 (6)管程每次只允许一个进程进入。

(7)wait、signal操作可以解决一切互斥问题。 (8)程序的顺序执行具有不可再现性。

35. 在引入线程的操作系统中,资源分配和调度的基本单位是(A),CPU调度和分配的基本单位是(B)。 A:(1)程序;(2)进程;(3)线程;(4)作业。 B:(1)程序;(2)进程;(3)线程;(4)作业。 36. 在三种基本类型的操作系统中,都设置了(A),在批处理系统中还应设置(B);在分时系统中除了(A)以外,通常还设置了(C),在多处理机系统中则还需设置(D)。 A:(1)剥夺调度;(2)作业调度;(3)进程调度;(4)中级调度;(5)多处理机调度。 B:(1)剥夺调度;(2)作业调度;(3)进程调度;(4)中级调度;(5)多处理机调度。 C:(1)剥夺调度;(2)作业调度;(3)进程调度;(4)中级调度;(5)多处理机调度。 D:(1)剥夺调度;(2)作业调度;(3)进程调度;(4)中级调度;(5)多处理机调度。

第 20 页 共 33 页

S1() {

?

v(b2); v(b3); } S2() {

p(b2);

?

v(b4); //v(b42) } S3() {

p(b3);

?

v(b4); //v(b43) } S4()

{//因为在S2及S3完成时均对b4做了v操作,因此这里要用两个p操作 p(b4);//p(b42) p(b4);//p(b43)

? }

5. 桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。

解:设置3个信号量S、SO、SA,信号量S表示盘子是否为空,其初值为1;信号量SO表示盘中是否有桔子,其初值为0;信号量SA表示盘中是否有苹果,其初值为0。 同步描述: int S=1; int SA=0; int SO=0; main() {

cobegin

father(); son();

daughter(); coend }

第 26 页 共 33 页

father() {

while(1)

{

p(S);//盘子是否空 将水果放入盘中;

if(放入的是桔子)v(SO);//变形

else v(Sa) //很少有学生如此做!而这却是本题的关键 } } son() {

while(1)

{

p(SO);//盘子中有无桔子 从盘中取出桔子; v(S); 吃桔子; } }

daughter() {

while(1)

{

p(SA);//盘子中有无苹果 从盘中取出苹果; v(S); 吃苹果; } }

6. 在单处理机的分时系统中,分配给进程P的时间片用完后,系统进行切换,结果调度到的仍然是进程P。有可能出现上述情形吗?如果可能请说明理由。

解:有可能出现上述情况。例如,若在进程P时间片用完后,被迫回到就绪队列时,就绪队列为空,这样进程P就是就绪队列中唯一的一个进程,于是调度程序选中的进程必然是进程P;又如在按优先级调度的系统中,就绪队列按进程优先级排列,在进程P时间片用完之后回到就绪队列时,若其优先级高于当前队列中的其他进程,则它将排在就绪队列之首,从而再次被调度程序选中并投入运行。

第 27 页 共 33 页

7. 哲学家甲请哲学家乙、丙、丁到某处讨论问题,约定全体到齐后开始讨论问题;在讨论的间隙4位哲学家进餐,每人进餐时都需使用刀、叉各一把,餐桌上的布置如图。请用信号量及P、V操作说明这4位哲学家的同步、互斥过程。 解:在本题中,应设置4个信号量fork1、fork2、knife1、knife2,其初值均为1,分别表示资源叉1、叉2、刀1、刀2是否可用。同步描述如下: int fork1=1; int fork2=1; int knife1=1; int knife2=1; main() {

cobegin Pa(); Pb(); Pc(); Pd(); Coend } Pa() {

while(1) {

p(knife1); p(fork1); 进餐; v(knife1); v(fork1); 讨论问题; } } Pb() {

while(1) {

p(knife2); p(fork1); 进餐; v(knife2); v(fork1); 讨论问题; } } Pc() {

第 28 页 共 33 页

while(1) {

p(knife2); p(fork2); 进餐; v(knife2); v(fork2); 讨论问题; } } Pd() {

while(1) {

p(knife1); p(fork2); 进餐; v(knife1); v(fork2); 讨论问题; } }

8. 请用信号量实现对某数据库的读者-写者互斥。 要求:(1)读者与写者之间互斥,写者与写者之间互斥。 (2)读者之间不互斥。

解:本题是读者-写者问题。在本题中,允许读进程同时读数据库,但写进程正在写数据库时不允许其他进程读该数据库,也不允许其他进程写该数据库。为了解决读、写进程之间的同步,应该设置2个信号量和一个共享变量:读互斥信号量rmutex,用于使读进程互斥地访问共享变量count,其初值为1;写互斥信号量wmutex,用于实现写进程与读进程的互斥及写进程与写进程的互斥,其初值为1;共享变量count,用于记录当前正在读数据库的读进程数目,初值为0。其工作过程描述如下: Semaphore rmutex=1; Semaphore wmutex=1; Int count=0; Main() {

Cobegin

Reader(); Writer(); Coend }

Reader()

第 29 页 共 33 页

{

While(true) {

P(rmutex);

If(count==0) p(wmutex); Count ++; V(rmutex); 读数据库; P(rmutex); Count --;

If (count==0) v(wmutex); V(rmutex); } }

Writer() {

While(true) {

P(wmutex); 写数据库;

V(wmutex); } }

注意:正确理解信号量rmutex的意义是理解读者-写者问题的关键。Rmutex是一个互斥信号量,用于使读进程互斥地访问共享变量count。信号量rmutex并不表示读进程的数目,表示读进程数目的是共享变量count。当一个读进程要读数据库时,应将读进程计数count增加1;如果此前(count加1以前)数据库中无读进程,还应对写互斥信号量wmutex做p操作,这样,若数据库中无写进程则通过p操作阻止后续写进程写,若数据库中有写进程,则通过p操作让读进程等待。同理,当一个读进程完成读数据库操作时,应将读进程计数count减少1;如果此时(count减1以后)数据库中已无读进程,还应对写互斥信号量wmutex做v操作,以允许写进程写。

9. 就绪队列中有10个进程,系统将时间片设为200ms,CPU进行进程切换要花费10ms,试问系统开销所占的比率约为多少?

解:因就绪队列中有10个进程,它们以时间片轮转的方式使用CPU,时间片长度为200ms。当一个时间片用完时,调度进程将当前运行进程设置为就绪状态并放入就绪队列尾,再从就绪队列首选择进程投入运行,这一过程(进程切换)要花费时间10ms。因此系统开销所占比率为:10/(200+10)=4.8%

10. 在单CPU和两台输入/输出设备(I1,I2)的多道程序设计环境下,同时投入三个作业Job1、Job2、Job3运行。这三个作业对CPU和输入/输出设备的使用顺序和时间如下所示:

Job1:I2(30ms);CPU(10ms);I1(30ms);CPU(10ms);I2(20ms)

第 30 页 共 33 页

本文来源:https://www.bwwdw.com/article/0i67.html

Top