当前位置:文档之家› 第二章 作业讲解

第二章 作业讲解

第二章进程管理作业讲解
一、部分附加题
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。

相关主题