操作系统作业结果解析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统作业结果解析

第二章 进程管理——P82-83 22题:(b) Var a,b,c,d,e,f,g,h,i,j:semaphore:=0,0,0,0,0,0,0,0; Begin Parbegin Begin S1:signal(a);signal(b);end; Begin wait(a);S2;signal(c);signal(d);end; Begin wait(b);S3;signal(e);signal(f);end; Begin wait(c);S4;signal(g);end; Begin wait(d);S5;signal(h);end; Begin wait(e);S6;signal(i);end; Begin wait(f);S7;signal(j);end; Begin wait(g);wait(h);wait(i);wait(j);S8;end; Parend; End; 23题: 如果缺少了signal(full)或signal(empty)操作,生产者可以不断地往缓冲池送消息,如果缓冲池满,就会覆盖原有数据,造成数据混乱.而消费者因wait(full)操作将消费进程直接送入进程链表进行等待,无法访问缓冲池,造成无限等待。 24题: wait(full)和wait(mutex)互换位置后,因为mutex在这儿是全局变量,执行完wait(mutex),则mutex赋值为0,倘若full也为0,则该生产者进程就会转入进程链表进行等待,而生产者进程会因全局变量mutex为0而进行等待,使full始终为0,这样就形成了死锁。 而signal(mutex)与signal(full)互换位置后,从逻辑上来说应该是一样的。 25题: 开锁原语:   unlock(W):   W=0;   关锁原语:   lock(W);   if(W==1) do no_op;   W=1;   利用开关锁原语实现互斥:   var W: semaphore:=0;   begin   parbegin   process :   begin   repeat   lock(W);   critical section   unlock(W);   remainder section   until false;   end parend 26题: producer:   begin   repeat   . . .   producer an item in nextp;   wait(mutex);   wait(full); /* 应为wait(empty),而且还应该在wait(mutex)的前面 */   buffer(in):=nextp;   /* 缓冲池数组游标应前移: in:=(in+1) mod n; */   signal(mutex);   /* signal(full); */   until false;   end   consumer: begin   repeat   wait(mutex);   wait(empty); /* 应为wait(full),而且还应该在wait(mutex)的前面 */   nextc:=buffer(out);   out:=out+1; /* 考虑循环,应改为: out:=(out+1) mod n; */   signal(mutex);   /* signal(empty); */   consumer item in nextc;   until false;   end 27题: 设初始值为1的信号量c[I]表示I号筷子被拿(I=1,2,3,4,...,2n),其中n为自然数. send(I):   Begin   if I mod 2==1 then   {   P(c[I]);   P(c[I+1 mod n]);   Eat;   V(c[I+1 mod n]);   V(c[I]);   }   else   {   P(c[I+1 mod n]);   P(c[I]);   Eat;   V(c[I]);   V(c[I+1 mod n]);   }   End 28题: int mutex=1;   int empty=n;   int full=0;   int in=0;   int out=0;   main()   {   cobegin   send();   coend   }   send()   {   while(1)   { . .   collect data in nextp;   . .   wait(empty);   wait(mutex);   buffer(in)=nextp;   in=(in+1) mod n;

文档评论(0)

liwenhua11 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档