操作系统课程设计。
学号: 1033050105
姓名: 叶佳佳。
专业: 计算机科学与技术
课程: 操作系统。
指导教师: 髙婕姝。
时间: 2015/3/9
成绩。目录。
目录 11.设计题目与要求 2
1.1设计目的 2
1.2设计要求 2
2. 总体设计思想 2
2.1总体设计思想 2
3. 功能设计 3
3.1 数据结构设计 3
3.2程序清单 3
3.3运行结果 4
4. 设计心得 5
5. 参考资料 6
附录 7程序源**: 7
了解信号量机制,了解并掌握进程同步和互斥机制,熟悉信号量的操作函数,利用信号量实现对资源共享的控制。
通过实现吃水果问题的同步,深入了解和掌握进程同步的原理。
编程模拟实现这一问题的程序控制,分析处理过程。
吃水果问题的描述:
桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。爸爸专门向盘中放苹果(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个整数,分别对应六个进程的调用。
用一个随机的函数产生0—5的6个整数,即 i=rand()%6,分别对应六个进程的调用,调用的次数可以通过修改k值来实现,for(k=0;k<10;k++)本程序共产生了10次随机的调用进程。
2)6个进程函数。
爸爸向盘子中放一个苹果操作:father()
妈妈向盘子中放一个橘子操作:mother()
儿子1从盘子取一个橘子操作:son1()
儿子2从盘子取一个橘子操作:son2()
女儿1从盘子取一个橘子操作:daugther1()
女儿2从盘子取一个橘子操作:daugther2()
(3)print函数。
用于输出盘子中苹果和橘子的个数,水果总个数及哪些进程处于等待状态。
semaphore plate_siz
semaphore appl
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]宗大华,宗涛,陈吉人著操作系统北京:人民邮电出版社,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();
void son1();
void son2();
void daughter1();
void daughter2();
int k;
srand((unsigned)time(null));srand()函数产生一个以当前时间开始的随机种子
for(k=0;k<10;k++)
{ cout<<"第"< int i=rand()%6; /随进生成6以内的整数,即0-5的6个整数。
plate_size=apple+orange;
int monfa_c,daughter_b,son_a; /for语句的局部变量,控制进程等待的优先次序,monfa_c=2,mather()执行,monfa_c=1,father()执行。
switch(i) /0为father()调用,1为mother()调用为son1()、son2()调为daughteri()调用。
{ case 0:
cout<<"father调用。" father_lag=true; /father()等待。 print(); if(mother_lag==false) monfa_c=1; 专业 计算机科学与技术 班级 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 各... 西安郵電大學。院系名称 计算机学院。专业名称 软件工程。班级 1104 学生姓名 赵大伟。学号 8位 04113124 指导教师 舒新峰。设计起止时间 2013.11.10 2013.11.20 1 通过观察 分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中... 课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...操作系统课程设计报告 苹果问题
操作系统课程设计报告
操作系统课程设计报告