向 Buffer[i]写入信息 从 Buffer[k]中读信息 V(mutex) V(mutex) V(full) V(empty)
j:=(j+1)mod n k:=(k+1)mod n
4)empty 表示还有多少缓冲区单元为空,如果 empty=0,表示缓冲区满,系统调用写进程时 ,写进程处于等待态
full 表示缓冲区都多少有信心的单元,如果 full=0, 表示缓冲区空,系统调用写进程时 ,读进程处于等待态
mutex 表示对于缓冲区单元的互斥信号量,当 mutex=1 时,开锁,mutex=0 时,闭锁 二.当缓冲区大小为无穷大时 1)同上
2) 1.空的信号量 empty 不用设, 满的信号量为 full 初值为 0, 对缓冲区单元的互斥信号量 为 mutex,j,k 为缓冲区单位地址,初值为 0 写进程 读进程 P(full)
P(mutex) P(mutex)
向 Buffer[i]写入信息 从 Buffer[k]中读信息 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[i]) 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.抢占式进程调度是指系统能够强制性的使执行进程放弃处理机,试问分时系统采用的 是抢占式还是非抢占式进程调度?实时系统? 答:分时系统采用的是非抢占式进程调度