现代操作系统课后习题答案(6)

2019-04-23 07:52

S1() {

?

v(b2); v(b3); } S2() {

p(b2);

?

v(b4); //v(b42) } S3() {

p(b3);

?

v(b4); //v(b43) } S4()

{//因为在S2及S3完成时均对b4做了v操作,因此这里要用两个p操作 p(b4);//p(b42) p(b4);//p(b43)

? }

5. 桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。

解:设置3个信号量S、SO、SA,信号量S表示盘子是否为空,其初值为1;信号量SO表示盘中是否有桔子,其初值为0;信号量SA表示盘中是否有苹果,其初值为0。 同步描述: int S=1; int SA=0; int SO=0; main() {

cobegin

father(); son();

daughter(); coend }

第 26 页 共 33 页

father() {

while(1)

{

p(S);//盘子是否空 将水果放入盘中;

if(放入的是桔子)v(SO);//变形

else v(Sa) //很少有学生如此做!而这却是本题的关键 } } son() {

while(1)

{

p(SO);//盘子中有无桔子 从盘中取出桔子; v(S); 吃桔子; } }

daughter() {

while(1)

{

p(SA);//盘子中有无苹果 从盘中取出苹果; v(S); 吃苹果; } }

6. 在单处理机的分时系统中,分配给进程P的时间片用完后,系统进行切换,结果调度到的仍然是进程P。有可能出现上述情形吗?如果可能请说明理由。

解:有可能出现上述情况。例如,若在进程P时间片用完后,被迫回到就绪队列时,就绪队列为空,这样进程P就是就绪队列中唯一的一个进程,于是调度程序选中的进程必然是进程P;又如在按优先级调度的系统中,就绪队列按进程优先级排列,在进程P时间片用完之后回到就绪队列时,若其优先级高于当前队列中的其他进程,则它将排在就绪队列之首,从而再次被调度程序选中并投入运行。

第 27 页 共 33 页

7. 哲学家甲请哲学家乙、丙、丁到某处讨论问题,约定全体到齐后开始讨论问题;在讨论的间隙4位哲学家进餐,每人进餐时都需使用刀、叉各一把,餐桌上的布置如图。请用信号量及P、V操作说明这4位哲学家的同步、互斥过程。 解:在本题中,应设置4个信号量fork1、fork2、knife1、knife2,其初值均为1,分别表示资源叉1、叉2、刀1、刀2是否可用。同步描述如下: int fork1=1; int fork2=1; int knife1=1; int knife2=1; main() {

cobegin Pa(); Pb(); Pc(); Pd(); Coend } Pa() {

while(1) {

p(knife1); p(fork1); 进餐; v(knife1); v(fork1); 讨论问题; } } Pb() {

while(1) {

p(knife2); p(fork1); 进餐; v(knife2); v(fork1); 讨论问题; } } Pc() {

第 28 页 共 33 页

while(1) {

p(knife2); p(fork2); 进餐; v(knife2); v(fork2); 讨论问题; } } Pd() {

while(1) {

p(knife1); p(fork2); 进餐; v(knife1); v(fork2); 讨论问题; } }

8. 请用信号量实现对某数据库的读者-写者互斥。 要求:(1)读者与写者之间互斥,写者与写者之间互斥。 (2)读者之间不互斥。

解:本题是读者-写者问题。在本题中,允许读进程同时读数据库,但写进程正在写数据库时不允许其他进程读该数据库,也不允许其他进程写该数据库。为了解决读、写进程之间的同步,应该设置2个信号量和一个共享变量:读互斥信号量rmutex,用于使读进程互斥地访问共享变量count,其初值为1;写互斥信号量wmutex,用于实现写进程与读进程的互斥及写进程与写进程的互斥,其初值为1;共享变量count,用于记录当前正在读数据库的读进程数目,初值为0。其工作过程描述如下: Semaphore rmutex=1; Semaphore wmutex=1; Int count=0; Main() {

Cobegin

Reader(); Writer(); Coend }

Reader()

第 29 页 共 33 页

{

While(true) {

P(rmutex);

If(count==0) p(wmutex); Count ++; V(rmutex); 读数据库; P(rmutex); Count --;

If (count==0) v(wmutex); V(rmutex); } }

Writer() {

While(true) {

P(wmutex); 写数据库;

V(wmutex); } }

注意:正确理解信号量rmutex的意义是理解读者-写者问题的关键。Rmutex是一个互斥信号量,用于使读进程互斥地访问共享变量count。信号量rmutex并不表示读进程的数目,表示读进程数目的是共享变量count。当一个读进程要读数据库时,应将读进程计数count增加1;如果此前(count加1以前)数据库中无读进程,还应对写互斥信号量wmutex做p操作,这样,若数据库中无写进程则通过p操作阻止后续写进程写,若数据库中有写进程,则通过p操作让读进程等待。同理,当一个读进程完成读数据库操作时,应将读进程计数count减少1;如果此时(count减1以后)数据库中已无读进程,还应对写互斥信号量wmutex做v操作,以允许写进程写。

9. 就绪队列中有10个进程,系统将时间片设为200ms,CPU进行进程切换要花费10ms,试问系统开销所占的比率约为多少?

解:因就绪队列中有10个进程,它们以时间片轮转的方式使用CPU,时间片长度为200ms。当一个时间片用完时,调度进程将当前运行进程设置为就绪状态并放入就绪队列尾,再从就绪队列首选择进程投入运行,这一过程(进程切换)要花费时间10ms。因此系统开销所占比率为:10/(200+10)=4.8%

10. 在单CPU和两台输入/输出设备(I1,I2)的多道程序设计环境下,同时投入三个作业Job1、Job2、Job3运行。这三个作业对CPU和输入/输出设备的使用顺序和时间如下所示:

Job1:I2(30ms);CPU(10ms);I1(30ms);CPU(10ms);I2(20ms)

第 30 页 共 33 页


现代操作系统课后习题答案(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:新北师大版八年级物理下册第八章《连通器》教案1

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: