文档库 最新最全的文档下载
当前位置:文档库 › 计算机操作系统练习题及答案 第三章

计算机操作系统练习题及答案 第三章

单项选择
1. 两个进程合作完成一项任务。在并发执行中,一个进程要等待其合作伙伴发来消息,或建立某个条件后再运行,这种制约性合作关系被称为进程的—A—。
A.同步 B.执行 C.互斥 D.调度
2. 为了进行进程协调,进程之间应当具有一定的联系,这种联系通常采用进程间交换数据的方式进行,这种方式通常称为—C—。
A. 进程互斥 B. 进程同步 C. 进程通信 D. 进程制约
3. 除了因为资源不足,进程竞争资源可能出现死锁外,不适当的—C—也可能产生死锁。
A.进程优先权 B.资源线性分配
C.进程推进顺序 D.分配队列优先权
4. 除了可以采用资源剥夺法解除死锁外,还可以采用—C—方法解除死锁。
A.修改信号量 B.拒绝分配新的资源
C.撤消进程 D.执行并行操作
5. 资源的按序分配策略可以破坏—D—条件。
A. 互斥 B. 请求与保持 C. 不剥夺 D. 环路等待
6. 在—C—的情况下,系统出现死锁。
A. 计算机系统发生了重大故障
B. 有多个阻塞的进程存在
C. 若干个进程因竞争资源而无休止地相互等待他方释放已占有的资源
D. 资源数远小于进程数或进程同时申请的资源数远超过资源总数
7.某系统中有3个进程,都需要同类资源4个,试问该系统不会发生死锁的最少资源数是—B—。
A.9 B.10 C.11 D.12
8. 银行家算法是一种—B—算法。
A. 解除死锁 B.避免死锁 C. 预防死锁 D. 检测死锁
9. 在下列解决死锁的方法中,属于死锁预防策略的是—B—。
A. 银行家算法 B. 资源有序分配
C. 死锁检测法 D. 资源分配图化简法
10. 设有n个进程共用一个相同的程序段(临界区),如果每次最多允许m个进程(m≤n)同时进入临界区,则信号量的初值应为—B—。
A. n B. m C. m-n D. -m
11.死锁定理是用于处理死锁的哪一种方法—C—。
A.预防死锁 B.避免死锁 C.检测死锁 D.解除死锁
12. AND信号量集机制是为了—C—。
A. 信号量的集中使用 B. 解决结果的不可再现性问题
C. 防止系统的不安全性 D. 实现进程的相互制约
13.临界区是指—A—。
A.与共享变量有关的程序段 B.公共数据区
C.系统管理区 D.临时的工作区
14. “死锁”问题的讨论是针对—D—的。
A. 某个进程申请系统中不存在的资源
B. 某进程申请资源数超过了系统拥有的最大资源数
C.硬件故障 D. 多个并发进程竞争独占型资源
15. 下列的信号量操作中,相当于一个可控开关的是—D—


A. Swait(s,d,d) B. Swait(s,1,1)
C. Swait(s,1,0) D. Swait(s,0,0)
16.不是信号量能实现的功能是—D—。
A.进程同步 B.进程互斥
C.执行的前趋关系 D.进程的并发执行
17. 若P、V操作的信号量S初值为2,当前值为-1,则表示有—B—等待进程。
A. 0个 B. 1个 C.2个 D. 3个
18.发生死锁的必要条件有四个,要预防死锁的发生,可以破坏这四个必要条件,但破坏—A—条件是不太现实的。
A.互斥 B.请求和保持 C. 不剥夺 D.环路等待
19. 下面关于检测死锁的叙述错误的是—C—。
A. 检测死锁的方法对系统资源的分配不加限制,只要有则可以分配
B. 检测死锁中系统需要反复检测各进程资源申请和分配情况
C.检测死锁是预防系统进入死锁
D. 检测死锁只能发现死锁,而不能解除死锁

填空
1. 信号量的物理意义是:当前信号量的值大于零时,表示(可用资源的数目);当前信号量的值小于零时,其绝对值表示(因请求该资源而被阻塞的进程数目)。
2. 进程间的高级通信机制可归结为3类,分别是(共享存储器系统)、 (消息传递系统)和(管道通信)。
3. 资源分配中,摒弃请求和保持条件,可以采用(资源原子分配法);摒弃不剥夺条件采用(剥夺方式);摒弃环路等待条件,可采用(资源有序分配法)。
4. 系统处于安全状态则(一定不会)发生死锁,系统处于不安全状态则(有可能)发生死锁。
5. 有m个进程共享同一临界资源,若使用信号量机制实现对临界资源的互斥访问,则信号量值的变化范围是(1~1-m)。

问答


1. a, b两点之间是一段东西向的单行车道,现要设计一个自动管理系统,管理规则如下:当ab之间有车辆在行驶时,同方向的车可以同时驶入ab段,但另一方向的车必须在ab段外等待; 当ab之间无车辆在行驶时,到达a点(或b点)的车辆可以进入ab段,但不能从a点与b点同时驶入;当某方向在ab段行驶的车辆驶出了ab段且暂无车辆进入ab段时,应让另一方向等待的车辆进入ab段行驶。请用信号量为工具,对ab段实现正确管理以保证行驶安全。

答:设置信号量。
共享变量ab表示由a点进入ab段上的车辆数,ab初值为0。
共享变量ba表示由b点进入ab段上的车辆数,ba初值为0。
信号量S1表示a点进入的车辆访问共享变量ab,初值为1;
信号量S2表示b点进入的车辆访问共享变量ba, 初值为1 ;
信号量Sab表示a点、 b点的车辆湖斥进入ab段, 初值为1。
Semaphore S1=1,S2=1,Sab=1
int ab=ba=0;
void Pab()
{ while(1)
{ wait(S1);
if (ab==0)
wait(Sab);
ab=ab+1;
signal(S1);

车辆由a驶向b;
wait(S1);
ab=ab-1;
if (ab==0)
signal(Sab);
signal(S1); }
}

void Pba()
{ while(1)
{ wait(S2);
if (ba==0)
wait(Sab);
ba=ba+1;
signal(S2);
车辆由b驶向a;
wait(S2);
ba=ba-1;
if (ab==0)
signal(Sab);
signal(S2); } }
Main()
{ cobegin{
Pab();
Pba(); } }

2.在公共汽车上,司机与售票员的工作流程分别为,司机:启动车辆→正常运行→到站停车→启动车辆….;售票员:关车门→售票→开车门→关车门….。为保证乘客安全,司机与售票员要密切配合,协调工作。请用信号量来实现司机与售票员之间的同步。
汽车运行中,司机与售票员之间的同步关系为:售票员在关车门之后,向司机发开车信号,司机接到开车信号后启动车辆,汽车运行时售票员售票,到站后司机停车,售票员在停车后开车门让乘客下车。
设置信号量S1,S2,S1表示是否允许司机启动车辆,初值为0 ;S2表示是否允许售票员开车门,初值为0。
答:
Semaphore S1=S2=0;
void Driver()
{ while(1)
{ wait(S1);
启动车辆;
正常运行;
到站停车;
signal(S2);}}
void Busman()
{ while(1)
{ 关车门;
signal(S1);
售票;
wait(S2);
开车门;} }
Main()
{ cobegin{
Driver();
Busman();} }

3. 产生死锁的四个必要条件是什么?
答:产生死锁的四个必要条件分别如下:
[1] 互斥条件。进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一个进程所占有。
[2] 请求与保持条件。进程因请求资源而阻塞时,对已经获得的资源保持不放。
[3] 不可剥夺条件。进程已经获得的资源,在没有使用完毕之前,不能被剥夺。
[4] 环路等待条件。发生死锁时,必然存在一个“进程——资源”的环形链。
4. 为什么采用有序资源分配法不会产生死锁?
假设系统有m类资源,n个进程,分别用R1,R2,… ,Rm和P1,P2,… ,Pm表示。根据有序资源分配法,进程申请资源必须按照资源编号升序申请,即,某进程已经拥有Ri资源,再申请的Rj资源,则j一定比i大。因此,在任一时刻,系统中至少存在一个进程Pk,它占有较高编号的资源Rh,且它申请的资源必然是空闲的,因而能得到满足。进程Pk能完成,之后释放其资源,使得其它进程也能得到满足,从而完成各自任务而不会导致死锁。

5. 不安全状态是否必然导致系统进入死锁状态?
答: 不一定。安全性检查中使用的向量Max是进程执行前提供的,而在实际运行过程中,一个进程需要的最大资源可能小于Max,如,

一个进程对应的程序中有一段进行错误处理的代码,其中需要n个A类资源,若该进程在运行过程中没有碰到相应的错误而不需要错误处理,则它实际上不会请求这n个A类资源。

6. . 简述死锁防止与死锁避免的区别。
答:死锁的避免是在每次资源分配的时候采取措施避免死锁;死锁的防治是利用打破死锁的三个必要条件,即,请求与保持、不剥夺、环路等待,来提前采取相应的预防,这种方法条件较苛刻且实现困难。

7 .有三个并发进程R,M,P,它们共享一个缓冲器B。进程R负责从输入设备读信息,每次读出一个记录后把它存放在缓冲器B中。进程M在缓冲器B中加工进程R存入的纪录。进程P把加工后的记录打印输出。缓冲器B中每次只能存放一个记录,当记录被加工输出后,缓冲器B中又可存放一个新记录。请用P、V操作作为同步机制写出他们并发执行时能正确工作的程序。
答:Semaphore S1=1,S2=S3=0;
void R()
{ int x;
While(1)
{从输入设备读一个数data;
x=data;
wait(S1);
B=x;
signal(S2);}
}
void M()
{ While(1)
{ wait(S2);
加工B中数据;
B=x;
signal(S3);}
}
void P()
{ int Z;
While(1)
{ wait(S3);
Z=B;
signal(S1);
打印Z中的数;}
}

Main()
{ cobegin {
R();
M();
P();}
}



相关文档
相关文档 最新文档