




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、. 操作系统原理课程设计实践报告题 目: P,V信号量-管程解决读者写者问题 (申优) 姓 名: 樊鹿鸣,梁峰,寄伟杰 学 院: 信息科技学院 专 业: 计算机科学技术系 班 级: 计科121,122 学 号: 19212226,19212229,19212127 指导教师: 姜海燕 职称: 教授 2015年3月 19 日摘要:现代操作系统引入并发程序设计技术之后,程序的执行不再是顺序的,封闭的。在多个进程并发运行的过程中,进程之间可能产生相互制约的关系,即竞争和协作。为了协调各个进程有序正确的进行,需要考虑进程之间的同步和互斥等问题。操作系统中经典的“读者写者”问题正反映了进程并发执行的这种
2、关系。本课程设计所完成的就是对“读者写者”问题的模拟,本系统根据操作系统中并发进程、临界区、同步和互斥等基本概念及理论进行设计,采用C#语言实现,用管程来实现进程模拟同步和互斥的控制。本系统可按照用户设定的读者-写者数目及缓冲区大小来进行模拟演示。关键字:P,V信号量 管程 死锁 读者写者问题1. 目的和意义在操作系统的进程管理中进程之间的同步与互斥是一个非常重要的问题由于进程是并发执行的这些进程之间存在着不同的相互制约关系如果管理不恰当就会产生结果不确定或者进入死锁,这也是是操作系统原理学习中的重点与难点之一。比较有效的解决方法是使用信号量机制它主要是通过两个操作原语的使用来保证进程之间的同
3、步与互斥读者(写者问题是进程同步的一个经典问题原有的算法是一种读者优先的算法容易造成写者进程的饿死现象对此作了改进,我们又引进了管程来解决读者写者问题2. 理论基础2.1进程的同步与互斥操作系统内部存在着许许多多的并发活动相对独立的多个用户进程可以并发运行操作系统本身的许多不同功能的进程也可并发执行&在进程并发执行时由于资源共享和进程之间的合作使处于同一系统中的进程之间可能产生两种形式的制约关系即直接制约和间接制约,而这两种关系通常表现在两类问题上同步和互斥。进程互斥它主要源于对临界资源共享)多个进程竞争使用临界资源时产生的关系是进程间的间接制约关系在多道系统中)每次只允许一个进程访问的资源如
4、外设(共享代码段(共享数据结构)为临界资源) 每个进程中访问临界资源的那段程序叫临界区,进程互斥就是保证每次只有一个进程使用临界资源, 这些使用临界资源的进程在逻辑上完全独立) 本无关系) 但是由于竞争同一临界资源而产生了相互制约的关系即一个进程使用临界资源时其他使用临界资源的进程只能等待。进程同步(它主要源于相互协作的进程) 是多个进程相互合作共同完成一项任务时发生的关系,是进程间的直接制约关系,相互合作的进程具有伙伴关系为了保证执行结果的正确性) 在执行时间上必须遵循确定的规律,具体的说一个进程运行到某一点时,要求另一伙伴进程为它提供消息在未获得消息之前该进程处于等待状态获得消息后被唤醒进
5、入就绪态* 在多道环境下) 这种进程间在执行次序上的协调是必不可少的, 为了能够正确控制进程的并发执行操作系统必须提供相应的同步机构以协调这些制约关系,同步机构的主要任务就是使并发执行的进程之间能有效地共享资源和相互合作从而使程序的执行能够有序的进行2.2读者,写者问题读者写者问题(Readers-Writers problem)也是一个经典的并发程序设计问题,是经常出现的一种同步问题。计算机系统中的数据(文件、记录)常被多个进程共享,但其中某些进程可能只要求读数据(称为读者Reader);另一些进程则要求修改数据(称为写者Writer)。就共享数据而言,Reader和Writer是两组并发进
6、程共享一组数据区,要求:(1)允许多个读者同时执行读操作;(2)不允许读者、写者同时操作;(3)不允许多个写者同时操作。Reader和Writer的同步问题分为读者优先、弱写者优先(公平竞争)和强写者优先三种情况,它们的处理方式不同。(1)读者优先。对于读者优先,应满足下列条件:如果新读者到:无读者、写者,新读者可以读;有写者等待,但有其它读者正在读,则新读者也可以读;有写者写,新读者等待。如果新写者到:无读者,新写者可以写;有读者,新写者等待;有其它写者,新写者等待2.3 P,V信号量信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应
7、资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。注意,信号量的值仅能由PV操作来改变。 一般来说,信号量S=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个V操作意味着释放一个单位资源,因此S的值加1;若S=0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。2.4 管程信号量机制的引入解决了进程同步的描述问题,但信号量的大量同步操作分散在各个进程中不便于管理,还有可能
8、导致系统死锁。如:生产者消费者问题中将P、V颠倒可能死锁。为此Dijkstra于1971年提出:把所有进程对某一种临界资源的同步操作都集中起来,构成一个所谓的秘书进程。凡要访问该临界资源的进程,都需先报告秘书,由秘书来实现诸进程对同一临界资源的互斥使用。Hansan为管程所下的定义是:管程定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。管程的四个组成:1.管程内部的共享变量;2管程内部的条件变量3.管程内部并行执行的进程;4.对局部于管程内部的共享数据设置初始值的语句。当几个进程调用某个管程的时候,在一个时刻仅允许一个进程进入管程。管程中仅允许一个进程处
9、于活跃状态,但不表示管程中只有一个进程,可能存在因资源不足而阻塞的进程等。当一个进程调用管程中的过程时,首先检查管程中是否有进程处于活跃态,如果有,则阻塞调用进程,直到管程内部的进程离开管程或其他操作。管程的互斥操作是由管程内部的互斥信号量实现的,其初值为1。在管程中要设置一对同步操作原语,Wait()和Signal()操作,注意这里操作作用于条件变量,不具有累加功能,如果管程中的进程发出了一个信号量,而在对应的条件变量上没有阻塞等待的进程,则该信号量没有作用,会被丢失。为了区别阻塞等待进程和不同阻塞对应,设置了不同条件变量。2.5 死锁所谓死锁: 是指两个或两个以上的进程在执行过程中,由于竞
10、争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件。1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。3)不剥夺条件:
11、指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。4)环路等待条件:指在发生死锁时,必然存在一个进程资源的环形链,即进程集合P0,P1,P2,Pn中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,Pn正在等待已被P0占用的资源。预防死锁的方法:有序资源分配法,银行家算法。3. 目的及意义 1.通过编写和调试程序以加深对并发进程管理方案的理解。2.呈现死锁解锁过程,方便同学理解学习3.实现读者写者问题,增加对p、v信号量和管程的理解。4. 设计思想及设计功能说明 1.设计思想:读者-写者问题的读写操作限制(包括读者优先和写者优先)写-写互斥:不能有两个写者同
12、时进行写操作读-写互斥:不能同时有一个线程在读,而另一个线程在写。读-读允许:可以有一个或多个读者在读。读者优先的附加限制:如果读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。 写者优先的附加限制:如果一个读者申请进行读操作时已有另一个写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。运行结果显示要求:要求在每个线程创建、发出读写申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。死锁解锁与避免死锁实现。 2.设计功能说明1. 文件读入功能:从指定文件读入程序所需要的信息2. 读者优先判断功能:
13、如果读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。 3. 写者优先判断功能:如果一个读者申请进行读操作时已有另一个写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。4. 界面设计:方便用户操作软件,及时向用户反馈读者写者信息5. 锁机制:通过程序展示进程的运行,方便同学们理解锁产生的原因以及解决死锁,预防死锁的方法。5. 核心数据结构说明 首先编写临界区资源,按照书上的说法,读者写者的数量是临界区资源,我们定义了rcount=0,wcount=0,对读者写者 进行计数的变量,同样设置rmutex=1,wmutex=1对rcount,wc
14、ount进行控制。还有我们用到了另外的两个全局变量writeblock=1,readblock=0进行对读者进程,写者进程进行锁操做。在读者进程,与写者进程的锁操做中要进行进程的调度问题,其中有读者进程的就绪队列readPList,有写者进程的就绪队列writePList,有进程进行调度算法中的阻塞队列waitPList。C#中都以类为基准,所以在进程队列中包括,入队inList,出对outList,整理,等操作的函数。还有一些小的控制变量,allrcount=0,allwcout=0,对整个程序进行读者进程创建个数进行计数。其中的类包括,进程类Process,进程队列类ProcessList
15、,windows窗体类PV/PV信号量的类,monitor/管程类,main/主界面类,block/同步锁类以及一些表现类如text/读者写者窗体类,semaphore类/型号量的类,在这些类中包括自己的函数声明。属性声明。例如process中的如下:private int pcb; /pcb主要是对进程的一些描述信息private int psw; /0表示就绪态,1表示运行态,2表示private bool readOrWrite; /表示读写进程,用来控制进程的种类 如果是true就是读否则就是写private int time; /进程process存在的时间public proces
16、s(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_count,InterfaceModule IM) ; public void signal(semaphore x_sem, int x_count, Interfa
17、ceModule IM) public void rwgo();/读者写者都进行的操做 还有一些简单的线程操做Thread t1 = new Thread(new ThreadStart(processonego); Thread t2 = new Thread(new ThreadStart(processtwogo); t1.Start(); t2.Start(); 6. 核心算法流程1. 写者优先原理图:2. 读者优先原理图:Y完成拍pp1P1执行获取s1拍pp1获取s2拍pp1进程执行拍pp1释放占有资源,唤醒另一进程执行拍pp1P2执行拍pp1死锁释放占有资源拍pp1P1执行拍pp1
18、P2执行拍pp1P1执行拍pp1P2执行拍pp1获取s2拍pp1获取s1拍pp1P1执行拍pp1P2执行拍pp1获取s1拍pp1获取s2拍pp1初始化临界资源s1,s2设置进程p1,p2延时拍pp1初始化进程s1,s2拍pp1死锁解决算法拍pp1预防死锁算法拍pp1YNN3. 锁机制: 7. 开发调试及运行环境 开发调试:vs2013 ,编程语言为c#。 运行环境:windows8. 功能说明及测试数据分析 1.1 P,V信号量模块当无读者写者时,允许多读者读文件。如图在读者框里有2个读者的数量当有读者在读文件时,写者会被阻塞。如图,读者数量为2,等待写者为2当读者进程执行结束,写者就可以执行
19、,写者是可以修改文件的,如图有其它写者,新写者等待当有写者时,读者会被阻塞,如图1.2管程模块允许多读者读文件当有读者,不允许写者写文件有写者,不允许读1.3 死锁模块当进程1和进程2每步的延迟比较接近时,易发生死锁,如图都是100ms,就发生了死锁进程1,2每步延迟较大,就不会发生死锁。在解决死锁的模块里,由于进程采用不可剥夺式,所以不会发生死锁2.软件说明书: 欢迎来到读者写者问题仿真软件,我们的软件分为3大模块:PV信号量模块,管程模块,死锁模块。我们的软件只要你的操作系统是win7以上的版本都可以运行。下面是软件的具体使用说明书。首先,您来到的是我们软件的主界面。如图所示。在主界面你可
20、以点击锁机制,PV信号量,管程机制,三个按钮进入不同的模块。你也可以点击关闭按钮,关闭软件。接下来我们来介绍PV信号量模块。首先,你要按打开文件按钮打开一个文件,好便于读者读或者写者写操作。点击一次申请阅读按钮,就会产生一个读者进程,点击一次申请修改,就会产生一个写者进程,他们的数量会在读者数量写者数量框中显示。当有进程被阻塞时,等待读者或等待写者框里的数字就会显示,有多少进程被阻塞。如图1.关闭一个窗口就代表这个进程结束了。在写者进程时,我们可以对文件进行修改操作,如图2.通过按按钮,我们就可以模拟仿真读者写者问题。 图1 图2管程模块,与PV信号量模块类似在这就不在重复叙述,请参考PV操作
21、流程。 死锁模块。在这个我们分为2个小部分,可能死锁部分和解决死锁部分,在这两个部分,你只需要设置每个进程的延迟时间,然后点击可能死锁程序开始,解决死锁开始按钮,程序就会自动进行,这是为了专门为教学准备的。请看图示。本软件的使用就是这样,欢迎大家使用!9. 存在问题 1.不足与问题1).在整个实验中我们的对管程的了解不是很到位,不清楚管程的内部运行结构,不了解管程内部的条件变量,这样我们程序中对管程的部分还有待改善加强,做出正确的运行程序。2).在实验中,还有很多的细节没有注意到,还有很多的东西没有抽象出来,例如时钟,我们只是运用了系统的时钟。并且在做课程设计的时候我们只是关注读者写者问题,侧
22、重点导致我们在对进程的调度问题进行了较少的代码编写。2优点与设想1).每一个读者写者问题都在解决读者优先,或者写者优先的问题,而我们的程序正好取了二者的折中思想,这样可以很好的解决,读者优先中的写者饥饿问题,同时还能解决,写者优先中的读者饥饿问题。如有读读写读读写写读,这样的情况,第一个读者来了,第二读者再来他们并发执行,继续读,而写者来了,将被阻塞,当读者读完,唤醒写者,写者写完,唤醒读者,当写者写完了也可能唤醒写者,要看后面来的人是读者还是写者。从而解决两个饥饿问题。2).是否可以将操作系统中的只是运用到软件中,而不是简单的做成老师讲的书本上的东西,而是为了设计莫某一款软件而其中运用到了这
23、些知识,例如,可以做一个后台服务器,就很好的运用了并发进程问题。并且在后台服务器中处理来者访问过程中,例如火车购票系统中,就要良好的解决类似读者写者问题这样的只是,同样大胆一点,可以用更多的语言去编写,丰富自己的知识,就像老师说的可以做成系统软件,同时也可以做成手机APP,做成小游戏等等。10. 实践体会及心得1.梁峰2.寄伟杰我们这次操作系统的课程设计题目是用P,V信号量-管程解决读者写者问题,看到组长来选这个课题的时候,我内心有点小小的害怕,因为我在学习操作系统课程的时候,对同步互斥问题的那一章就有比较大的疑惑。不过既然已经选择,我也只能迈步前进。在期末我们组长给我分配的任务是写软件的界面
24、。我是从来没有写过界面的,刚开始我比较茫然无措,脑袋一片空白。可想想这次课设是我们大家分工完成的,只有完成自己的任务,最后才能做出成品。我就鼓励自己去学习,于是我就去向周围有学习好的同学和学长去咨询有关界面方面的知识,应该用什么语言来写界面,经过我的了解,我知道了c#是一门好的比较简单的写界面的一种语言,它在继承C和C+强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C+的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。于是,我就在寒假里学习了c#语言,慢慢的开始了界面的
25、编写,最终完成了。在答辩的时候,老师说我做的界面与操作系统内核关系不是那么紧密,于是组长又给我们分配了新的任务,去让我和另一个组员写死锁,而且要是自动的,可以以后拿来教学的,我们又苦思冥想,就想到了用2个进程来模拟仿真死锁问题,给不同的进程每一步执行的时间不同。来让他们抢占资源的顺序和占用资源的时间不同,这样就可以有可能发生死锁。我们会让设计一个循环,如果发生死锁的话,超过10秒的话,就让进程自动释放资源,继续执行进程。而解决死锁,我们想一个简单的方法,让一个进程直接占用资源,不可被其他进程剥夺,这样就不会发生死锁了,这就是我们做的死锁部分。我认为,在这次课程设计中,不仅培养了独立思考、动手操
26、作的能力,在各种其它能力上也都有了提高。更重要的是,在课设上,我们学会了很多学习的方法。而这是以后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但最终还是克服了。3.樊鹿鸣我们这次课程设计的课题是读者写着问题,经过上学期期末的课程设计,我们都有了一定的经验,效率也提高了很多。当我们组拿到题目的时候我们先对题目进行分析,开始我们做了很多工作,比如,到图书馆借相关的资料,到网上搜索等等,最终经过我们组的努力以及老师和同学的帮助下顺利的实现了读者写着功能。 这次课程设计我的主要任务是利用p、v和管程实现读者和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论