




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计(论文) 题 目: 吃水果问题(进程同步) 院 (系): 信息与控制技术 专业班级: 计算机2012 姓 名: 李敏 学 号: 201206060111 指导教师: 董丽丽 2015年 1 月 23日西安建筑科技大学华清学院课程设计(论文)任务书专业班级: 计算机1201班 学生姓名: 李敏 指导教师(签名): 董丽丽 一、课程设计(论文)题目吃水果问题(进程同步):桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。二、本次课程设计(论文)应达到的目的操作系统
2、课程实践性比较强。课程设计是加强学生实践能力的一个强有力手段。课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。本题目要达到目的:了解信号量机制,了解并掌握进行同步和机制,熟悉信号量的操作函数,利用信号量实现对共享资源的控制。三、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术参数、设计要求等) 这是进程同步问题的模拟,可以把向盘子放或取水果的每一个过程可以转为一个进程的操作,这些进程是互斥的,同时也存在一定的同步关系。进行编程时,实际是随机的调用一个进程的操作,
3、而这些进程的操作相当于程序中的函数调用。而计算机在执行时每一个时刻只能执行一个操作,这就默认了互斥。同步的模拟可以类似于函数调用时的前提关系即先决条件。这样进程同步模拟就完全可以通过函数的调用来实现。具体的每一个操作的对应的函数的关系:爸爸向盘子中放一个苹果:Father();妈妈向盘子中放一个橘子:Mother();儿子1从盘子取一个橘子:Son1();儿子2从盘子取一个橘子:Son2();女儿1从盘子取一个苹果:Daugther1();女儿2从盘子取一个苹果:Daugther2()。四、应收集的资料及主要参考文献: 操作系统经典算法的编程实现资料非常丰富,可以在图书馆找书籍或在因特网上找资
4、料,都很容易找到,但是大部分代码是不全的,不能直接运行,希望大家只是把它当参考,编码还是自己做。 参考文献:【1】汤小丹、梁红兵、哲凤屏、汤子瀛 编著.计算机操作系统(第三版).西安:西安电子科技大学出版社,2007.5【2】史美林编.计算机操作系统教程.北京:清华大学出版社,1999.11【3】徐甲同编著.操作系统教程.西安:西安电子科技大学出版社,1996.8【4】Clifford,A.Shaffer编著.数决结构与算法分析(C+版).北京:电子工业出版社,2005.7【5】蒋立翔编著.C+程序设计技能百练.北京:中国铁道出版社,2004.1五、审核批准意见教研室主任(签字) 设计总说明题
5、目内容: 桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。设计思路: 吃水果问题可以利用进程同步的转换,以函数的方式来设计。实现方法: 通过函数的调用的方法来实现。设计结果: 得出盘子中的苹果和橘子数功能模块: 放水果:爸爸往盘子中放苹果,妈妈往盘子中放橘子。取水果两女儿在盘子中取苹果,两儿子在盘子中取橘子。 关键字:苹果 橘子 C+目录1.设计目的12.问题描述23.需求分析34.概要设计45.详细设计66.调试分析127.使用说明148.设计总结159.参考文献
6、1610.程序源代码17操作系统课程设计 吃水果问题(进程同步)1.设计目的“操作系统”是计算机专业的核心专业课,“操作系统课程设计”是理解和巩固操作系统基本理论、原理和方法的重要的实践环节。 操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统基本理论与管理方式。在算法基础上,解决实际的管理功能的问题,提高学生实际应用、编程的能力。课程设计要求学生在完成程序设计的同时能够撰写比较规范的设计
7、报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。2. 问题描述桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。3.需求分析3.1 数据需求 爸爸向盘子中放一个苹果:Father() 妈妈向盘子中放一个橘子:Mother() 儿子1从盘子取一个橘子:Son1() 儿子2从盘子取一个橘子:Son2()女儿1从盘子取一个苹果:Daugther1()儿子1从盘子取一个苹果:Daugther2() 3.2 基本功
8、能需求吃水果问题的需求,主要是放水果和取水果的事情。而这吃水果问题是进程同步问题的模拟,可以把向盘子放或取水果的每一个过程可以转为一个进程的操作,这些进程是互斥的,同时也存在一定的同步关系。我通过这次编程实践时,调用一个进程的操作,计算机在执行时每一个时刻只能执行一个操作,这就默认了互斥。放取水果也向我们展示了进程同步。3.3 非功能性需求用户界面需求:简洁、易用、易懂、友好的用户界面。硬件要求:装有Visual C+6.0的计算机。可靠性需求:保证用户在正常使用本系统时,用户的操作或误操作不会产生数据的丢失。4.概要设计4.1 数据结构(1) 用一个整型变量Plate_Size表示盘子,初始
9、值为0,当放水果时Plate_Size加1,取水果时Plate_Size减1。变量Plate_Size的最大值为2,当为2时表示盘子已经满,此时若进行放水果操作,放水果将处于等待状态;为0时表示盘子为空,此时若进行取水果操作,取水果操作将处于等待状态。(2) 整型变量orange和apple分别表示盘子中的橘子和苹果数目,初始都为0,Plate_Size=apple+orange。(3) 用6个bool型的变量 Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daughter2_lag表示六个进程是否处于等待状态。处于等待时,变量值为
10、true。(4) 两个放水果进程进程同时处于等待状态时,若有取水果的操作将自动执行等待的放水果进程,执行按等待的先后顺序;两个取苹果或橘子进程同时候处于等待状态,若有放苹果或橘子的操作将自动执行等待的取进程,进行按等待的先后顺序。(5) 用一个随机的函数产生05的6个整数,分别对应六个进程的调用。4.2 系统包含的函数 主函数: 用一个随机的函数产生05的6个整数,分别对应六个进程的调用,调用的次数可以自己输入,本程序共产生了10次随机的调用进程。 6个进程函数: 爸爸向盘子中放一个苹果操作:Father() 妈妈向盘子中放一个橘子操作:Mother() 儿子1从盘子取一个橘子操作:Son1(
11、) 儿子2从盘子取一个橘子操作:Son2() 女儿1从盘子取一个橘子操作:Daugther1() 女儿2从盘子取一个橘子操作:Daugther2() Print函数: 此函数主要功能是用于得到输出盘子中苹果和橘子的个数,以及水果总个数并且是哪些进程处于等待状态。4.3 函数间的关系 6个进程函数和print函数共同影响着主函数。而6个进程函数则决定着主函数和print函数的运行。4.4 系统功能模块图 吃水果 取水果放水果两儿子取橘子两女儿取苹果妈妈放橘子爸爸放苹果 图4-1 系统功能模块图”5.详细设计5.1 结构体的详细定义int Plate_Size=0; /表示盘子中当前有几个水果in
12、t orange=0,apple=0; /表示盘子中orange和apple的个数bool Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daughter2_lag; /六个进程处于等待时,变量值为true5.2 系统函数详细介绍 主函数: void main() /main()函数,实现其他功能函数的调用 void Print(); /函数声明 void Father(); void Mother(); void Son1(); void Son2(); void Daughter1(); void Daughter2(); in
13、t k; srand(unsigned)time(NULL);/srand()函数产生一个以当前 时间开始的随机种子 Print函数:void Print() /Print函数(打印盘子剩余水果及各进程等待状态) cout现在盘子里有apple个苹果,orange个橘子,共有apple+orange个水果.endl;if(Father_lag=true)coutFather进程处于等待状态,;if(Mother_lag=true)coutMother进程处于等待状态,;if(Son1_lag=true)coutSon1进程处于等待状态,;if(Son2_lag=true) coutSon2进程
14、处于等待状态, ;if(Daughter1_lag=true)coutDaughter1进程处于等待状态,;if(Daughter2_lag=true)coutDaughter2进程处于等待状态,;if(Father_lag=false)&(Mother_lag=false)&(Son1_lag=false)&(Son2_lag=false)&(Daughter1_lag=false)&(Daughter2_lag=false)!=true)coutendl; 6个进程函数:void Father() /Father进程apple+;Print();void Mother() /Mother进
15、程orange+;Print();void Son1() /Son1进程orange-;Print();void Son2() /Son2进程orange-;Print();void Daughter1() /Daughter1进程apple-;Print();void Daughter2() /Daughter2进程apple-;Print();5.3 系统功能模块介绍最主要的是放水果和取水果模块,其中爸爸和妈妈分别放苹果和橘子,而儿子和女儿分别取橘子和苹果。5.4 具体模块设计放水果操作A、爸爸放苹果进程的操作流程图:Father操作:Plate_Size=2否否Daugther1或Dau
16、gher2处于等待状态是按等待先后顺序调用Daugther1或Daughter2操作是Father进程处于等待状态Father进程调用:apple+1Plate_Size+1,Print()函数调用返回 图5-1爸爸放苹果图B、妈妈放橘子进程的操作流程图Mothe操作:Plate_Size=2否否Son1或Son2处于等待状态是按等待先后顺序调用Son1或Son2操作是Mather进程处于等待状态Mather进程调用:orange+1Plate_Size+1,Print()函数调用返回 图5-2妈妈放橘子图取水果操作 儿子i取橘子的操作流程图Son i操作:Plate_Size=0否否Moth
17、er处于等待状态是调用Mother操作是Son i进程处于等待状态Son i进程调用:orange-1Plate_Size-1,Print()函数调用返回 图5-3儿子取橘子图女儿i取苹果的操作流程图Douther i操作:Plate_Size=0否否Father处于等待状态是调用Father操作是Dauther i进程处于等待状态Douther i进程调用:apple-1Plate_Size-1,Print()函数调用返回 图5-4女儿取苹果图6.调试分析(1) 测试数据: 第一次运行: 图6-1第一次运行结果第二次运行: 图6-2第二次运行结果(2) 算法改进设想: 程序有些代码部分有重的
18、,可以把这些重复执行的代码写成函数,需要用时直接调用代码函数。 7.使用说明1.打开microsoft visual C+6.02.点击下面图标3. 得到结果 图7-1使用说明图8. 设计总结此次试验是个人完成的,我首先进行了分析问题,从而把问题转化为编程问题,同时对进程同步有了比较深刻的理解;其次我用了个随机函数来调用相应的进程函数,这对进程间的同步和等待状态有了很好的说明和全面的阐述。之后,我设了六个bool型的变量来表示各进程时候处于等待状态,还设置了相应的整型变量来解决等待进程在适当的条件下自动调用的先后问题。总的来说这次试验比较成功,加深了我对进程的理解,同时也提高了自己的编程的能力
19、。编程是个长久的过程,平时要多去动手实践,去提高自己分析问题、发现问题、解决问题的能力,这样才能更好的发挥自己的设计能力。 9.参考文献【1】汤小丹、梁红兵、哲凤屏、汤子瀛 编著.计算机操作系统(第三版).西安:西安电子科技大学出版社,2007.5【2】史美林编.计算机操作系统教程.北京:清华大学出版社,1999.11【3】徐甲同编著.操作系统教程.西安:西安电子科技大学出版社,1996.8【4】Clifford,A.Shaffer编著.数决结构与算法分析(C+版).北京:电子工业出版社,2005.7【5】蒋立翔编著.C+程序设计技能百练.北京:中国铁道出版社,2004.1 10 程序源代码#
20、include /用到了time函数,所以要有这个头文件#include /用到了srand函数,所以要有这个头文件#include int Plate_Size=0; /表示盘子中当前有几个水果int orange=0,apple=0; /表示盘子中orange和apple的个数bool Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daughter2_lag; /六个进程处于等待时,变量值为truevoid main() /main()函数,实现其他功能函数的调用 void Print(); /函数声明 void Father(
21、); void Mother(); void Son1(); void Son2(); void Daughter1(); void Daughter2(); int k; srand(unsigned)time(NULL);/srand()函数产生一个以当前时间开始的随机种子 for(k=0;k10;k+) cout第k+1次操作:endl; /printf(第%d次操作:n,k+1); int i=rand()%6; /随进生成6以内的整数,即0-5的6个整数 Plate_Size=apple+orange; int MonFa_c,Daughter_b,Son_a; /for语句的局部变
22、量,控制进程等待的优先次序,MonFa_c=2,Mather()执行,MonFa_c=1,Father()执行 switch(i) /0为Father()调用,1为Mother()调用,2、3为Son1()、Son2()调,4、5为Daughteri()调用 case 0: coutFather调用.endl; if(Plate_Size=2) Father_lag=true; /Father()等待 Print(); if(Mother_lag=false) MonFa_c=1; else Father(); if(Daughter1_lag=true)&(Daughter2_lag=tru
23、e) if(Daughter_b=1) Daughter1_lag=false;/Daughter1等待取消 Daughter1(); /处于等待的Daughter1自动调用 Daughter_b=2; /优先级让给Daughter2 else Daughter2_lag=false;/Daughter2等待取消 Daughter2(); /处于等待的Daughter2()自动调用 Daughter_b=1; /优先级让给Daughter1 else if(Daughter1_lag=true) Daughter1_lag=false;/Daughter1等待取消 Daughter1(); /
24、处于等待的Daughter1()自动调用 Daughter_b=0; /没有等待的Dauther进程 else if(Daughter2_lag=true) Daughter2_lag=false;/Daughter2等待取消 Daughter2(); /处于等待的Daughter2()自动调用 Daughter_b=0; break; case 1: coutMother调用.endl; if(Plate_Size=2) Mother_lag=true; /Mother()等待 Print(); if(Father_lag=false) MonFa_c=2; else Mother(); i
25、f(Son1_lag=true)&(Son2_lag=true) /Son1和Son2都等待 if(Son_a=1) /Son1执行 Son1_lag=false;/Son1等待取消 Son1(); /处于等待的Son1()自动调用 Son_a=2; /优先级让给Son2 else Son2_lag=false;/Son2等待取消 Son2(); /处于等待的Son2()自动调用 Son_a=1; /优先级让给Son1 else if(Son1_lag=true) Son1_lag=false; /Son1等待取消 Son1(); /处于等待的Son1()自动调用 Son_a=0; else
26、if(Son2_lag=true) Son2_lag=false; /Son2等待取消 Son2(); /处于等待的Son2()自动调用 Son_a=0; break; case 2: coutSon1调用.endl; if(orange=0) Son1_lag=true; /Son1处于等待 Print(); if(Son2_lag=false) Son_a=1; /用于判断Son1和Son2等待的先后性 else Son1(); if(Father_lag=true)&(Mother_lag=true) if(MonFa_c=1) /Father和Mother同时处于等待,但Father先
27、等待,因此先调用 Father_lag=false; Father(); MonFa_c=2; else /Father和Mother同时处于等待,但Mother先等待,因此先调用 Mother_lag=false; Mother(); MonFa_c=1; else if(Father_lag=true) /只有Father处于等待,调用 Father_lag=false; Father(); MonFa_c=0; else if(Mother_lag=true)/只有Mother处于等待,调用 Mother_lag=false; Mother(); MonFa_c=0; break; ca
28、se 3: coutSon2调用.endl; if(orange=0) Son2_lag=true; /Son2处于等待 Print(); if(Son1_lag=false) Son_a=2; else Son2(); if(Father_lag=true)&(Mother_lag=true) if(MonFa_c=1)/Father和Mother同时处于等待,但Father先等待,因此先调用 Father_lag=false; Father(); MonFa_c=2; else /Father和Mother同时处于等待,但Mother先等待,因此先调用 Mother_lag=false;
29、Mother(); MonFa_c=1; else if(Father_lag=true) /只有Father处于等待,调用Father Father_lag=false; Father(); MonFa_c=0; else if(Mother_lag=true) /只有Mother处于等待,调用Mother Mother_lag=false;Mother();MonFa_c=0; break; case 4: coutDaughter1调用.endl; if(apple=0) Daughter1_lag=true; /Daughter1等待 Print(); if(Daughter2_lag
30、=false) Daughter_b=1; else Daughter1(); if(Father_lag=true)&(Mother_lag=true) if(MonFa_c=1) /Father和Mother同时处于等待,但Father先等待,因此先调用 Father_lag=false; Father(); MonFa_c=2; else /Father和Mother同时处于等待,但Mother先等待,因此先调用 Mother_lag=false; Mother(); MonFa_c=1; else if(Father_lag=true) /只有Father处于等待,调用 Father_
31、lag=false;Father();MonFa_c=0; else if(Mother_lag=true) /只有Mother处于等待,调用 Mother_lag=false;Mother();MonFa_c=0; break; case 5: coutDaughter2调用.endl; if(apple=0) Daughter2_lag=true;/Daughter2等待 Print();if(Daughter1_lag=false) Daughter_b=2; else Daughter2();if(Father_lag=true)&(Mother_lag=true) if(MonFa_c=1) /Father和Mother同时处于等
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 英国罗伯特与学前教育发展史
- 工厂设计答辩结论撰写要点
- 工程项目管理学习资源试题及答案
- 行政管理经济法申诉案例试题及答案
- 社会教育节约用水实施路径
- 2025年工程经济经典例题试题及答案
- 冲刺抢分卷03 备战2025年高考考前仿真模拟卷冲刺抢分卷化学试题03 (辽宁、黑龙江、吉林、内蒙古专用) 含解析
- 生产航天无人机领域装置、海底深水探测动力装置、工业母机直线电机项目可行性研究报告写作模板-备案审批
- 如何优化工程绩效评估试题及答案
- 现代工程经济应用实践试题及答案
- 材料力学第4版单辉祖习题答案
- 消防控制室值班记录1
- 雷尼绍探头编程课件
- 市级优质公开课一元一次不等式组说课课件
- 婚前医学检查证明
- 妇科经带胎产杂99方方歌讲解学习
- 工艺变更通知单
- 一年级音乐教案 这是什么 (市一等奖)
- 20XX-烟草车辆运输方案计划
- 苏教版二年级下册数学竞赛试卷
- 晶体几何基础
评论
0/150
提交评论