操作系统课程设计报告苹果问题

发布 2022-10-05 13:38:28 阅读 1087

操作系统课程设计。

学号: 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 本课程设计要求设计一个模拟...