您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 操作系统原理课程设计论文终结
操作系统原理课程设计实践报告题目:P,V信号量-管程解决读者写者问题(申优)姓名:樊鹿鸣,梁峰,寄伟杰学院:信息科技学院专业:计算机科学技术系班级:计科121,122学号:19212226,19212229,19212127指导教师:姜海燕职称:教授2015年3月19日摘要:现代操作系统引入并发程序设计技术之后,程序的执行不再是顺序的,封闭的。在多个进程并发运行的过程中,进程之间可能产生相互制约的关系,即竞争和协作。为了协调各个进程有序正确的进行,需要考虑进程之间的同步和互斥等问题。操作系统中经典的“读者—写者”问题正反映了进程并发执行的这种关系。本课程设计所完成的就是对“读者—写者”问题的模拟,本系统根据操作系统中并发进程、临界区、同步和互斥等基本概念及理论进行设计,采用C#语言实现,用管程来实现进程模拟同步和互斥的控制。本系统可按照用户设定的读者--写者数目及缓冲区大小来进行模拟演示。关键字:P,V信号量管程死锁读者写者问题1.目的和意义在操作系统的进程管理中进程之间的同步与互斥是一个非常重要的问题由于进程是并发执行的这些进程之间存在着不同的相互制约关系如果管理不恰当就会产生结果不确定或者进入死锁,这也是是操作系统原理学习中的重点与难点之一。比较有效的解决方法是使用信号量机制它主要是通过两个操作原语的使用来保证进程之间的同步与互斥读者(写者问题是进程同步的一个经典问题原有的算法是一种读者优先的算法容易造成写者进程的饿死’现象对此作了改进,我们又引进了管程来解决读者写者问题2.理论基础2.1进程的同步与互斥操作系统内部存在着许许多多的并发活动相对独立的多个用户进程可以并发运行操作系统本身的许多不同功能的进程也可并发执行&在进程并发执行时由于资源共享和进程之间的合作使处于同一系统中的进程之间可能产生两种形式的制约关系即直接制约和间接制约,而这两种关系通常表现在两类问题上同步和互斥。进程互斥它主要源于对临界资源共享)多个进程竞争使用临界资源时产生的关系是进程间的间接制约关系在多道系统中)每次只允许一个进程访问的资源’如外设(共享代码段(共享数据结构)为临界资源)每个进程中访问临界资源的那段程序叫临界区,进程互斥就是保证每次只有一个进程使用临界资源,这些使用临界资源的进程在逻辑上完全独立)本无关系)但是由于竞争同一临界资源而产生了相互制约的关系即一个进程使用临界资源时其他使用临界资源的进程只能等待。进程同步(它主要源于相互协作的进程)是多个进程相互合作共同完成一项任务时发生的关系,是进程间的直接制约关系,相互合作的进程具有伙伴关系为了保证执行结果的正确性)在执行时间上必须遵循确定的规律,具体的说一个进程运行到某一点时,要求另一伙伴进程为它提供消息在未获得消息之前该进程处于等待状态获得消息后被唤醒进入就绪态*在多道环境下)这种进程间在执行次序上的协调是必不可少的,为了能够正确控制进程的并发执行操作系统必须提供相应的同步机构以协调这些制约关系,同步机构的主要任务就是使并发执行的进程之间能有效地共享资源和相互合作从而使程序的执行能够有序的进行’’2.2读者,写者问题读者—写者问题(Readers-Writersproblem)也是一个经典的并发程序设计问题,是经常出现的一种同步问题。计算机系统中的数据(文件、记录)常被多个进程共享,但其中某些进程可能只要求读数据(称为读者Reader);另一些进程则要求修改数据(称为写者Writer)。就共享数据而言,Reader和Writer是两组并发进程共享一组数据区,要求:(1)允许多个读者同时执行读操作;(2)不允许读者、写者同时操作;(3)不允许多个写者同时操作。Reader和Writer的同步问题分为读者优先、弱写者优先(公平竞争)和强写者优先三种情况,它们的处理方式不同。(1)读者优先。对于读者优先,应满足下列条件:如果新读者到:①无读者、写者,新读者可以读;②有写者等待,但有其它读者正在读,则新读者也可以读;③有写者写,新读者等待。如果新写者到:①无读者,新写者可以写;②有读者,新写者等待;③有其它写者,新写者等待2.3P,V信号量信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。注意,信号量的值仅能由PV操作来改变。一般来说,信号量S=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个V操作意味着释放一个单位资源,因此S的值加1;若S=0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。2.4管程信号量机制的引入解决了进程同步的描述问题,但信号量的大量同步操作分散在各个进程中不便于管理,还有可能导致系统死锁。如:生产者消费者问题中将P、V颠倒可能死锁。为此Dijkstra于1971年提出:把所有进程对某一种临界资源的同步操作都集中起来,构成一个所谓的秘书进程。凡要访问该临界资源的进程,都需先报告秘书,由秘书来实现诸进程对同一临界资源的互斥使用。Hansan为管程所下的定义是:管程定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。管程的四个组成:1.管程内部的共享变量;2管程内部的条件变量3.管程内部并行执行的进程;4.对局部于管程内部的共享数据设置初始值的语句。当几个进程调用某个管程的时候,在一个时刻仅允许一个进程进入管程。管程中仅允许一个进程处于活跃状态,但不表示管程中只有一个进程,可能存在因资源不足而阻塞的进程等。当一个进程调用管程中的过程时,首先检查管程中是否有进程处于活跃态,如果有,则阻塞调用进程,直到管程内部的进程离开管程或其他操作。管程的互斥操作是由管程内部的互斥信号量实现的,其初值为1。在管程中要设置一对同步操作原语,Wait()和Signal()操作,注意这里操作作用于条件变量,不具有累加功能,如果管程中的进程发出了一个信号量,而在对应的条件变量上没有阻塞等待的进程,则该信号量没有作用,会被丢失。为了区别阻塞等待进程和不同阻塞对应,设置了不同条件变量。2.5死锁所谓死锁:是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件。1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。预防死锁的方法:有序资源分配法,银行家算法。3.目的及意义1.通过编写和调试程序以加深对并发进程管理方案的理解。2.呈现死锁解锁过程,方便同学理解学习3.实现读者写者问题,增加对p、v信号量和管程的理解。4.设计思想及设计功能说明1.设计思想:读者-写者问题的读写操作限制(包括读者优先和写者优先)写-写互斥:不能有两个写者同时进行写操作读-写互斥:不能同时有一个线程在读,而另一个线程在写。读-读允许:可以有一个或多个读者在读。读者优先的附加限制:如果读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。写者优先的附加限制:如果一个读者申请进行读操作时已有另一个写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。运行结果显示要求:要求在每个线程创建、发出读写申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。死锁解锁与避免死锁实现。2.设计功能说明1.文件读入功能:从指定文件读入程序所需要的信息2.读者优先判断功能:如果读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。3.写者优先判断功能:如果一个读者申请进行读操作时已有另一个写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。4.界面设计:方便用户操作软件,及时向用户反馈读者写者信息5.锁机制:通过程序展示进程的运行,方便同学们理解锁产生的原因以及解决死锁,预防死锁的方法。5.核心数据结构说明首先编写临界区资源,按照书上的说法,读者写者的数量是临界区资源,我们定义了rcount=0,wcount=0,对读者写者进行计数的变量,同样设置rmutex=1,wmutex=1对rcount,wcount进行控制。还有我们用到了另外的两个全局变量writeblock=1,readblock=0进行对读者进程,写者进程进行锁操做。在读者进程,与写者进程的锁操做中要进行进程的调度问题,其中有读者进程的就绪队列readPList,有写者进程的就绪队列writePList,有进程进行调度算法中的阻塞队列waitPList。C#中都以类为基准,所以在进程队列中包括,入队inList,出对outList,整理,等操作的函数。还有一些小的控制变量,allrcount=0,allwcout=0,对整个程序进行读者进程创建个数进行计数。其中的类包括,进程类Process,进程队列类ProcessList,windows窗体类PV//PV信号量的类,monitor//管程类,main//主界面类,block//同步锁类以及一些表现类如text//读者写者窗体类,semaphore类//型号量的类,在这些类中包括自己的函数声明。属性声明。例如process中的如下:privateintpcb;//pcb主要是对进程的一些描述信息privateintpsw;//0表示就绪态,1表示运行态,2表示privateboolreadOrWrite;//表示读写进程,用来控制进程的种类如果是true就是读否则就是写privateinttime;//进程process存在的时间publicprocess(intnum,booltf);//构造函数publicvoidrgo();//读者操做的函数publicvoidwgo();//写者操做的函数publicvoidP(semaphores)publicvoidV(semaphores)publicvoidenter(InterfaceModuleIM);//进入管程的函数publicvoidwait(semaphorex_sem,intx_count,InterfaceModuleIM);publicvoidsignal(semaphorex_sem,intx_count,InterfaceModuleIM)publicvoidrwgo();//读者写者都进行的操做还有一些简单的线程操做Threadt1=newThread(newThreadStart(processonego));Threadt2=newThread(newThreadStart(processtwogo));t1.Start();t2.Start();6.核心算法流程1.写者优先原理图:2.读者优先原理图:3.锁机制:7.开发调试及运行环境开发调试:vs2013,编程语言为c#。运行环境:windowsY完成拍pp1P1执行获取s1拍p
本文标题:操作系统原理课程设计论文终结
链接地址:https://www.777doc.com/doc-2381137 .html