操作系统课程设计吃水果问题完整版_第1页
操作系统课程设计吃水果问题完整版_第2页
操作系统课程设计吃水果问题完整版_第3页
操作系统课程设计吃水果问题完整版_第4页
操作系统课程设计吃水果问题完整版_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、沈阳理工大学课程设计专用纸 1目目录录1 题目内容及要求题目内容及要求.21.1题目名称.21.2题目描述.21.3解题思路.21.4程序清单.61.5提交结果框图.162 总结总结.203 参考文献参考文献.20沈阳理工大学课程设计专用纸 21 题目内容及要求题目内容及要求1.1 题目名称题目名称进程同步模拟设计:吃水果问题1.2 题目描述题目描述桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。1.3 解题思路解题思路将问题转换为信号量上的资源分配类型问题: 这是

2、进程同步问题的模拟,可以把向盘子放或取水果的每一个过程可以转为一个进程的操作,这些进程是互斥的,同时也存在一定的同步关系。通过编程实践时,实际是随机的调用人一个进程的操作,而这些进程的操作相当于程序中的函数调用。而计算机在执行时每一个时刻只能执行一个操作,这就默认了互斥。同步的模拟可以类似于函数调用时的前提关系即先决条件。这样进程同步模拟就完全可以通过函数的调用来实现。 具体的每一个操作的对应的函数的关系: 爸爸向盘子中放一个苹果:Father() 妈妈向盘子中放一个橘子:Mother() 儿子 1 从盘子取一个橘子:Son1() 儿子 2 从盘子取一个橘子:Son2()女儿 1 从盘子取一个

3、苹果:Daugther1()儿子 1 从盘子取一个苹果:Daugther2()沈阳理工大学课程设计专用纸 3具体实现方案: (1)用一个整型变量 Plate_Size 表示盘子,初始值为 0,当放水果时Plate_Size 加 1,取水果时 Plate_Size 减 1。变量 Plate_Size 的最大值为2,当为 2 时表示盘子已经满,此时若进行放水果操作,放水果将处于等待状态;为 0 时表示盘子为空,此时若进行取水果操作,取水果操作将处于等待状态。(2)整型变量 orange 和 apple 分别表示盘子中的橘子和苹果数目,初始都为 0,Plate_Size=apple+orange。(

4、3)用 6 个 bool 型的变量 Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daughter2_lag 表示六个进程是否处于等待状态。处于等待时,变量值为 true。(4)两个放水果进程进程同时处于等待状态时,若有取水果的操作将自动执行等待的放水果进程,执行按等待的先后顺序;两个取苹果或橘子进程同时候处于等待状态,若有放苹果或橘子的操作将自动执行等待的取进程,进行按等待的先后顺序。(5)用一个随机的函数产生 05 的 6 个整数,分别对应六个进程的调用。沈阳理工大学课程设计专用纸 4放水果操作流程图设计(以 Father 为例

5、,Mother 类似):否Father 操作:Plate_Size=2否Daugther1 或 Daugher2 处于等待状态是按等待先后顺序调用Daugther1 或 Daughter2 操作是Father 进程处于等待状态Father 进程调用:apple+1Plate_Size+1,Print()函数调用返回 图 1 Father 放水果操作流程图沈阳理工大学课程设计专用纸 5取水果操作流程图设计(以 Son 为例,Daughter 类似):Son 操作:orange=0否否Father 或 Mother 处于等待状态是按等待先后顺序调用Father 或 Mother 操作是Son 进程

6、处于等待状态Son 进程调用:orange-1Plate_Size-1,Print()函数调用返回 图 2 Son 取水果(橘子)操作流程图沈阳理工大学课程设计专用纸 61.4 程序清单程序清单#include #include #include #include int apple=0;int orange=0;bool Father_lag;bool Mother_lag;bool Son1_lag;bool Son2_lag;int son_a;int Daughter_b;bool Daughter1_lag;bool Daughter2_lag;void Print()cout 现在

7、盘子里有apple个苹果,orange个橘子,共有apple+orange个水果.endl;if(Father_lag=true)cout Father 进程处于等待状态,endl;if(Mother_lag=true)cout Mother 进程处于等待状态,endl;if(Son1_lag=true)cout Son1 进程处于等待状态,endl;if(Son2_lag=true) cout Son2 进程处于等待状态, endl;if(Daughter1_lag=true)cout Daughter1 进程处于等待状态,endl;if(Daughter2_lag=true)cout Da

8、ughter2 进程处于等待状态,endl;if(Father_lag=false)&(Mother_lag=false)&(Son1_lag=false)&(Son2_lag=false)&(Daughter1_lag=false)&(Daughter2_lag=false)!=true)coutendl;void Father() /Father 进程apple+;Print();void Mother() /Mother 进程orange+;沈阳理工大学课程设计专用纸 7Print();void Son1() /Son1 进程orange-;Pri

9、nt();void Son2() /Son2 进程orange-;Print();void Daughter1() /Daughter1 进程apple-;Print();void Daughter2() /Daughter2 进程apple-;Print();void main()int i;int Plate_Size;/水果数量int MonFa_c;/用于爸爸妈妈等待次序的区别int Son_a;/用于两个儿子等待次序的区别int daughter_b;/用于两个女儿等待次序的区别int k;/产生进程调用的数量srand(unsigned)time(NULL);/srand()函数产

10、生一个以当前时间开始的随机种子 for(k=0;k10;k+) coutendl;cout*第k+1次操作*endl;i=rand()%6; /随进生成 1-5.Plate_Size=apple+orange;switch(i)case 0:cout Father 调用.endl;沈阳理工大学课程设计专用纸 8if(Plate_Size=2)Father_lag=true;/Father()等待Print();if(Mother_lag=false)MonFa_c=1;elseFather();if(Daughter1_lag=true)&(Daughter2_lag=true)if(

11、Daughter_b=1)Daughter1_lag=false;/Daughter1 等待取消cout 处于等待的 Daughter1 自动被调用endl;Daughter1(); /处于等待的 Daughter1 自动调用Daughter_b=2;else Daughter2_lag=false;/Daughter2 等待取消cout 处于等待的 Daughter2 自动被调用endl;Daughter2(); /处于等待的 Daughter2()自动调用Daughter_b=1;elseif(Daughter1_lag=true)Daughter1_lag=false;/Daughter

12、1 等待取消cout 处于等待的 Daughter1 自动被调用endl;Daughter1(); /处于等待的 Daughter1()自动调用Daughter_b=0;else if(Daughter2_lag=true)Daughter2_lag=false;/Daughter2 等待取消cout 处于等待的 Daughter1 自动被调用endl;沈阳理工大学课程设计专用纸 9Daughter2(); /处于等待的 Daughter2()自动调用Daughter_b=0;break;case 1:cout Mother 调用.endl;if(Plate_Size=2)Mother_lag

13、=true; /等待Print();if(Father_lag=false)MonFa_c=2;elseMother();if(Son1_lag=true)&(Son2_lag=true)if(Son_a=1)Son1_lag=false;/Son1 等待取消cout 处于等待的 Son1 自动被调用endl;Son1(); /处于等待的 Son1()自动调用Son_a=2;else Son2_lag=false;/Son2 等待取消cout 处于等待的 Son2 自动被调用endl;Son2(); /处于等待的 Son2()自动调用Son_a=1;else if(Son1_lag=t

14、rue)Son1_lag=false; /Son1 等待取消cout 处于等待的 Son1 自动被调用endl;沈阳理工大学课程设计专用纸 10Son1(); /处于等待的 Son1()自动调用Son_a=0;else if(Son2_lag=true)Son2_lag=false; /Son2 等待取消cout 处于等待的 Son2 自动被调用endl;Son2(); /处于等待的 Son2()自动调用Son_a=0;break;case 2: cout Son1 调用.endl;if(orange=0)Son1_lag=true; /Son1 处于等待Print();if(Son2_lag

15、=false)Son_a=1; /用于判断 Son1 和 Son2 等待的先后性elseSon1();if(Father_lag=true)&(Mother_lag=true)if(MonFa_c=1) /Father 和 Mother 同时处于等待,但 Father 先等待,因此先调用Father_lag=false;cout 处于等待的 Father 自动被调用endl;Father();MonFa_c=2;else /Father 和 Mother 同时处于等待,但 Mother 先等待,因此先调用Mother_lag=false;cout 处于等待的 Mother 自动被调用e

16、ndl;Mother();沈阳理工大学课程设计专用纸 11MonFa_c=1;elseif(Father_lag=true) /只有 Father 处于等待,调用Father_lag=false;cout 处于等待的 Father 自动被调用endl;Father();MonFa_c=0;else if(Mother_lag=true)/只有 Mother 处于等待,调用Mother_lag=false;cout 处于等待的 Mother 自动被调用endl;Mother();MonFa_c=0;break;case 3:cout Son2 调用.endl;if(orange=0)Son2_l

17、ag=true; /Son2 处于等待Print();if(Son1_lag=false)Son_a=2;elseSon2();if(Father_lag=true)&(Mother_lag=true)if(MonFa_c=1)/Father 和 Mother 同时处于等待,但 Father 先等待,因此先调用Father_lag=false;cout 处于等待的 Father 自动被调用endl;沈阳理工大学课程设计专用纸 12Father();MonFa_c=2;else /Father 和 Mother 同时处于等待,但 Mother 先等待,因此先调用Mother_lag=fa

18、lse;cout 处于等待的 Mother 自动被调用endl;Mother();MonFa_c=1;elseif(Father_lag=true) /只有 Father 处于等待,调用Father_lag=false;cout 处于等待的 Father 自动被调用endl;Father();MonFa_c=0;else if(Mother_lag=true) /只有 Mother 处于等待,调用Mother_lag=false;cout 处于等待的 Mother 自动被调用endl;Mother();MonFa_c=0;break;case 4:cout Daughter1 调用.endl;

19、if(apple=0)Daughter1_lag=true; /Daughter1 等待Print();if(Daughter2_lag=false)Daughter_b=1;else沈阳理工大学课程设计专用纸 13Daughter1(); if(Father_lag=true)&(Mother_lag=true)if(MonFa_c=1) /Father 和 Mother 同时处于等待,但 Father 先 /等待,因此先调用Father_lag=false;cout 处于等待的 Father 自动被调用endl;Father();MonFa_c=2;else /Father 和 M

20、other 同时处于等待,但 Mother 先等待,因此先调用Mother_lag=false;cout 处于等待的 Mother 自动被调用endl;Mother();MonFa_c=1;elseif(Father_lag=true) /只有 Father 处于等待,调用Father_lag=false;cout 处于等待的 Father 自动被调用endl;Father();MonFa_c=0;else if(Mother_lag=true) /只有 Mother 处于等待,调用Mother_lag=false;cout 处于等待的 Mother 自动被调用endl;Mother();Mo

21、nFa_c=0;break;case 5:沈阳理工大学课程设计专用纸 14cout Daughter2 调用.endl;if(apple=0)Daughter2_lag=true;/Daughter2 等待Print();if(Daughter1_lag=false)Daughter_b=2;elseDaughter2();if(Father_lag=true)&(Mother_lag=true)if(MonFa_c=1) /Father 和 Mother 同时处于等待,但 Father 先等待,因此先调用Father_lag=false;cout 处于等待的 Father 自动被调用

22、endl;Father();MonFa_c=2;else /Father 和 Mother 同时处于等待,但 Mother 先等待,因此先调用 Mother_lag=false;cout 处于等待的 Mother 自动被调用endl;Mother();MonFa_c=1;else if(Father_lag=true) /只有 Father 处于等待,调用 Father_lag=false;cout 处于等待的 Father 自动被调用endl;Father();MonFa_c=0;else if(Mother_lag=true) /只有 Mother 处于等待,调用 Mother_lag=false;cout 处于等待的 Mother 自动被调用endl;沈阳理工大学课程设计专用纸 15Mother();MonFa_c=0;break;沈阳理工大学课程设计专用纸 161.5 提交结果框图提交结果框图由于程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论