操作系统课程设计说明书-基于Linux的进程之间通信精选.doc

操作系统课程设计说明书-基于Linux的进程之间通信精选.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统课程设计说明书-基于Linux的进程之间通信精选

中北大学 操作系统课程设计 说 明 书 ? 学 院、系: 软件学院 专 业: 软件工程 学 生 姓 名: 学 号: 设 计 题 目: 基于Linux的进程之间通信 实现信号量通信机制(哲学家进餐) 起 迄 日 期: 2015年12月28日- 2016年1月8日 指 导 教 师: 何志英 ? ? ?2015 年12月25日 需求分析 1.1小组的拿到的任务是: 设计内容: (1) 实现管道通信,要求见P183习题(3)。 (2) 实现信号量通信机制,要求见P191习题(3)。 (3) 实现消息缓冲通信机制,要求见P197习题。 (4) 实现共享内存区通信机制,要求见P201习题(2)。 要求: (1) 用Linux中进程控制系统调用函数来创建进程(线程)。 (2) 输出进程通信时同步的说明信息。 1.2小组分工我拿到的题目是:(2) 实现信号量通信机制,要求见P191习题(3)。 1.3题目的要求如下: 1.3.1.哲学家进餐问题描述: 设有5个哲学家,共享一张放有5把椅子和5把叉子的圆桌,每人分得一把椅子。哲学家们在肚子饥饿时才试图分两次从两边捡起两把叉子就餐。 条件: 1.每个人只有拿到两把叉子时,哲学家才能吃饭 2.如果叉子已在他人手上,则哲学家必须等到他人吃完后才能拿起叉子 3.任性的哲学家在自己未拿到两把叉子吃饭之前,绝不放下自己手中的叉子 1.3.2问题: 1.什么情况下5个哲学家全部都吃不上饭? 答:当5个哲学家每人手中都拿到了1把叉子(共5把),即不肯放下自己手中的叉子又想要得到左右邻居的叉子时,每个哲学家永远拿不到两把叉子,所有哲学家都在等待另一把叉子,就会导致这5个哲学家谁都吃不上饭。也就是产生死锁后的情况。 2.编程实现没有人饿死(永远拿不到两个叉子)的算法。 答:程序请看代码实现。 分析:没有人饿死,就是不允许出现死锁的情况(5个哲学家每人1把叉子) 1.3.3解决死锁的方法有三种: 1.至多允许四位哲学家同时去拿左边的叉子,最终保证至少有一位哲学家能够进餐,并且在用毕时能释放出他用过的两只叉子,从而使更多哲学家能够进餐; 2.规定当哲学家的左右两只叉子均可用时,才允许他拿起叉子进餐; 3.规定奇数号的哲学家先拿他左边的叉子,然后再去拿他右边的叉子,而偶数号哲学家则相反。五位哲学家都先竞争奇数号叉子,获得后再竞争偶数号叉子,最终总有一位哲学家会因为获得两只叉子而进餐。 1.3.4我采用的解决死锁问题的方法 我采用的解决死锁的方法是第二种,即在哲学家拿起叉子前先判断他左右邻居的情况,只要左右邻居中有一位正在进餐(叉子已经被邻居拿到,邻居进餐结束前自己无法获得其叉子),就不允许其拿起叉子进餐,这就可以预防死锁的情况发生。 1.4软件需要完成的功能: 按照题目要求,需要调用Linux操作系统函数使用信号量机制完成对哲学家进餐问题的求解,要求所有哲学家都能吃到食物,并且要防止哲学家在竞争叉子过程发生死锁。 程序应该包含如下功能: 1.哲学家思考功能:哲学家在进餐前和进餐后处于思考状态; 2.哲学家拿起叉子动能:哲学家进餐前需要拿起叉子,在这个过程中可能发生死锁,所以要在这个功能中编写防止死锁的方法; 3.哲学家进餐功能:哲学家拿起叉子后开始进餐; 4.哲学家放下叉子功能:哲学家用餐完毕,放下叉子,并通知其左右邻居; 5.执行P、V操作功能:由于要使用信号量机制,肯定会涉及到P、V操作 6.创建工作环境功能:包括建立共享内存区、连接进程和共享内存区、创建并初始化信号量集、创建子进程模拟5个哲学家等。 1.5软件设计的目的: 完成对哲学家进餐问题的求解,解决死锁问题。 1.6最终成果: 最终要提交的成果是:说明书、源程序(cpp文件) 总体设计 2.1程序模块结构图: 图1 哲学家进餐问题程序模块结构图 2.2程序流程图 2.2.1 总体流程图 图2 总体程序流程图 2.2.2哲学家进餐问题解决方案流程图 图3 哲学家进餐问题解决方案流程图 3.详细设计 3.1 包含必要的头文件 由于要调用Linux系统函数,所以要导入必要的头文件,需要导入的头文件如下: #include sys/types.h //使用了shmat函数 #include sys/ipc.h #include sys/sem.h //使用了semget函数 #include sys/wait.h //使用了wait函数 #include sys/shm.h //使用了shmget、shmat、shmctl、shmdt四个函数 #include stdio.h //使用了printf函数 #include

文档评论(0)

gz2018gz + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档