北大操作系统习题答案完整版

V(mutex) V(mutex) V(full)

j:=(j+1)mod n k:=(k+1)mod n

4)full 表示缓冲区都多少有信心的单元,如果full=0, 表示缓冲区空,系统调用写进程 时,读进程处于等待态

mutex 表示对于缓冲区单元的互斥信号量,当mutex=1时,开锁,mutex=0时,闭锁 13.假定一个阅览室最多可以容纳100人,读者进入和离开阅览室都必须在阅览室门口的一 个登记表上标志(进入时登记,离开时去掉登记项)而且每次只允许一人登记或者去掉登 记,问:

1) 应编写几个进程完成这项工作,程序的主要动作是些什么?应该设置几个进程?进程

和程序间的关系如何?

2) 用P,V操作写出这些进程的同步通信关系

答:编写两个进程,一个处理读者进入,一个处理读者离开,进程是程序的动态执行 设置信号量 full 为初值为 0, 空的信号量 empty 初值为100, 互斥信号量 mutex 初值 为1

进入 离开 P(empty) P(full) P(mutex) P(mutex) 登记 取消登记 V(mutex) V(mutex) V(full) V(empty) 进入 离开

14.在生产者和消费者问题中,如果对调生产者(或消费者)进程中的两个P操作和两个 V操作的次序,会发生什么情况?请说明!

答:对调P操作, 会发生死锁 因为P(empty)在 p(mutex)和 v(mutex)内部,也就是临界 区中,当 empty≤0,时,P(empty)在临界区中进入到了休眠状态。那么就别的进程都进入 不到临界区中,进入死锁状态。

而两个V操作无关紧要

15.为什么引入高级通信机构?他有什么优点?说明消息缓冲通信机构的基本工作过程? 答:

1)为了解决大量的消息交换,

2)优点:不仅能够保证相互制约的进程之间的相互关系,还同时实现了进程之间的信息 交换

3)消息缓冲通信技术的工作过程:

其基本思想是:根据“生产者-消费者”原理,利用内存中公用消息缓冲区实现进程之间 的信息交换。

内存中开辟了若干消息缓存区,用以存放消息,每当一个进程(发送进程)向另一个进程 (接收进程)发送消息时,便申请一个消息缓冲区,并把已准备好的消息发送到缓冲区中 ,然后把该消息缓冲区插入到接受进程的消息队列中,最后通知接受进程,接收进程收到 发送进程发送到的通知后,从本进程的消息队列中摘下一消息缓冲区,取出所需的消息,

然后把消息缓冲区还给系统。

16.进程间为什么要进行通信?在编写自己的程序时,是否考虑到要和别的用户程序进行 通信?各个用户进程间是否存在制约关系?

答;1)各个进程在运行的时候,共享内存,或者共同完成一个特定的功能,都需要进行通 信, 2)需要,

3)促在同步和互斥的关系,比如聊天程序

17.假定一个系统的磁盘块大小为2KB,一个块的平均访问时间是20毫秒。一个有40KB进程

由于资源请求从运行态变为阻塞态,它必须保持阻塞多长时间? 答: 40/2 * 20=400毫秒 保持阻塞态 400毫秒

18.假设A,B两个火车站之间是单轨线,许多列车同时到达A站,然后经过A站到达B站;又

列车从A到B的行驶时间是t,列车在B战后的停留时间是t/2,试问在该问题模型中,什么是 临界资源,什么是临界区?

答:临界资源: A到B之间的单轨线,以及B站是临界资源 临界区: 在A到B之间行驶,以及在B上停留是临界区 19.同步机制应该遵循哪些原则?为什么?

答:1.它的描述能力应该足够强,既能解决各种进程间的同步互斥问题; 2.其次,应该容易实现并效率高 3.第三,使用方便

20.我们为某临界资源设置一把锁W。当W=1时,表示关锁,W=0时,表示开锁,试写出开锁

和关锁原语,并利用它去实现互斥。 答: while(1==w); enter 临界区

21.进程A1,A2,?,An通过m个缓冲区向进程B1,B2,?,Bn不断发送消息,发送和接收工作遵

循如下规则:

1)每个发送进程每次发送一个消息,写入一个缓冲区,缓冲区大小与消息长度一样 2)对每一个消息,B1,B2,..Bn都需要各接收一次,读到各自的数据区中; 3)m个缓冲区都满时,发送进程等待,没有可读消息时,接受进程等待 试用P,V操作组织正确的发送和接收操作。 答: VAR

mutex: Semaphore:{初值为1,实现对缓冲区的互斥} empty: Semaphore:{初值为n,有多少缓冲}

Full: Array[1..n] OF Semaphore:{初值为0,每个接收进程当前可接收的缓冲区 }

Count:Array[1..n] OF INTEGER;{初值为0,n个缓冲区被访问的次数}

ReceivePointer:Array[1?n] OF INTEGER{初值为0,该接收进程要取哪个 } SendPointer:INTEGER;{初值为0,发送进程下次要放到哪个缓冲区} 发送进程 (num:INTEGER) {num为进程号}

Repeat P(empty) P(mutex)

向buff[sendPointer]放消息

sendPointer:=(sendPointer+1)mod k count[sendPointer]:=0 V(mutex)

For i:=1 To n Do V(Full) Until FALSE

接收进程 (num:INTEGER):{num为接收进程号} Repeat

P(Full[num]) P(mutex)

从buff[ReceivePoiner[num]]中取消息 V(mutex)

Count[ReceivePoiner[num]]:= Count[ReceivePoiner[num]]+1 IF(Count[ReceivePoiner[num]]==n) THEN V(empty)

Count[ReceivePoiner[num]]==0

ReceivePoiner[num]]:=(ReceivePoiner[num])+1)mod n

Until FALSE

22.有K个进程共享一个临界区,对于下述情况,请说明信号量值的初值,含义,并用P, V

操作写出相关的互斥算法。

1) 一次只允许一个进程进入临界区 2) 一次只允许m个进程进入临界区 答:1)设置互斥信号量mutex,初值为1 P(mutex) Enter_region V(mutex)

2)设置同步信号量mutex,初值为m; P(mutex) Enter_region V(mutex)

23.爱睡觉的理发师问题,一个理发店有两间相连的屋子,一间是私室,里面有一把理发 椅,另一个是等候室,有一个滑动门和N把椅子。理发师忙的时候,通向私室的门被关闭 ,新来的顾客找一把空椅子坐下,如果椅子都被占用了,则顾客只好离去,如果没有顾客 ,则理发师在理发椅上睡觉。并打开通向私室的门。理发师睡觉时,顾客可以叫醒他理发 ,请编写

理发师和顾客的程序,正确实现同步和互斥问题! 答:

解:VAR:

S1,S2 :Semaphore;{初值为0,实现理发师与顾客的同步} Mutex:Semaphore:{初值为1,实现对waiting的互斥} waiting:INTEGER:{初值为0,等待的顾客数} 理发师进程 REPEAT

P(S1) {若无顾客,则睡觉 } P(mutex)

Waiting:=waiting-1

V(S2); (唤醒一个等待的客户) V(mutex) 理发 Until FALSE 顾客进程 P(mutex)

IF(waiting

Waiting:=-waiting+1 ;(等待顾客数加1) V(mutex);

V(S1) {通知理发师}

P(S2) {若无理发师,挂起} 坐下理发 END

ELSE V(mutex)

24.进程之间的通信方式有几种?在单机环境下,常用的哪几种通信方式? 答:三种:共享内存,消息机制,以及管道通信

在单机环境下:常采用 共享内存以及管道通信。

25. 一个快餐店有四类雇员:1)领班,他们接受顾客点的菜单;2)厨师,准备饭菜;3) 打包工,将饭菜装在袋子里;4)收银元,将食品袋交给顾客并收钱,每个雇员都可以看 作一个进行通信的顺序进程,他们采用的进程间通信方式是什么? 答:通信方式为消息传递。

26.抢占式进程调度是指系统能够强制性的使执行进程放弃处理机,试问分时系统采用的 是抢占式还是非抢占式进程调度?实时系统? 答:分时系统采用的是非抢占式进程调度 实时系统采用的是抢占式进程调度

27.试述进程调度得主要任务,为什么说它把一台物理机变成了多台逻辑上的处理机

答:处理机调度的任务是控制协调进程对CPU的竞争即按一定的调度算法从就绪队列中选 中一个进程,把CPU的使用权交给被选中的进程

多个进程虽然在微观上仍然是顺序执行,但是在宏观上,仿佛是并发执行 28.在CPU按优先级调度的系统中 1),没有运行的进程是否一定没有就绪进程

联系客服:779662525#qq.com(#替换为@)