- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
橘子苹果问题小爱
摘 要
该程序通过对苹果——橘子问题的实现,来体现临界资源、进程间的同步与互斥的关系。它主要体现了有若干进程都要使用某一共享资源时,任何时刻最多只能允许一个进程使用,其它要使用该资源的进程必须等待,直到占有资源者释放该资源,并且在相互合作的进程使用共享资源时,除了竞争之外,还必须协作工作,要利用互通消息的办法来控制进程执行的速度,实现相互协作的进程正确工作。由此,让我们了解到在多道程序环境下,当程序并发执行时,由于资源共享和进程合作,使同处于一个系统中的诸进程之间,会存在间接相互制约和直接相互制约的关系(进程间的互斥和同步)。
关键词:临界资源 进程间的同步 进程间的互斥
目 录
摘 要 1
正 文 3
1、课设简介 3
1.1设计任务描述 3
1.2设计目的 3
2、功能设计 3
2.1设计思想 3
2.2数据结构设计 3
2.3各模块说明 4
3、函数的调用关系图及各模块的伪码算法 5
4、测试结果 14
总 结 18
参 考 文 献 19
致 谢 20
附件:源程序(带注释) 21
正 文
1、课设简介
1.1设计任务描述
操作系统是现代计算机系统中不可缺少的基本系统软件。它管理和控制整个计算机系统中的软硬件资源,并为用户使用计算机提供一个方便灵活,安全可靠的工作环境。
编写程序实现苹果——橘子问题。桌上有一个空盘子,只允许放一个水果。爸爸专向盘中放苹果,妈妈专向盘中放橘子,儿子专等吃盘中的橘子,女儿专等吃盘中的苹果。规定当盘空时,一次只能放一个水果。
在橘子苹果问题中,盘子为父亲母亲两个进程的共享资源,父亲和母亲之间存在互斥关系,父亲、女儿和母亲、儿子之间存在同步关系。
1.2设计目的
通过该题目的设计过程,掌握进程同步问题的原理、软件开发方法并提高解决实际问题的能力。
2、功能设计
2.1设计思想
这是进程同步与互斥问题的模拟,可以把向盘子放或取水果的每一个过程可以转为一个进程的操作,这些进程是互斥的,同时也存在一定的同步关系。通过编程实践时,实际是随机的调用一个进程的操作,而这些进程的操作相当于程序中的函数调用。而计算机在执行时每一个时刻只能执行一个操作,这就是互斥的表现。同步的模拟可以类似于函数调用时的前提关系即先决条件。这样进程同步模拟就完全可以通过函数的调用来实现。
具体的每一个操作的对应的函数的关系:
爸爸向盘子中放一个苹果:Father()
妈妈向盘子中放一个橘子:Mother()
儿子从盘子取一个橘子:Son()
女儿从盘子取一个橘子:Daugther()
2.2数据结构设计
(1)用一个整型变量Plate_Size(Semaphore Plate_Size)表示盘子里的水
果数量,初始值为0,当放水果时Plate_Size加1,取水果时Plate_Size减1。变量Plate_Size的最大值为1,当为1时表示盘子已经满,此时若再进行放水果操作,Father()和Mother()进程将处于待状态;当为0时表示盘子为空,此时若进行取水果操作,Son()和Daughter()进程将处于等待状态,Plate_Size是爸爸和妈妈进行放水果的私有信号量。
(2)整型变量orange(Semaphore apple)和apple(Semaphore orange)分别表示盘子中的橘子和苹果数目,初始值为0,其中orange是儿子的私有变量,apple是女儿的私有变量,盘子中总水果数是 Plate_Size=apple||orange。
(3)用4个bool型的变量 Father_lag,Mother_lag,Son_lag,Daughter_lag,表示四个进程是否处于等待状态。处于等待时,变量值为true。
(4)两个放水果进程同时处于等待状态时,若有取水果的操作将自动执行等待的放水果进程,执行按等待的先后顺序自动调用;取苹果或橘子进程同时
处于等待状态,若有放苹果或橘子的操作将自动执行等待的取水果进程,进行按等待的先后顺序自动调用。
(5)用一个随机的函数产生0—3的4个整数,分别对应四个进程的调用。
2.3各模块说明
主函数:用一个随机的函数产生0—3的4个整数,即 i=rand()%4,分别
对应四个进程的调用,调用的次数可以通过修改K值来实现for(k=0;k4;k++),本程序共产生了4次随机的调用进程。
4个进程函数:爸爸向盘子中放一个苹果操作:Father()
妈妈向盘子中放一个橘子操作:Mother()
儿子取一个橘子操作:Son ()
女儿从盘
原创力文档


文档评论(0)