苹果-桔子问题的实现说明书.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文档。上传文档
查看更多
PAGE ******************* 实践教学 ******************* 某大学 ***学院 ***年秋季学期 操作系统原理课程设计 题 目: 苹果-桔子问题的实现 专业班级: 计算机科学与技术 姓 名: 学 号: 指导教师: 成 绩: 目 录 TOC \o 1-3 \h \z 前 言 1 摘 要 2 正 文 3 1. 设计思想 3 2. 算法用到的主要数据结构(采用类c语言定义) 4 3. 相关的各模块的伪码算法 5 4. 调试分析 9 5. 测试结果 9 总 结 15 参考文献 16 致 谢 17 附件Ⅰ 部分源程序代码 18 源程序(带注释) 18 PAGE 1 前 言 进程间存在两种相互关系:竞争与合作,进程互斥是解决进程间资源竞争关系的手段,任何时刻只允许一个进程使用,其他要使用该资源的进程必须等待。进程同步是解决进程间合作关系的手段,指两个或两个以上进程基于某个条件来协调它们的活动,一个进程的执行依赖于另一个合作进程的消息或信号,当一个进程没有得到来自于另一个进程的消息或信号时需要等待,直到消息或信号到达时才被唤醒。本次课程设计题目是苹果桔子问题的实现,爸爸进程与妈妈进程是互斥进程,女儿进程与儿子进程也是互斥进程,每次只允许其中一个发生。妈妈进程与儿子进程是同步进程,爸爸进程与女儿进程是同步进程,只有爸爸放入苹果,女儿才能取苹果,同理,只有妈妈放入桔子,儿子才能取桔子。本次课设在VC操作系统下使用C语言设计这个进程的执行。 摘 要 这次课设的题目是苹果-桔子问题的实现,这是一个进程同步互斥问题。爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘中的桔子,女儿专等着吃盘中的苹果。父母是放入水果的,子女是吃水果的,也就是只有父母放入水果,子女才能吃水果;只有子女吃完水果,父母才再次放入水果。放水果者和吃者共享缓冲区,缓冲区中有空时,放水果者可放入产品(不许放重),否则等待。缓冲区中有产品时,吃水果者可取出产品(不许取重),否则等待。本次课设基于VC下用C语言设计进程的执行。 关键词:苹果,桔子, 进程同步;互斥;等待。 正 文 设计思想 这是一个进程同步互斥问题,也是生产者消费者问题,所以采用与生产者消费者类似的设计理念。设plate,orange和apple是爸爸妈妈儿子女儿的私用信号量。plate表示盘子的状态,其含义是爸爸妈妈是否可以放入水果,初值为0表示盘子是空的,可以放苹果或桔子。orange表示盘中是否有桔子,其含义是儿子是否可以取桔子,其初值为0表示不能取桔子。apple表示盘中是否有苹果,其含义是女儿是否可以取苹果,其初值为0表示不能取苹果。爸爸放完苹果后,女儿才可以取苹果,妈妈放完桔子后,儿子才可以取桔子。主函数中采用除4取余法调用各个进程的执行,当余数为1时调用爸爸进程,余数为2时调用女儿进程,余数为3时调用妈妈进程,余数为0时调用儿子进程。 函数调用关系如图1.1如下: 儿子进程 0 儿子进程 主函数 主函数 爸爸进程 1 爸爸进程 i%4= i%4= 女儿进程 2 女儿进程 妈妈进程 妈妈进程 3 图1.1函数调用关系 算法用到的主要数据结构(采用类c语言定义) 数据定义: int plate = 0; int apple = 0; int orange = 0; int N; int i ; int p; 爸爸进程: if (plate == 1) 盘子已满,爸爸等待; else { 盘子为空,爸爸放入苹果; plate = 1; apple = 1; } 妈妈进程: if (plate == 1) 盘子已满,妈妈等待; else { 盘子为空,妈妈放入桔子; plate = 1; orange = 1; } 儿子进程: if(plate == 0) 盘子为空,儿子等待; else { 盘子有桔子,儿子取桔子吃; orange = 0; plate = 0; } 女儿进程: if

文档评论(0)

小教资源库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档