操作系统吃水果问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
长治学院
课程设计报告
课程名称:操作系统课程设计
设计题目:进程同步模拟——吃水果问题
系别:计算机系
专业:计算机科学与技术
组别:第8组
学生姓名: ### 学号: 123456123
起止日期:2011 年6月28日~ 2011年7月3
日
指导教师:¥¥¥
目录
第一章具体设计任务和开发环境 (3)
1.1 任务称述 (3)
1.2 开发环境 (3)
第二章基本思路及所涉及的相关理论 (3)
2.1吃水果问题的转换 (3)
2.2 数据结构 (4)
2.2.1 吃水果问题的数据结构 (4)
第三章方案设计 (4)
3.1主函数 (4)
3.2 6个进程函数 (4)
3.3 Print函数 (5)
3.4 取水果操作 (5)
第四章具体配置及实现步骤; (6)
4.1 儿子取水果实现 (6)
4.2 运行结果 (11)
5.1 过程中出现的问题及相应解决办法 (13)
第六章个人体会及建议 (13)
6.1 个人体会 (13)
6.1 建议 (14)
参考文献 (14)
第一章具体设计任务和开发环境
1.1 任务称述
桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。
1.2 开发环境
(1)使用系统:Windows XP
(2)使用语言:C++
(3)开发工具:Visual C++ 6.0
第二章基本思路及所涉及的相关理论
2.1吃水果问题的转换
进程的操作,这些进程是互斥的,同时也存在一定的同步关系。通过编程实践时,实际是随机的调用人一个进程的操作,而这些进程的操作相当于程序中的函数调用。而计算机在执行时每一个时刻只能执行一个操作,这就默认了互斥。同步的模拟可以类似于函数调用时的前提关系即先决条件。这样进程同步模拟就完全可以通过函数的调用来实现。
具体的每一个操作的对应的函数的关系:
爸爸向盘子中放一个苹果:Father()
妈妈向盘子中放一个橘子:Mother()
儿子1从盘子取一个橘子:Son1()
儿子2从盘子取一个橘子:Son2()
女儿1从盘子取一个苹果:Daugther1()
儿子1从盘子取一个苹果:Daugther2()
2.2 数据结构
2.2.1 吃水果问题的数据结构
(1)用一个整型变量Plate_Size表示盘子,初始值为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表示六个进程是否处于等待状态。处于等待时,变量值为true。
(4)两个放水果进程进程同时处于等待状态时,若有取水果的操作将自动执行等
待的放水果进程,执行按等待的先后顺序;两个取苹果或橘子进程同时候处于等待状态,若有放苹果或橘子的操作将自动执行等待的取进程,进行按等待的先后顺序。
(5)用一个随机的函数产生0—5的6个整数,分别对应六个进程的调用。
第三章方案设计
3.1主函数
用一个随机的函数产生0—5的6个整数,分别对应六个进程的调用,调用的次数可以自己输入,本程序共产生了10次随机的调用进程。
3.2 6个进程函数
爸爸向盘子中放一个苹果操作:Father()
妈妈向盘子中放一个橘子操作:Mother()
儿子1从盘子取一个橘子操作:Son1()
儿子2从盘子取一个橘子操作:Son2()
女儿1从盘子取一个橘子操作:Daugther1()
女儿2从盘子取一个橘子操作:Daugther2()
3.3 Print函数
用于输出盘子中苹果和橘子的个数,水果总个数及有哪些进程处于等待状态。
3.4 取水果操作
儿子1或2取橘子的操作流程图:
第四章具体配置及实现步骤;
4.1 儿子取水果实现
程序代码如下:
#include
#include
#include
#include
using namespace std;
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;
//3.2.1 Print函数(打印盘子剩余水果及各进程等待状态)
void Print()
{
cout<<"现在盘子里有"< if(Father_lag==true) cout<<"Father进程处于等待状态,"; if(Mother_lag==true) cout<<"Mother进程处于等待状态,"; if(Son1_lag==true) cout<<"Son1进程处于等待状态,"; if(Son2_lag==true) cout<<"Son2进程处于等待状态, "; if(Daughter1_lag==true) cout<<"Daughter1进程处于等待状态,"; if(Daughter2_lag==true)