专业: 计算机科学与技术
班级: 08计本(2)班
题目名称: 苹果问题
完成日期: 2011 年 6 月。
目录。目录 1
1.设计题目与要求 2
1.1设计目的 2
1.2设计要求 2
2. 总体设计思想 2
2.1总体设计思想 2
3. 功能设计 3
3.1 数据结构设计 3
3.2模块说明 3
3.3 各模块的算法流程图 4
3.4 p、v原语的描述 7
4 .开发平台及程序清单的主要部分 8
4.1开发平台 8
5. 运行结果与运**况分析 9
5.1运行结果 9
6. 自我评价与总结 10
7. 参考资料 11
附录 121、分工说明: 12
2、程序源**: 12
通过实现吃水果问题的同步,深入了解和掌握进程同步的原理。
吃水果问题的描述:
桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。爸爸专门向盘子中放苹果(apple),妈妈专门向盘子中放橘子(orange),两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。
这是进程同步与互斥问题的模拟,可以把向盘子放或取水果的每一个过程可以转为一个进程的操作,这些进程是互斥的,同时也存在一定的同步关系。通过编程实践时,实际是随机的调用一个进程的操作,而这些进程的操作相当于程序中的函数调用。而计算机在执行时每一个时刻只能执行一个操作,这就是互斥的表现。
同步的模拟可以类似于函数调用时的前提关系即先决条件。这样进程同步模拟就完全可以通过函数的调用来实现。
具体的每一个操作的对应的函数的关系:
爸爸向盘子中放一个苹果:father()
妈妈向盘子中放一个橘子:mother()
儿子1从盘子取一个橘子:son1()
儿子2从盘子取一个橘子:son2()
女儿1从盘子取一个橘子:daugther1()
女儿2从盘子取一个橘子:daugther2()
1)用一个整型变量plate_size表示盘子里的水果数量,初始值为0,当放水果时plate_size加1,取水果时plate_size减1。变量plate_size的最大值为2,当为2时表示盘子已经满,此时若进行放水果操作,放水果将处于等待状态;为0时表示盘子为空,此时若进行取水果操作,取水果操作将处于等待状态,plate_size是爸爸和妈妈进行放水果的私有信号量。
2)整型变量orange和apple分别表示盘子中的橘子和苹果数目,初始都为0,其中orange是儿子的私有变量,apple是女儿的私有变量,盘子中的总水果数是 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.2.1 主函数。
用一个随机的函数产生0—5的6个整数,即 i=rand()%6,分别对应六个进程的调用,调用的次数可以通过修改k值来实现,for(k=0;k<10;k++)本程序共产生了10次随机的调用进程。
3.2.2 6个进程函数。
爸爸向盘子中放一个苹果操作:father()
妈妈向盘子中放一个橘子操作:mother()
儿子1从盘子取一个橘子操作:son1()
儿子2从盘子取一个橘子操作:son2()
女儿1从盘子取一个橘子操作:daugther1()
女儿2从盘子取一个橘子操作:daugther2()
3.2.3 print函数。
用于输出盘子中苹果和橘子的个数,水果总个数及哪些进程处于等待状态。
3.3.1放水果操作。
a、爸爸放苹果进程的操作流程图:
b、妈妈放橘子进程的操作流程图。
3.3.2取水果操作。
儿子1取橘子的操作流程图。
女儿i取苹果的操作流程图。
semaphore plate_siz
semaphore apple
semaphore orange
father()
while(ture)
p(plate_siz)
p(mutex)
父亲向盘子中放进一个苹果。
v(apple)
v(mutex)
mother()
while(ture)
p(plate_siz)
p(mutex)
母亲向盘子中放进一个桔子。
v(orange)
v(mutex)
son(i)
while(ture)
p(plate_siz)
p(mutex)
p(apple)
儿子从盘子中走一个桔子。
v(orange)
v(mutex)
daugther (i)
while(ture)
p(plate_siz)
p(mutex)
女儿从盘子中走一个苹果。
v(apple)
v(mutex)
(1)使用系统:windows xp
2)使用语言:c++
3)开发工具:visual c++ 6.0
第一次运行结果为:
第二次运行结果为:
此次试验是完全在小组合作下完成的,首先在分析问题并把问题转化为编程问题,对进程同步理解的比较透彻;其次我用了个随机函数来调用相应的进程函数,这对进程间的同步和等待状态有很好的说明和十分的全面;再次我们设了六个bool型的变量来表示各进程时候处于等待状态,还设置了相应的整型变量来解决等待进程在适当的条件下自动调用的先后问题。
任有不足之处,由于各进程调用是随机的,在某个处于等待状态时,可以还能被调用,事实上这不是很合理。因为处于等待状态的进程就不可能在被分配调用。再有就是程序有些**部分有重的,可以把这些重复执行的**写成函数,需要用时直接调用**函数。
这次自己的收获还是不小,首先使我们提高了分析问题,并根据需求转化成相应的程序结构的能力;其次也丰富了自己编写程序,调试程序的经验,这使得我编程时可能出现的错误的认识,并如何去避免产生了新的认识。
对于此题我觉得除了可以用随机函数来产生随机数来调用相应的进程函数,也可以用人输入的方式来选择调用相应的进程函数,这样可以会麻烦些,不过对进程同步的模拟可能会更加透彻。
总的来说这次试验比较成功,加深我了进程的理解,同时也提高了自己的编程的能力。编程是个长久的过程,平时要多去动手实践,去提高自己分析问题、发现问题、解决问题的能力。
1]宗大华,宗涛,陈吉人著操作系统北京:人民邮电出版社,2009
2]李爱华,程磊著面相对象程序设计(c++语言) 北京: 清华大学出版社,2010
3]宋晓宇 , windows操作系统核心编程实验教程中国铁道出版社。
4]张丽芬刘利雄王金玉编著操作系统实验教程清华大学出版社。
#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; /六个进程处于等待时,变量值为true
void main() main()函数,实现其他功能函数的调用。
void print();函数声明。
void father();
void mother();
操作系统课程设计报告苹果问题
操作系统课程设计。学号 1033050105 姓名 叶佳佳。专业 计算机科学与技术 课程 操作系统。指导教师 髙婕姝。时间 2015 3 9 成绩。目录。目录 11 设计题目与要求 2 1.1设计目的 2 1.2设计要求 2 2 总体设计思想 2 2.1总体设计思想 2 3 功能设计 3 3.1 数...
操作系统课程设计报告
西安郵電大學。院系名称 计算机学院。专业名称 软件工程。班级 1104 学生姓名 赵大伟。学号 8位 04113124 指导教师 舒新峰。设计起止时间 2013.11.10 2013.11.20 1 通过观察 分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中...
操作系统课程设计报告
课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...