计算机操作系统习题及答案

第4章  进程同步与通信
1)选择题
(1)在操作系统中,P、V操作是一种_D__。
A. 机器指令                  B. 系统调用命令
C. 作业控制命令              D. 低级进程通信原语
(2)若信号量S的初值为2,当前值为-1,则表示有_B__等待进程。
A. 0个                B. l个
C. 2个                D. 3个
(3)在直接通信方式中,系统提供两条通信原语进行发送和接收,其中Send原语中参数应是_C_。
A. sender,message          B. sender,mailbox
C. receiver,message        D. receiver,mailbox
(4)下述那个选项不是管程的组成部分_A__。
A. 管程外过程调用管程内数据结构的说明
B. 管程内对数据结构进行操作的一组过程
C. 局部于管程的共享数据说明
D. 对局部于管程的数据结构设置初值的语句
(5)某通信方式通过共享存储区来实现,其属于_D__。
A. 消息通信          B. 低级通信
C. 管道通信          D. 高级通信
(6)用P、V操作管理临界区时,信号量的初值应定义为__C__。
壳体加工A. -1          B. 0
C. 1          D. 任意值
(7)临界区是_B__。
A. 一个缓冲区              B. 一段程序
C. 一段共享数据区          D. 一个互斥资源
(8)信箱通信是一种_D__通信方式。
A. 接通信        B. 信号量
C. 低级通信        D. 间接三元醇通信
(9)对于两个并发进程,设互斥信号量为mutex,若mutex=0则__A_。
A. 表示有一个进程进入临界区
B. 表示没有进程进入临界区
C. 表示有一个进程进入临界区,另一个进程等待进入
D. 表示有两个进程进入临界区
(10)对信号量S执行V操作后,下述选项正确的是_C__。
A. 当S小于等于0时唤醒一个阻塞进程
B. 当S小于0时唤醒一个阻塞进程
C. 当S小于等于0时唤醒一个就绪进程
D. 当S小于0时唤醒一个就绪进程
  (11)在消息缓冲通信中,消息队列属于_A__资源。
A. 临界        B. 共享        C. 永久        D. 可剥夺
  (12)在消息缓冲通信机制中,使用的临界资源是_D__。
A. 信箱        B. 消息队列中的某个缓冲区
C. 管道        D. 整个消息队列
2)填空题
(1)信号量的物理意义是:当信号量值大于0时表示 可用资源的个数  ;当信号量值小于0时,其绝对值为   等待该信号量的进程数 
(2)如果信号量的当前值为-4,则表示系统中在该信号量上有 __4__ 个等待进程。
(3)静压测试对于信号量可以做   P  操作和   V  操作,  P  操作用于阻塞进程,  V  操作用于释放进程。程序中的   P    V  操作应谨慎使用,以保证其使用的正确性,否则执行时可能发生死锁。
(4)有m个进程共享同一临界资源,若使用信号量机制实现对临界资源的互斥访问,则信号量值的变化范围是 _[-(m-1),1]_
(5)管程由  局部于管程(资源对象)的共享变量的说明  对管程(资源对象)数据进行操作的一组过程   对局部于管程的数据设置初始值的语句  三部分组成。
(6)访问临界资源的进程应该遵循的条件有:  空闲让进    忙则等待    有限等待    让权等待 
(7)每个信箱可以包含  信箱头    信箱体  两部分。
(8)为了实现消息缓冲通信,在PCB中应增加的数据项有 消息队列中消息资源的信号量 对消息队列互斥操作的信号量    指向消息队列的指针 
3)解答题
(1)什么是临界资源什么是临界区对临界资源的访问有哪些原则
答:一次仅允许一个进程使用的共享资源被称为临界资源。
每个进程中访问临界资源的那段程序称为临界区。
对临界资源的访问原则是:
①空闲让进,如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。
②忙则等待,任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。
③有限等待,进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。
让权等待,如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。
(2)请给出P、V操作的定义。如何用P、V操作实现进程间的互斥
解:P原语操作的动作是:
  sem减1;
    橡胶补强剂若sem减1后仍大于或等于零,则进程继续执行;
    若sem减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。
  V原语操作的动作是:
    sem加1;
    若相加结果大于零,则进程继续执行;
    若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。
由于用于互斥的信号量sem与所有的并发进程有关,所以称之为公有信号量。公有信号量的值反映了公有资源的数量。只要把临界区置于P(sem)和V(sem)之间,即可实现进程间的互斥,sem的初值通常设置成1。
使用P、V操作实现进程互斥时应该注意的是:
每个程序中用户实现互斥的P、V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区。若有多个分支,要认真检查其成对性。
P、V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。
小毛刷
互斥信号量的初值一般为1。
(3)请用P、V操作写出一个不会出现死锁的哲学家进餐问题的解
解:至多只允许四个哲学家同时进餐,以保证至少有一个哲学家能够进餐,最终总会释放出他所使用过的两支筷子,从而可使更多的哲学家进餐。以下将room 作为信号量,只允许4个哲学家同时进入餐厅就餐,这样就能保证至少有一个哲学家可以就餐,而申请进入餐厅的哲学家进入room 的等待队列,根据FIFO 的原则,总会进入到餐厅就餐,因此不会出现饿死和死锁的现象。
semaphore chopstick[5]={1,1,1,1,1};
semaphore room=4;
void philosopher(int i)
{
  while(true)
  {
    think();
    wait(room); //请求进入房间进餐
    wait(chopstick[i]); //请求左手边的筷子
    wait(chopstick[(i+1)%5]); //请求右手边的筷子
    eat();
    signal(chopstick[(i+1)%5]); //释放右手边的筷子
    signal(chopstick[i]); //释放左手边的筷子
    signal(room); //退出房间释放信号量room
  }
}
(此题有多种解法。)
(4)高级进程通信方式有哪几类各自如何实现进程间通信
答:高级进程通信方式可以分为三大类:共享存储器系统、消息传递系统以及管道通信系统。
在共享存储区系统中,进程通过共享内存中的存储区来实现通信。在消息传递系统中,进程间的数据交换以消息为单位,程序员直接利用系统提供的一组通信命令(原语)来实现通信。管道是用于连接读进程和写进程以实现它们之间通信的共享文件,向管道提供输入的发送进程(即写进程)以字符流形式将大量的数据送入管道,而接收管道输出的接收进程(即读进程)可以从管道中接收数据。
(5)设有6个进程P1、P2、P3、P4、P5、P6,它们有如图所示的并发关系。试用P、V操作实现这些进程间的同步。 
解:semaphore a,b,c,d,e,f=0,0,0,0,0,0;
    {cobegin
      P1;P2;P3;P4;P5;P6;
    coend}
    P1()
    {  P1;
        V(a);
        V(b); }
    P2()
{ P(a);
        P2;
        V(c); }
    P3()
{ P(b);
        P3;
        V(d); }
    P4()
{ P(c);
        P4;
        V(e); }
    P5()
{ P(d);
        P5;
        V(f); }
    P6()
{ P(e);
        P(f);紫砂饮水机
        P6; }
(6)有一个单向行驶的公路桥,每次只允许一辆汽车通过。当汽车到达桥头时,若桥上无车,便可上桥;否则需等待,直到桥上的汽车下桥为止。若每一辆汽车为一个进程,请用P、V操作保证汽车按要求过桥。
解:本题中使用一个信号量m用于互斥过河,因为每次允许一辆汽车通过,所以m初值为1。
semaphore m=1;
main()
{ cobegin
    passi();   
  coend}
passi()
{  P(m);
  Pass the river;
  V(m);
}
passi表示第i 辆汽车。
(7)有3个并发进程R、M、P,它们共享了一个可循环使用的缓冲区B,缓冲区B共有n个单元。进程R负责从输入设备读信息,每读一个字符后,把它存入到缓冲区B的一个单元中;进程M负责处理读入的字符;进程P负责把处理后的字符取出并打印输出。只有当缓冲区单元中的字符被进程P取出后,才又可用来存放下一次读入的字符。请用P、V操作为同步机制写出它们能正确并发执行的程序。
解:semaphore buffer_number=n;
    semaphore char_number=0;
semaphore man_number=0;
main()
{ cobegin
  R;M;P;
  coend }
R()
{ while (true)
{P(buffer_number);
    read a char to buffer;

本文发布于:2024-09-21 16:35:08,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/183644.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   操作   进入   信号量   资源   互斥   实现   管程
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议