200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 计算机系统设置与管理实验报告 操作系统实验之进程管理实验报告

计算机系统设置与管理实验报告 操作系统实验之进程管理实验报告

时间:2019-09-12 19:14:24

相关推荐

计算机系统设置与管理实验报告 操作系统实验之进程管理实验报告

《操作系统实验之进程管理实验报告》由会员分享,可在线阅读,更多相关《操作系统实验之进程管理实验报告(8页珍藏版)》请在人人文库网上搜索。

1、武汉理工大学武汉理工大学 学学 生生 实实 验验 报报 告告 书书 实验课程名称实验课程名称 计算机操作系统计算机操作系统 开开 课课 学学 院院 计算机科学与技术学院计算机科学与技术学院 指导老师姓名指导老师姓名 学学 生生 姓姓 名名 学生专业班级学生专业班级 学年 第一学期 学生学号学生学号 实验课成绩实验课成绩 实验二实验二 进程管理进程管理 一、设计目的、功能与要求一、设计目的、功能与要求 1、实验目的 掌握进程管理的相关内容,对进程的同步和互斥,及信号量机制有深入的 理解。 2、实现功能 模拟实现用信号量机制解决经典同步问题 3、具体要求 任选一种计算机高级语言。

2、编程实现; 实现 5 个哲学家(5 只筷子)的顺利就餐 需要避免出现死锁 使用信号量、及信号量的等待队列 使用 p 操作、v 操作 二、问题描述二、问题描述 (1)有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空 盘子,每两人之间放一只筷子,即共 5 只筷子。每个哲学家的行为是思考和进 餐。为了进餐,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的 左边或右边去取筷子。思考时则同时将两支筷子放回原处。 (2)规则: 只有拿到两只筷子时,哲学家才能吃饭; 如果筷子已经在他人手上,则该哲学家必须等到他人吃完之后才能拿到 筷子; 任何一个哲学家在自己没有拿到两只筷子吃饭之前,决。

3、不放下自己手中 的筷子。 (3)可能出现死锁问题,因为当五个哲学家都饥饿时,都拿着一支筷子,这样 就可能五个哲学家都用不上餐。 (4)死锁解决方案: 至多只允许四个哲学家同时进餐,以保证至少有一个哲学家可以进餐, 最终总会释放出他所用过的两只筷子,从而可使更多的哲学家进餐; 仅当左右两只筷子均可用时,才允许哲学家拿起筷子就餐; 规定奇数号哲学家先拿起右边筷子,然后再去拿左边筷子,而偶数号哲 学家则相反。 本实验中采取方法 2. 三、数据结构及功能设计三、数据结构及功能设计 1、数据结构 定义筷子类 Chopstick 和哲学家类 Philosopher,Chopstick 中包含筷子编 号 i。

4、d,筷子的状态 available(表示筷子是否可用) 。包含 takeup 拿起筷子函 数和 putdown 放下筷子函数,相当于申请筷子资源和释放筷子资源。 Philosopher 类中包含哲学家左右手的两只筷子 left、right 以及哲学家的 编号 Phi_num。包含 eat 就餐动作,think 思考动作,finish 完成就餐三种动 作。在 eat 动作中通过判断是否左右手的筷子可以同时拿起来避免程序出现死 锁问题,若可以同时拿起,进行 eat 动作,否则将另一只手中的筷子放下。 /Chopstick 类 class ChopStick private: int id; boo。

5、l available; /是否可以拿起筷子 public: ChopStick(int i = 0) id = i; available = true; /拿起筷子 bool takeup() while (!available) return false; available = false; return true; /放下筷子 void putdown() available = true; ; /Philosopher 类 class Philosopher private: ChopStick int Phi_num; public: Philosopher(int num, Ch。

6、opStick bool eat() bool br, bl; bl = left.takeup(); if (!bl) cout The Philosopher Phi_num is waiting the left chopstick. endl; sleep(1); return false; br = right.takeup(); if (!br) cout The Philosopher Phi_num is waiting the right chopstick. endl; /右筷子不能拿起时放下左筷子 left.putdown(); sleep(1); return fals。

7、e; cout The philosopher Phi_num is having dinner. endl; sleep(1); return true; void think() left.putdown(); right.putdown(); cout The philosopher Phi_num is thinking. endl; sleep(1); void finish() sleep(1); cout The philosopher Phi_num has finished eating. endl; think(); ; 2、功能设计 通过 philosopher 类定义五。

8、个哲学家对象,通过 Chopstick 类定义五只筷 子对象。生成一个 0-4 的随机数,对应首先开始就餐的哲学家。该哲学家开始 就餐,拿起左右手筷子,然后顺时针或者逆时针对其他四个哲学家依次进行吃 饭动作,吃饭之前判断是否可以拿起筷子,不能拿起则进行等待,若拿起了一 只筷子但另一只筷子不能拿起,需要放下另一只手中的筷子继续等待。程序直 到所有哲学家都完成就餐才结束。 四、开发工具及主要源代码四、开发工具及主要源代码 1、开发工具 SublimeText 3 文本编辑器,采用 g+编译。 2、主要源码 /主函数 int main() ChopStick chopstick5 = ChopSti。

9、ck(0), ChopStick(1), ChopStick(2), ChopStick(3), ChopStick(4), ; Philosopher philosopher5 = Philosopher(0, chopstick4, chopstick0), Philosopher(1, chopstick0, chopstick1), Philosopher(2, chopstick1, chopstick2), Philosopher(3, chopstick2, chopstick3), Philosopher(4, chopstick3, chopstick4) ; bool b5。

10、; int i, j; srand(time(0); j = rand() % 5; for (i = j; i j + 5; i+) bi % 5 = philosopheri % 5.eat(); cout endl * endl; for (i = j; i j + 5; i+) if (bi % 5) philosopheri % 5.finish(); if (!b(i % 5 + 1) % 5) b(i % 5 + 1) % 5 = philosopher(i % 5 + 1) % 5.eat(); if (!b(i % 5 + 4) % 5) b(i % 5 + 4) % 5 =。

11、 philosopher(i % 5 + 4) % 5.eat(); else bi % 5 = philosopheri % 5.eat(); if (bi % 5) continue; else cout The philosopher i % 5 need waiting endl; cout endl * endl; return 0; 五、测试用例及运行结果、分析五、测试用例及运行结果、分析 测试结果截图: 分析:产生了一个随机数 0,并依次加 1 对每个哲学家进行分析。分析时首先看 左筷子是否可用,然后看右筷子,若有一个不可用则放下手中的另一只筷子,并 说明 need waitin。

12、g。然后再下一时间段对每个哲学家再次分析,直到每个哲学 家都吃上饭,程序结束。 通过实验结果可得,程序正确运行,且解决了死锁问题。 六、自我评价与总结六、自我评价与总结 本次操作系统实验是模拟进程管理过程,解决哲学家的就餐问题。个人本 次实验还比较顺利,使用了比较熟悉的 c+语言进行算法的编写,比较巧妙的 定义了两个类来定义哲学家和筷子对象的属性以及相应的动作,方便在各种就 餐过程中对筷子的资源进行申请和释放,以及哲学家实现相应的动作。另一个 觉得比较好的地方是解决了死锁问题,通过判断当前哲学家是否可以同时拿起 左右筷子来避免死锁。 不足之处为,在本次实验中没有使用多线程的方法,与同学讨论发现使用 c+中多线程操作可以节约很多代码和空间,算法实现简单。而且其中带有了 p 操作和 v 操作不用自己重新定义。提高了代码的可读性。 本次实验通过解决哲学家就餐问题算法实现,对这进程管理的理解更加深 刻了,也通过实验结果的比较,掌握了死锁问题的解决方法。通过这样一个一 个小实验,也一定程度上锻炼了我的编程能力。。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。