1、PV操作及进程同步的实现2哲学家就餐问题课 程 设 计课程设计名称: 专 业 班 级 : 学 生 姓 名 : 学 号 : 指 导 教 师 : 课程设计时间: 2010/12/23 计算机科学 专业课程设计任务书学生姓名专业班级学号题 目P、V操作及进程同步的实现2课题性质其它课题来源自拟课题指导教师同组姓名主要内容用语言编程实现P、V原语并用P、V原语哲学家就餐问题:为每个哲学家各编一段程序描述他们的行为,试用P、V操作实现。任务要求 掌握信号量通信方式的一般方法,了解系统实现“阻塞”和“唤醒”功能的方法和技巧。同时掌握进程同步和互斥的概念及实现技术。参考文献任满杰等操作系统原理实用教程 电子
2、工业出版社 2006汤子瀛 计算机操作系统(修订版)西安电子科技大学出版社 2001张尧学 史美林计算机操作系统教程实验指导 清华大学出版社 2000 罗宇等 操作系统课程设计机械工业出版社 2005审查意见指导教师签字:教研室主任签字: 年 月 日 说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页1 需求分析哲学家就餐问题是一种典型的同步问题,它是由Dijstra提出并解决的。该问题描述如下:有五个哲学家,他们的生活方式是交替的进行思考和进餐。哲学家们公用一张圆桌,设5个哲学家分别为A,B,C,D,E,桌子上放着5把筷子,编号分别编号为0,1,2,3,4,桌
3、子中央有一盘饭菜。5个哲学家都很有礼貌,都要等同时拿到身旁的两只筷子才进餐,不然就只是等着继续思考,而且吃了一口之后又马上放下拿起的两根筷子,继续思考。由于筷子数目有限,不能让5个哲学家同事进餐,而且甚至只能让其中的少数哲学家进餐,其他的哲学家只能轮流享用。为每个哲学家各编一段程序描述他们的行为,解决哲学家就餐问题。2 概要设计源程序中各个函数的作用说明:int Readcountn;int chopstickn;/筷子状态标志void Getchopstick(int nextw)/拿起筷子函数。 nextw为哲学家标号void Dropchopstick(int nextr)/放下筷子函数
4、int select();int main()/主函数操作实验结构图:3 运行环境硬件环境:基于Xp的PC软件环境:Windows XP4 开发工具和编程语言开发工具:Visual C+ 6.0编程语言:Visual C+5 详细设计#include#define n 5int in=0;int out=0;int Readcountn;int chopstickn;/筷子状态标志void Getchopstick(int nextw)/拿起筷子函数。 nextw为哲学家标号 printf(第%d名哲学家肚子饿了,申请左边的筷子。n,nextw); if(chopsticknextw-1=0|
5、chopsticknextw-1=nextw) in=nextw-1; chopstickin=nextw; printf(申请成功!第%d名哲学家已经拿起左边一支编号为%d筷子,申请右边编号为%d的筷子。n,nextw,in,(in+1)%n); in=(in+1)%n; Readcountnextw-1=Readcountnextw-1+1; if(chopstickin=0|chopstickin=nextw) chopstickin=nextw; Readcountnextw-1=Readcountnextw-1+1; printf(申请成功!第%d名哲学家再拿起右边一支编号为%d筷子
6、,开开心心的吃饭啦!n,nextw,in); else printf(申请失败!第%d名哲学家只有一支筷子,只好干巴巴的盼着旁边的那位哲学家赶快吃完。n,nextw); else printf(申请失败!第%d名哲学家没有拿到筷子,只好干巴巴的等着旁边的那位哲学家赶快吃完。n,nextw);void Dropchopstick(int nextr)/放下筷子函数。 / nextr为放下筷子的哲学家的编号 if(Readcountnextr-1!=0)/判断筷子是否已经占用 if(Readcountnextr-1=2) printf(该名哲学家吃饱啦!准备放下筷子。n); chopstickne
7、xtr-1=0; chopsticknextr=0; printf(该名哲学家已经放下筷子。n); else printf(该名哲学家只有一支筷子!又不能吃饭,只好准备放下筷子。n); chopsticknextr-1=0; printf(该名哲学家已经放下筷子。n); else printf(该名哲学家没有筷子你还让他放下。你好可恶啊,鄙视一下n);int select()int i,nextw,nextr;printf(请输入编号:n1-拿筷子过程n2-放筷子过程n3-退出n);scanf(%d,&i);switch(i)case 1: printf(现在进行哲学家拿筷子过程,请输入要申请
8、筷子的哲学家编号(1-5)。n); scanf(%d,&nextw); if(nextw0)&(nextw0)&(nextr6) Dropchopstick(nextr);/放筷子过程 else printf(输入超出范围,请重新输入!n);break;case 3:return(0);default:printf(输入超出范围,请重新输入.n); scanf(%d,&i);return(1);int main()/主函数操作 printf(哲学家就餐问题。n规则:每个人只有申请到了左边的筷子才可以申请右边的筷子。n); for(int m=0;mn;m+) chopstickm=0; for
9、(int c=0;cn;c+) Readcountc=0; int i;printf(请输入编号:n1-拿放筷子操作n2-退出n);scanf(%d,&i);while(i!=2)select();printf(n);printf(请输入编号:n1-拿放筷子操作n2-退出n);printf(n);scanf(%d,&i);return(1);6 调试分析实验调试过程中遇到的问题:起初认为这个设计题目还是比较简单的,但实验中还是遇到很多问题,容易绕弯路,实验要求用语言编程实现P、V原语并用P、V原语哲学家就餐问题:为每个哲学家各编一段程序描述他们的行为,试用P、V操作实现。特别是实现“阻塞”和“
10、唤醒”功能过程中,频繁出错。后来尝试添加chopstickn;/筷子状态标志,解决了不能直观了解筷子状态这个问题。7 测试结果源程序算法选择界面运行结果:拿筷子操作:放筷子操作:拿筷子失败:放筷子失败:退出:参考文献1任满杰等,操作系统原理实用教程, 电子工业出版社 , 2006 3汤子瀛 汤小丹 梁红兵等,计算机操作系统(修订版),西安电子科技大学出版社 ,20014张尧学 史美林,计算机操作系统教程实验指导 ,清华大学出版社 ,2000 5罗宇等 ,操作系统课程设计,机械工业出版社 , 2005心得体会本次设计收获很多,基本掌握了信号量通信方式的一般方法,对同步和互斥的概念及实现技术也有了
11、一定理解,特别是设计中用到的系统实现“阻塞”和“唤醒”功能的方法和技巧。设计过程中遇到的一些问题,通过咨询老师、请教同学都一一解决。以前不太懂的问题也通过本次设计予以解决,本次课程设计让我受益匪浅。信息科学与工程 学院课程设计成绩评价表课程名称:操作系统系统原理设计题目:处理机调度程序专业:计算机科学与技术 班级: 1 姓名: 学号 序号评审项目分 数满分标准说明1内 容思路清晰,语言表达准确,概念清楚,论点正确;设计方法科学,分析归纳合理;结论严谨,设计有应用价值。任务饱满,工作量适中2创 新内容新颖,设计能反映新技术,对前人工作有改进或突破,或有独特见解3完整性、实用性整体构思后合理,理论依据充分,设计完整,实用性强4数据准确、可靠数据准确,算法设计合理5规 范 性设计格式、绘图、实验数据、标准的运用等符合有关标准和规定6纪 律 性遵守课程设计纪律,听从指导教师安排,设计过程态度认真7答 辩准备充分,思路清晰、论点正确、对设计方案理解深入,问题回答有理有据,简明正确总 分综合意见 指导教师 年 月 日
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1