第二章 进程管理作业讲解
一、 部分附加题
2. 在进程同步模型中,为什么S1,S2交叉在两个进程中成对出现?
答:因为两个进程要协作完成一个任务,为了进程间的相互唤醒(即同步执行),对私用信号量的PV操作应成对出现在两个进程中。
5. 每个进程中的P操作(即wait操作)的顺序可以颠倒吗?为什么? V操作呢?
答:不能,应该先对私用信号量执行P操作,再对公用信号量执行P操作,否则可能会引起死锁。V操作的顺序没关系。
如:若先对mutex执行P操作,再对empty执行P操作,当执行到empty=0时,再对mutex执行P操作,可以进入缓冲池,但由于这时empty已经为0,没有空的缓冲区可用,出现死锁,出不去又进不来。
6. 对于一个公用缓冲池, 生成者进程可以一直循环执行直到整个池满; 消费者进程可以一直循环执行直到整个池空。问:两个进程可以穿插执行吗?解释。
答: 可以。因为两个进程是并发进程,不满就可以送,不空就可以取。但不论谁执行,都要先对缓冲池执行互斥操作。
7. 两个进程是通过哪几个信号量实现同步的?说明。
答:通过私用信号量 empty,和full。
已知初值empty=n, full=0 。 在生产者进程中对empty执行P操作,对full执行V操作,当empty=0,full=n时,说明缓冲池满,不能再送;当消费者进程中的full=0,而empty=n时,说明缓冲池空,不能再取。
二、书P82-83
23.答:
若缺少了signal(full),由于full初值为0,消费者无法取产品;
当缓冲池全送满时,empty降为0,若缺少了signal(empty),当缓冲池全取空时,由于empty仍然为0,生产者无法再送产品。
24.答:
如果wait(full)和wait(mutex)互换位置,会造成当full=0时,若有消费者进程还对full执行wait操作,导致死锁。
28.答:
设初值 empty=1, full=0
Precess1: begin
Repeat
Wait(empty)
Critical section
送数据
Signal(full)
Until false
End
Precess2: begin
Repeat
Wait(full)
Critical section
取数据
Signal(empty)
Until false
End
本文来源:https://www.2haoxitong.net/k/doc/359d7b06e87101f69e3195df.html
文档为doc格式