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