R: While(1) { P(full2)。 P(mutex2)。 get from buffer2。 V(empty2)。 V(mutex2)。 } parend。 4.14 题略
答:P1: Sa。
V(ac)。 V(ae)。 Sb。 P(cd)。 Sd。 P(fe)。 Sf。 V(fh)。 Sg。 P2: P(ac)。 Sc。 V(cd)。
16 / 34
P3: P(ae)。 Se。 V(fe)。 P(fh)。 Sh。 4.23 题略
答:解题方法,找出可能死锁的资源最多的情况。假设n个
进程需要的资源数分别为:a1,a2,…. an,则占有资源数最多却刚好形成死锁的情况是:每个进程都占有比所需资源数少一个的资源数量,而此时刚好资源用光。所以是:(a1-1)+(a2-1)+……+(an-1)=m,整理得a1+a2+…+an=m+n,而要想使得系统无死锁,则必须有a1+a2+…+an 答:1、Need的内容为:[0000,0750,1002,0020,0642] 2、系统是处于安全状态。 3、进程2请求0420,不能立即得到满足,因为如果给进程2分配了0420的话,系统将处于不安全状态。所以不能立即得到满足。 4.11 多元信号量机构允许P,V操作同时对多个信号量进行操作。这种机构对同时申请或释放若干个资源是非常有用的。假设二元信号量机构中的P原语定义为: 17 / 34 P(S,R) : While(S≤0 or R≤0)。 S=S-1。 R=R-1。 试用一元信号量机构加以实现。 答:mutex: semaphore P(mutex)。 P(S)。 P(R)。 V(mutex)。 ? 4.15 “理发师睡觉”问题 答:可以将此题看作N个生产者和一个消费者问题。顾客作为生产者,每到来一个,就将自己放入计数器RC,以便让理发师消费至最后一个产品(顾客),因此顾客进程执行的第一个语句便是RC=RC+1。而第一个到来的顾客应该负责唤醒理发师,理发师此时正在信号量WAKEUP上等待((P(WAKEUP)。该信号量的初值为0),由第一个顾客执行V(WAKEUP)。若顾客不是第一个到达,则在信号量WAIT上等待(P(WAIT)该信号量的初值为0),等理发师理完一个顾客后,执行V(WAIT)操作便可叫出该顾客理发。以上过程循环反复,理发师没每理完一个顾客,就令计数器减1,RC=0时便知此时无顾客,理发师可以继续睡觉,等待下一批顾客到达。在设信号量MUTEX(初值为1),保证对计数器RC的互斥作用。 18 / 34 parbegin 顾客进程: begin P(mutex)。 rc=rc+1。 if rc=1 then V(wakeup)。 elseP(wait)。 V(mutex)。 理发; end。 理发师进程: begin P(wakeup)。 repeat 理发; P(mutex)。 rc=rc-1。 if(rc!=0) then V(wait)。 V(mutex)。 until rc=0。 end。 parend。 19 / 34 4.21 题略 进程数 资源总是否可能死数 1 1 2 2 2 进程数 资源总是否可能死数 1 2 2 3 3 5.5 答:需要的硬件支持可以选择两种:1、上、下界寄存器和地址检查机制;2、基地址寄存器、长度寄存器和动态地址转换机制。 地址转换的过程也即是地址重定位的过程,也有两种方法实 2 2 3 3 4 锁 不会 可能会 不会 可能会 不会 1 2 1 2 3 锁 不会 不会 不会 可能会 可能会 20 / 34

