操作系统专业课程设计哲学家进餐问题.docVIP

操作系统专业课程设计哲学家进餐问题.doc

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共18页,可阅读全部内容。
  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文档。上传文档
查看更多

目录

TOC\o1-3\h\z\u1.设计题目和要求 1

1.1试验目标和设计要求 1

1.2初始条件 1

2总体设计思想及相关知识 2

2.1总体设计思想 2

2.2临界区互斥编程原理 3

2.3开发环境和工具 3

3数据结构和模块说明 4

3.1数据结构 4

3.2程序各模块步骤图 5

3.2.1主程序模块 5

3.2.2状态改变模块 6

3.2.3返回哲学家状态模块 7

3.2.4返回餐具状态模块 8

4.源程序代码 9

5.测试及结果 14

6.课设总结 16

参考文件 17

1.设计题目和要求

1.1试验目标和设计要求

试验目标:经过实现哲学家进餐问题同时深入了解和掌握进程同时和互斥原理。

设计要求:哲学家有N个,也定全体到齐后开始讨论:在讨论间隙哲学家进餐,每人进餐时全部需使用刀、叉各一把,全部哲学家刀和叉全部拿到后才能进餐。哲学家人数、餐桌上部署自行设定,实现刀和叉互斥使用算法程序实现。

1.2初始条件

(1)操作系统:windows

(2)程序设计语言:C++

(3)设定圆桌上有六个哲学家,三对刀叉,以下图摆放:

图1-1哲学家进餐问题设定图

2总体设计思想及相关知识

2.1总体设计思想

哲学家生活就是思索和吃饭,即思索,饿了就餐,再思索,循环往复。要求是:每一个哲学家只有在拿到在她左右刀叉后,才能够就餐;哲学家只能先拿一把刀或叉,再去拿另一把刀或叉,而不能同时去抓她旁边两把餐具,也不能从其它哲学家手中抢夺餐具;哲学家每次就餐后必需放下她手中两把餐具后恢复思索,不能强抓住餐具不放。

设计一个程序,能够显示目前各哲学家状态和桌上餐具使用情况,并能无死锁推算出下一状态各哲学家状态和桌上餐具使用情况。即设计一个能安排哲学家正常生活程序。

为哲学家设计3种状态,即“等候”“进餐”“思索”。每个哲学家反复进行“等候”-“进餐”-“思索”行动循环。其中:

“等候”-“进餐”:只有一个哲学家处于等候进餐状态,且左右手两边餐具全部处于“空闲”状态时,能够发生这种状态改变。此状态改变发生后,哲学家拿起左右手两边餐具。

“进餐”-“思索”:此状态改变发生后,哲学家放下左右手上餐具。餐具状态由“使用中”转变为“空闲”。

“思索”-“等候”:哲学家思索结束后,无条件转入等候状态。

由上所述,程序中应设置6个元素信号量数组,tools[6],用来保持哲学家之间同时。

2.2临界区互斥编程原理

不管是硬件临界资源,还是软件临界资源,多个进程必需互斥地对它进行访问。每个进程中访问临界资源那段代码称为临界区(CriticalSection)。

每个进程中访问临界资源那段程序称为临界区(CriticalSection)(临界资源是一次仅许可一个进程使用共享资源)。每次只准许一个进程进入临界区,进入后不许可其它进程进入。不管是硬件临界资源,还是软件临界资源,多个进程必需互斥地对它进行访问。

本程序关键使用了EnterCriticalSection(cs)和LeaveCriticalSection(cs)两个函数实现临界区互斥。

EnterCriticalSection(cs)用来进入临界区,LeaveCriticalSection(cs)用来离开临界区。

2.3开发环境和工具

系统平台:WINDOW环境

实现语言:C++

开发工具:VC++6.0

3数据结构和模块说明

3.1数据结构

Philosopher

-number:int

-status:int

+Philosopher(innum:int)

+find()const:int

+getinfo()const:int

+Change():void

图3-1哲学家类UML图

程序中定义一个哲学家类,包含两个私有对象和四个公有对象。

Number对象:报讯哲学家编号。

Status对象:用于保留目前该哲学家状态,0表示正在等候(即处于饥饿状态)1表示得到餐具正在吃饭,2表示正在思索

Philosopher(intnum)方法:哲学家类结构函数,参数num表示哲学家编号

find()const方法:返回该哲学家编号

getinfo()const方法:返回哲学家目前状态

Change()方法:依据题目要求改变哲学家状态(等候-进餐-思索-等候…………)

另外,程序中包含一个公有对象,bool类型数组tools[6],用来保留6把餐目前状态:true表示该餐具目前空闲,false表示该餐具目前正被使用。

程序中还包含两个公有函数:print和toolstatus。Print用来返回一个哲学家状态,toolstatu

文档评论(0)

知识海洋 + 关注
实名认证
文档贡献者

知识海洋

1亿VIP精品文档

相关文档