《操作系统原理课程设计论文终结》由会员分享,可在线阅读,更多相关《操作系统原理课程设计论文终结(21页珍藏版)》请在金锄头文库上搜索。
1、 操作系统原理课程设计操作系统原理课程设计实践报告实践报告题 目:P,V 信号量-管程解决读者写者问题 (申优)姓 名: 樊鹿鸣,梁峰,寄伟杰 学 院: 信息科技学院 专 业: 计算机科学技术系 班 级: 计科 121,122 学 号: 19212226,19212229,19212127 指导教师: 姜海燕 职称: 教授 2015 年 3 月 19 日摘要摘要:现代操作系统引入并发程序设计技术之后,程序的执行不再是顺序的, 封闭的。在多个进程并发运行的过程中,进程之间可能产生相互制约的关系, 即竞争和协作。为了协调各个进程有序正确的进行,需要考虑进程之间的同步 和互斥等问题。操作系统中经典的
2、“读者写者”问题正反映了进程并发执行 的这种关系。本课程设计所完成的就是对“读者写者”问题的模拟,本系统 根据操作系统中并发进程、临界区、同步和互斥等基本概念及理论进行设计, 采用 C#语言实现,用管程来实现进程模拟同步和互斥的控制。本系统可按照用 户设定的读者-写者数目及缓冲区大小来进行模拟演示。 关键字:P,V 信号量 管程 死锁 读者写者问题 1.1.目的和意义目的和意义 在操作系统的进程管理中“进程之间的同步与互斥是一个非常重要的问题“由于 进程是并发执行的“这些进程之间存在着不同的相互制约关系“如果管理不恰当“ 就会产生结果不确定或者进入死锁,这也是是操作系统原理学习中的重点与难 点
3、之一。比较有效的解决方法是使用信号量机制“它主要是通过两个操作原语的 使用“来保证进程之间的同步与互斥读者(写者问题是进程同步的一个经典问题“ 原有的算法是一种读者优先的算法“容易造成写者进程的饿死现象“对此作了 改进,我们又引进了管程来解决读者写者问题 2.2.理论基础理论基础 2.1 进程的同步与互斥 操作系统内部存在着许许多多的并发活动相对独立的多个用户进程可以并发运 行操作系统本身的许多不同功能的进程也可并发执行 /pcb 主要是对进程的一些描述信息 private int psw; /0 表示就绪态,1 表示运行态,2 表示 private bool readOrWrite; /表示
4、读写进程,用来控制进程的种类 如果是 true 就是读否则就是写 private int time; /进程 process 存在的时间 public process(int num,bool tf);/构造函数 public void rgo();/读者操做的函数 public void wgo();/写者操做的函数public void P(semaphore s)public void V(semaphore s) public void enter(InterfaceModule IM);/进入管程的函数public void wait(semaphore x_sem,int x_co
5、unt,InterfaceModule IM) ;public void signal(semaphore x_sem, int x_count, InterfaceModule IM)public void rwgo();/读者写者都进行的操做还有一些简单的线程操做 Thread t1 = new Thread(new ThreadStart(processonego);Thread t2 = new Thread(new ThreadStart(processtwogo);t1.Start();t2.Start(); 6.6.核心算法流程核心算法流程 1. 写者优先原理图:2. 读者优先原
6、理图:3. 锁机制:7.7.开发调试及运行环境开发调试及运行环境开发调试:vs2013 ,编程语言为 c#。运行环境:windowsY完成 拍 pp1P1 执行获取 s1 拍 pp1获取 s2 拍 pp1进程执行 拍 pp1释放占有资源,唤醒另一进程执行 拍 pp1P2 执行 拍 pp1死锁释放占有资源 拍 pp1P1 执行 拍 pp1P2 执行 拍 pp1P1 执行 拍 pp1P2 执行 拍 pp1获取 s2 拍 pp1获取 s1 拍 pp1P1 执行 拍 pp1P2 执行 拍 pp1获取 s1 拍 pp1获取 s2 拍 pp1初始化临界资源 s1,s2设置进程 p1,p2 延时 拍 pp1
7、初始化进程 s1,s2 拍 pp1死锁解决算法 拍 pp1预防死锁算法 拍 pp1YNN8.8.功能说明及测试数据分析功能说明及测试数据分析1.1 P,V 信号量模块当无读者写者时,允许多读者读文件。如图在读者框里有 2 个读者的数 量当有读者在读文件时,写者会被阻塞。如图,读者数量为 2,等待写者为 2当读者进程执行结束,写者就可以执行,写者是可以修改文件的,如图有其它写者,新写者等待当有写者时,读者会被阻塞,如图1.2 管程模块允许多读者读文件当有读者,不允许写者写文件有写者,不允许读1.3 死锁模块 当进程 1 和进程 2 每步的延迟比较接近时,易发生死锁,如图都是 100ms,就发生
8、了死锁进程 1,2 每步延迟较大,就不会发生死锁。在解决死锁的模块里,由于进程采用不可剥夺式,所以不会发生死锁2.软件说明书:欢迎来到读者写者问题仿真软件,我们的软件分为 3 大模块:PV 信号量模块,管程模 块,死锁模块。我们的软件只要你的操作系统是 win7 以上的版本都可以运行。下面是软件 的具体使用说明书。 首先,您来到的是我们软件的主界面。如图所示。在主界面你可以点击锁机制,PV 信 号量,管程机制,三个按钮进入不同的模块。你也可以点击关闭按钮,关闭软件。接下来我们来介绍 PV 信号量模块。首先,你要按打开文件按钮打开一个文件,好便 于读者读或者写者写操作。点击一次申请阅读按钮,就会
9、产生一个读者进程,点击一次申 请修改,就会产生一个写者进程,他们的数量会在读者数量写者数量框中显示。当有进程 被阻塞时,等待读者或等待写者框里的数字就会显示,有多少进程被阻塞。如图 1.关闭一 个窗口就代表这个进程结束了。在写者进程时,我们可以对文件进行修改操作,如图 2.通 过按按钮,我们就可以模拟仿真读者写者问题。图 1图 2管程模块,与 PV 信号量模块类似在这就不在重复叙述,请参考 PV 操作流程。死锁模块。在这个我们分为 2 个小部分,可能死锁部分和解决死锁部分,在这两个部 分,你只需要设置每个进程的延迟时间,然后点击可能死锁程序开始,解决死锁开始按钮, 程序就会自动进行,这是为了专
10、门为教学准备的。请看图示。本软件的使用就是这样,欢迎大家使用!9.9.存在问题存在问题1.不足与问题 1).在整个实验中我们的对管程的了解不是很到位,不清楚管程的内部运行 结构,不了解管程内部的条件变量,这样我们程序中对管程的部分还有待改善 加强,做出正确的运行程序。 2).在实验中,还有很多的细节没有注意到,还有很多的东西没有抽象出来, 例如时钟,我们只是运用了系统的时钟。并且在做课程设计的时候我们只是关 注读者写者问题,侧重点导致我们在对进程的调度问题进行了较少的代码编写。2 优点与设想 1).每一个读者写者问题都在解决读者优先,或者写者优先的问题,而我们 的程序正好取了二者的折中思想,这
11、样可以很好的解决,读者优先中的写者 饥饿问题,同时还能解决,写者优先中的读者饥饿问题。 如有读读写读读写写读,这样的情况,第一个读者来了, 第二读者再来他们并发执行,继续读,而写者来了,将被阻塞,当读者读完, 唤醒写者,写者写完,唤醒读者,当写者写完了也可能唤醒写者,要看后面来 的人是读者还是写者。从而解决两个饥饿问题。 2).是否可以将操作系统中的只是运用到软件中,而不是简单的做成老师讲 的书本上的东西,而是为了设计莫某一款软件而其中运用到了这些知识,例如, 可以做一个后台服务器,就很好的运用了并发进程问题。并且在后台服务器中 处理来者访问过程中,例如火车购票系统中,就要良好的解决类似读者写
12、者问 题这样的只是,同样大胆一点,可以用更多的语言去编写,丰富自己的知识, 就像老师说的可以做成系统软件,同时也可以做成手机 APP,做成小游戏等等。10.10.实践体会及心得实践体会及心得 1.梁峰 2.寄伟杰 我们这次操作系统的课程设计题目是用 P,V 信号量-管程解决读者写者问题,看到组 长来选这个课题的时候,我内心有点小小的害怕,因为我在学习操作系统课程的时候,对 同步互斥问题的那一章就有比较大的疑惑。不过既然已经选择,我也只能迈步前进。在期 末我们组长给我分配的任务是写软件的界面。我是从来没有写过界面的,刚开始我比较茫 然无措,脑袋一片空白。可想想这次课设是我们大家分工完成的,只有完
13、成自己的任务, 最后才能做出成品。我就鼓励自己去学习,于是我就去向周围有学习好的同学和学长去咨 询有关界面方面的知识,应该用什么语言来写界面,经过我的了解,我知道了 c#是一门好 的比较简单的写界面的一种语言,它在继承 C 和 C+强大功能的同时去掉了一些它们的复 杂特性(例如没有宏以及不允许多重继承)。C#综合了 VB 简单的可视化操作和 C+的高 运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编 程的支持成为.NET 开发的首选语言。于是,我就在寒假里学习了 c#语言,慢慢的开始了 界面的编写,最终完成了。 在答辩的时候,老师说我做的界面与操作系统内核关系不是
14、那么紧密,于是组长又给 我们分配了新的任务,去让我和另一个组员写死锁,而且要是自动的,可以以后拿来教学 的,我们又苦思冥想,就想到了用 2 个进程来模拟仿真死锁问题,给不同的进程每一步执 行的时间不同。来让他们抢占资源的顺序和占用资源的时间不同,这样就可以有可能发生 死锁。我们会让设计一个循环,如果发生死锁的话,超过 10 秒的话,就让进程自动释放资 源,继续执行进程。而解决死锁,我们想一个简单的方法,让一个进程直接占用资源,不 可被其他进程剥夺,这样就不会发生死锁了,这就是我们做的死锁部分。 我认为,在这次课程设计中,不仅培养了独立思考、动手操作的能力,在各种其它能 力上也都有了提高。更重要
15、的是,在课设上,我们学会了很多学习的方法。而这是以后最 实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。 这对于我们的将来也有很大的帮助。回顾起此课程设计,至今我仍感慨颇多,从理论到实 践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以 巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程 设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学 的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己 的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但 最终还是克服了。3.樊鹿鸣 我们这次课程设计的课题是读者写着问题,经过上学期期末的课程设计,我们都有了 一定的经验,效率也提高了很多。当我们组拿到题目的时候我们先对题目进行分析,开始 我们做了很多工作,比如,到图书馆借相关的资料,到网上搜索等等,最终经过我们组的 努力以及老师和同学的帮助下顺利的实现了读者写着功能。 这次课程设计我的主要任务是利用 p、v 和管程实现读者和写者问题,开始的接到实 现这两个函数功能的时候脑子是一片空白,感觉什么都不会,但是回想一下我们曾经学习 过的与读者和写着创建的有关的实验,经过查阅资料,到图书馆