版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设计概述所谓的读-写问题指的是确保写进程必须访问与其他进程互斥的共享对象的同步问题。读者-作者问题可以这样描述:有一群作家和一群读者,作家在写同一本书,而读者正在读它。多个读者可以同时阅读这本书。然而,只有一个作家在写一本书,读者必须优先考虑作家。也就是说,当读者和作者同时提出请求时,读者是首选。当读者提出请求时,需要有一个互斥的操作。此外,需要有一个信号量来查看它当前是否可操作。信号量机制是支持多通道程序的并发操作系统设计中解决进程间同步和互斥的重要机制,读写器问题就是这种机制的典型例子。不同于记录信号量来解决读写器问题,信号量机制增加了一个限制,即它最多允许RN阅读器同时读取。因此,引入一
2、个信号量l,并给它一个初始值RN。通过执行等待(1,1,1)操作来控制读取器的数量。每当读取器进入时,执行等待(L,1,1)操作以将L的值减少1。当有RN阅读器进入读数时,L将减少到0。当RN 1读取器想要进入读取时,它将由于等待(1,1,1)操作的失败而被阻塞。使用信号量解决读写器问题描述如下:Var RN整数;l,mx:semaphore:=RN,1;开始Parbegin读者:开始重复swa it(1,1,1);Swait(mx,1,0);执行读取器操作;信号(1,1);直到错误;目标作家:开始重复Swait(mx,1,1,l,RN,0);执行写入操作;Ssignal(mx,1);直到错误
3、;目标Parend目标其中,Swait(mx,1,0)语句充当开关。只要没有Writer进程进入,mx=1,读取器进程就可以进入读取。但是,一旦写入器进程进入写入状态,并且其MX=0,则没有读取器进程可以进入读取状态。Swait(mx,1,1,L,RN,0)语句表示只有当写进程不写(mx=1)或读进程不读(L=RN)时,写进程才能进入临界区进行写操作。该设计方案模拟和演示了利用记录信号量解决读写器问题的过程,并形象地说明了记录信号量机制的工作原理。二、设计目的和内容1.实验目的长度使用信号量实现读写器问题。2.理解和应用基本知识,如信号量、PV原语、进程间的同步和互斥。第二,第二个实验内容读写
4、器问题的定义如下:有一个由多个进程共享的数据区,可以是一个文件,也可以是一个主存空间;有些进程(读取器)只读取该数据区,有些进程(写入器)只向数据区写入数据。此外,需要满足以下条件:(1)任何数量的读取进程都可以同时读取该文件;(2)一次只能有一个写进程写入文件;(3)如果正在运行写入过程,则禁止读取任何高级文件。我们需要在两种情况下认识到这个问题:阅读优先级:要求是指当一个读者试图阅读时,如果此时其他读者正在进行阅读操作,他可以直接开始阅读操作而无需等待。写作优先级:当一个读者试图阅读时,如果其他作者正在等待或写作,他会在开始阅读前等待作者写完。三个设计分析在Windows 7环境下,创建一
5、个有n个线程的控制台进程。使用这n个线程来代表n个读者或作者。每个线程根据相应测试数据文件的要求进行读写。请使用信号量机制分别实现读者优先和作者优先的读写器问题。读写器问题的读写操作限制;读者-作者的阅读和写作限制(包括读者第一和作者第一)1)写-写互斥,即没有两个作者可以同时写2)读写互斥,即一个读者不能同时阅读,但一个作者同时写作3)阅读许可,即两个以上的读者可以同时阅读将所有的读取器和所有的写入器分别放入两个等待队列,当允许读取时让读取器队列释放一个或多个读取器,当允许写入时释放第一个写入器操作。读写器问题的定义如下:有一个由多个进程共享的数据区,可以是一个文件,也可以是一个主存空间;有
6、些读取器只读取该数据区,有些写入器只向该数据区写入数据。此外,还需要满足以下条件:1)任意数量的读者可以同时读取该文件;2)一次只能有一个写进程写入文件;3)如果正在运行写入过程,则禁止读入任何文件。我们需要在两种情况下认识到这个问题:阅读优先级:要求是指当一个读者试图阅读时,如果此时其他读者正在进行阅读操作,他可以直接开始阅读操作而无需等待。写作优先级:当一个读者试图阅读时,如果其他作者正在等待或写作,他会在开始阅读前等待作者写完。四程序实现该计划由两部分组成:1 .读写器模块:包括系统调用接口、读写器活动描述主程序。系统接口的主要功能是通过管道向父进程发送系统调用命令,并读取父进程发送的返
7、回值。读者-作者活动计划是根据关键资源共享和互斥的原则编制的。有关详细信息,请参见源程序。2 .主控模块:主控模块实现系统初始化系统调用命令的接收、解释和执行,系统调用功能(包括信号量机制)的实现,读写器活动过程的记录和显示。初始化系统环境建立沟通渠道启动读写器流程接收系统调用命令解释执行系统初始化模块管道建立模块过程启动模块命令解释模块等待()信号()唤醒()块()5.程序调试测试数据文件格式:测试数据文件包括N行测试数据,分别描述所创建的N个线程是读线程还是写线程,以及读写操作的开始时间和持续时间。每行测试数据包括四个字段,用空格隔开。第一个字段是正整数,表示线程序列号。第二个字段表示相应
8、的线程角色,r表示读取器,w表示写入器。第三个字段是正数,表示读写操作的开始时间。创建线程后,它将延迟相应的时间(以秒为单位),并发出一个读写共享资源的应用程序。第四个字段是正数,表示读写操作的持续时间。当线程的读写应用成功时,启动共享资源的读写操作,持续相应的时间并结束,释放共享资源。六个结果分析与讨论当读者和作者同时排队申请资金时,读者优先调用资源。此外,如果当一个读取器申请读取操作时,另一个读取器已经在进行读取操作,则该读取器可以直接开始读取操作,即读取许可。过程1是一个R操作,在时间3进入队列,运行时间是5。当它进入时,没有进程占用资源,这不仅占用资源;知道它释放资源,等待过程是3,4
9、,5;流程2是一个W操作,在16: 00进入队列,运行5分钟。进程4进入时占用资源,等待资源,释放时占用资源。进程3是一个R操作,它在时间5进入队列,运行时间是2。当它进入时,进程1占用资源,并等待资源。在进程1释放资源之后,进程3和5同时分派资源,因为读者是第一个。进程4是一个R操作,它在时间6进入队列,运行时间是5。当它进入时,进程1占用资源,并等待资源。在进程1释放资源之后,因为读取器是第一个,所以进程3和5占用资源,并且它仍然等待直到进程3和5完成。进程5是一个W操作,它在时间4进入队列,运行时间是3。当它进入时,进程1占用资源,并等待资源。在进程1释放资源之后,进程3和5同时分派资源
10、,因为读者是第一个。七次经历这一次课程设计,让我体会很深刻。读者-写者问题经典的线程同步问题的一个模型。经过读者写者问题的编写,我对同步机构应用有了深入的了解。懂得了运用信号量实现进程间的互斥。实现了不让共享资源同时修改。用信号量上的原语操作使临界段问题的解决比较简单明了了。读者写者问题的编写,花的时间很多,也学到很多东西。了解支持多道程序的并发操作系统设计中解决资源共享时进程间的同步与互斥的信号量机制。几天的试验,虽然难度有点大,但只要自己花时间去学习,还是会攻克困难的。总之,每一次课程设计不仅是我们学习的好机会,而且是我们锻炼实际动手能力的平台,虽然有难度的东西总会让人很抵触,比如在课设过
11、程中有很多郁闷的时候,一个小小的错误一不小心就花去了自己一上午的时间,所以在这个过程中能够磨练人的意志与耐心,最后感谢老师的指导与监督。八源代码#包括#包括#包括#包括#包括#包括#定义最大值_人100#定义READER 0 /读者#定义WRITER 1 /写者#定义结束-1#定义R READER#定义W WRITERtypedef结构_人员HANDLE m _ hThread/定义处理线程的句柄int m _ NYPE/进程类型(读写(int m _ nStartTime/开始时间int m _ nWorkTime/运行时间int m _ nID/进程号人;人_人最大_人;int g _ N
12、umPerson=0;长g _ CurrentTime=0;/基本时间片数int g _ personlist=/进程队列1,R,3,5,2,W,4,5,3,R,5,2,4,R,6,5,5,W,5.1,3,端,;int g _ NumoFrreading=0;int g _ NuMoWriteRequest=0;/申请写进程的个数HANDLE g _ HReadsemaFore/读者信号HANDLE g _ hWriteSemaphore/写者信号bool finished=false/所有的读完成/bool wf finished=false;/所有的写完成void CreatePerson
13、List(int * PPersonList);bool CreateReader(内部开始时间、内部工作时间、内部标识);bool CreateWriter(内部开始时间、内部工作时间、内部标识);DWORD WINAPI ReaderPrOc(LPVOID LPparam);DWORD WINAPI编写程序(LPVOID LPparam);int main()g _ hReadSemaphore=Createsemaphore(空,1100,空);/创建信号灯,当前可用的资源数为1、最大为100g _ hWriteSemaphore=createsemahore(空,1100,空);/创建
14、信号灯,当前可用的资源数为1、最大为100创建人员列表(g _人员列表);/创造所有的读者和作者printf()创建了所有读取器和写入器n. n);g _ CurrentTime=0;while(true)g _ CurrentTime睡眠(300);/300毫秒printf(CurrentTime=%dn ,g _ CurrentTime);如果(完成(返回0; /返回0;void CreatePersonList(int * ppersonlist)int I=0;int * pList=pPersonListsbool Ret(pList0!=END)开关(pList1)外壳R:Ret=
15、CreateReader(pList2,pList3,Plist0);/351,w452,523,654打破;案例W:Ret=CreateWriter(pList2,pList3,Plist0);打破;如果(!Ret)printf()创建人%d错误n ,Plist0);pList=4;/移动到下一个人列表DWORD WINAPI ReaderPrOc(LPVOID LPparam)/读过程人*佩森=(人*)参数;/等待开始时间而(g_CurrentTime!=pPerson-m_nStartTime) 打印(”阅读器%d正在请求.n 、PPerson-m _ NId);printf(“ n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * n”);/等待写请求WaitForSingl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《两只小象》教案设计
- 医疗健康产业园售楼部施工合同
- 林业项目招标投诉处理办法
- 工程施工农民工薪酬保障措施
- 制药业锅炉安全手册
- 商业广场供暖系统工程合同
- 社区服务公务车租赁协议
- 四人股东权益分配协议
- 美容养生招投标市场动态
- 篮球馆喜剧表演租赁协议
- 【课件】礼仪与教化 课件-高中美术湘美版(2019)美术鉴赏
- 临床教学能力师资培训考试测试题
- 家庭居室装饰装修工程保修单
- 小学生汉语拼音田字格练习
- 《旅行社经营与管理》教学课件汇总全套电子教案(完整版)
- 消防工程技术标书(暗标)
- DBJ∕T 15-138-2018 建筑电气防火检测技术规程
- 北师大版数学七年级上册期中测试题【含答案】(共4套)
- 2022年WABCO防抱死系统
- 离婚登记申请受理回执单(民法典版)
- 《过敏性休克》PPT课件(PPT 32页)
评论
0/150
提交评论