下载此文档

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


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

哲学家进餐问题

总体流程图
哲学家思考模坎
家拿起叉广模块
执行3V操作
出学家进长模块
哲学家放下叉子模块
图1哲学家进餐问题程序模块结构图
连接共享内存区和进程
申请共享内存区
创建信号量集并初始化信号量
失败
创建N^子进程
图2总体程序流程图
5
图3哲学家进餐问题解决方案流程图
6

继续思考

操作系统课程设计说明书基于Linux的进程之间通信 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数23
  • 收藏数0 收藏
  • 顶次数0
  • 上传人cjc201601
  • 文件大小117 KB
  • 时间2021-10-23