操作系统 作业答案.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九题 设有两个生产者进程A、B和一个销售者进程C,他们共享一个无限大的仓库,生产者每次循环生产一个产品,然后入库供销售;销售者每次循环从仓库中取出一个产品进行销售。如果不允许同时入库,也不允许边入库边出库;而且要求生产和消费A产品和B产品的件数都满足下关系:-n≤A的件数-B的件数≤m,其中n、m是正整数。 分析:生产者A、B和消费者之间不能同时将产品入库和出库,故仓库是一个资源:-n≤A的件数-B的件数≤m,:-n≤A的件数-B的件数≤m,A的件数-B的件数 A的件数-B的件数;difference==-ndifference==m的时候,不能取产品A,只能取B;-ndifferencem,即可以取产品A也可以取产品B; 答:为了互斥地入库和出库,为仓库设置一初值为1的互斥信号量mutex;为了使生产的产品件数满足-n≤A的件数-B的件数≤m,须设置两个同步的信号量,其中SAB表示当前允许A生产的产品数量,其初值为m,SBA表示当前允许B生产的产品数量,其初值为n;另外,还需设置一个整数difference表示所销售的A、B产品数量之差,而为了同步生产者和销售者并使销售的A、B产品的件数-n≤A的件数-B的件数≤m,还需要设置三个资源信号量,其中对应于仓库中的总的产品量,SA对应于仓库中的A产品量,SB对应于仓库中的B产品量,它们的初值都为0. Semaphore SAB=m,SBA=n,S=0,SA=0,SB=0,mutex=1; process A( ) { while(1) {//生产产品,-n≤A的件数-B的件数≤m,方法同第4题 wait(SAB); Produce a product A; signal(SBA); //入库操作,满足出入库操作互斥即可 wait(mutex); add the product A to the storehouse; signal(mutex); signal(SA); //入库产品A一件,所以给SA增值 signal((S); //入库产品一件,所以给S增值,S是仓库中全部产品的数量 } } process B( ) { while(1) {//生产产品,-n≤A的件数-B的件数≤m,方法同第4题 wait(SBA); Produce a product B; signal(SAB); //入库操作,满足出入库操作互斥即可 wait(mutex); add the product A to the storehouse; signal(mutex); signal(SB); //入库产品A一件,所以给SA增值 signal((S); //入库产品一件,所以给S增值,S是仓库中全部产品的数量 } } process C( ) { while(1) { wait(S); //首先检查有无产品,无产品阻塞,有产品,下面操作将会取走一件产品,所以S减1 if(difference=-n) {wait(SA); // difference=-n时只能取A产品一件,无A产品则需阻塞 //出库操作,满足出入库操作互斥 wait(mutex); take a product A from storehouse; signal(mutex); difference++; //取A产品一件,difference++ } else if(difference=m) { wait(SB); // difference=m时只能取B产品一件,无B产品则需阻塞 //出库操作,满足出入库操作互斥 wait(mutex); take a product B from storehouse; signal(mutex); difference--; //取B产品一件,difference-- } else { //-ndifferencem,即可以取产品A也可以取产品B,随意取一件产品出来,之后再根据取得产品是A还是B进行处理 //出库操作,满足出入库操作互斥 wait(mutex); take a product A 或B from storehouse; signal(mutex); if(product_type==A) {//取的是产品A,则信号量SA减1,这里不可能发生没有A产品,进程C需要阻塞的情况 wait(SA); difference++;//取A产品一件,difference++ } else {//取的是产品B,则信号量SB减1,这里不可能发生没有B产品,进程C需要阻塞的情

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档