用信号量机制实现的写者优先的算法如

合集下载

北理工操作系统实验二读者写者问题

北理工操作系统实验二读者写者问题

本科实验报告实验名称:操作系统原理实验(读者写者问题)课程名称:操作系统原理实验时间:2015.10.30 任课教师:王耀威实验地点:10#102实验教师:苏京霞实验类型: 原理验证□综合设计□自主创新学生姓名:孙嘉明学号/班级:1120121474/05611202 组号:学院:信息与电子学院同组搭档:专业:信息对抗技术成绩:实验二:读者写者问题一、实验目的1.通过编写和调试程序以加深对进程、线程管理方案的理解;2.熟悉Windows多线程程序设计方法;二、实验要求在Windows环境下,创建一个控制台进程,此进程包含n个线程。

用这n个线程来表示n个读者或写者。

每个线程按相应测试数据文件(后面介绍)的要求进行读写操作。

用信号量机制分别实现读者优先和写者优先问题。

读者-写者问题的读写操作限制(包括读者优先和写者优先)1)写-写互斥:不能有两个写者同时进行写操作2)读-写互斥:不能同时有一个线程在读,而另一个线程在写。

3)读-读允许:可以有一个或多个读者在读。

读者优先的附加限制:如果读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。

运行结果显示要求:要求在每个线程创建、发出读写申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。

测试数据文件包括 n行测试数据,分别描述创建的n个线程是读者还是写者,以及读写操作的开始时间和持续时间。

每行测试数据包括四个字段,每个字段间用空格分隔。

第1个字段为正整数,表示线程的序号。

第2个字段表示线程的角色,R表示读者,W表示写者。

第3个字段为一个正数,表示读写开始时间:线程创建后,延迟相应时间(单位为秒)后发出对共享资源的读写申请。

第4个字段为一个正数,表示读写操作的延迟时间。

当线程读写申请成功后,开始对共享资源进行读写操作,该操作持续相应时间后结束,释放该资源。

下面是一个测试数据文件的例子(在记事本手工录入数据):1 R 3 52 W 4 53 R 5 24 R 6 55 W 5.1 3三、实验环境硬件设备:个人计算机。

进程同步模拟设计——读者和写者问题

进程同步模拟设计——读者和写者问题

附件1:学号:012081034课程设计进程同步模拟设计——读者和题目写者问题学院计算机科学与技术学院专业计算机科学与技术班级计算机科学与技术姓名指导教师2011 年 1 月19 日目录目录 (1)1 设计概述 (4)1.1问题描述: (4)1.1.1规则: (4)1.1.2读者和写者的相互关系: (4)1.2采用信号量机制 (4)1.3 C++语言程序模拟用信号量机制实现生产者和消费者问题 (5)2课程设计目的及功能 (5)2.1 设计目的 (5)2.2 设计功能: (5)3 需求分析,数据结构或模块说明(功能与框图) (5)3.1数据结构 (5)3.2模块说明 (6)3.3开发平台及源程序的主要部分 (6)3.3.1写操作的设计: (6)3.3.2读操作的设计: (7)3.3.3主函数的设计: (9)3.4 功能流程图 (12)4测试用例,运行结果与运行情况分析 (12)4.1测试用例 (12)4.2运行结果 (13)4.3运行情况分析 (14)5自我评价与总结 (15)6 参考文献 (16)课程设计任务书学生姓名:专业班级:计算机科学与技术指导教师:工作单位:计算机科学与技术学院题目: 进程同步模拟设计——读者和写者问题初始条件:1.预备内容:阅读操作系统的进程管理章节内容,对进程的同步和互斥,以及信号量机制度有深入的理解。

2.实践准备:掌握一种计算机高级语言的使用。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.模拟用信号量机制实现读者和写者问题。

2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他的其他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。

读者-写者问题的实现

读者-写者问题的实现

目录摘要 (1)1.设计思想 (2)2.各模块的伪码算法 (3)3. 函数关系调用图 (5)4.程序测试结果 (6)设计总结 (9)参考文献 (10)致谢 (11)摘要本设计的读者写者问题,是指一些进程共享一个数据区。

数据区可以使一个文件、一块内存空间或者一组寄存器。

Reader进程只能读数据区中的数据,而writer进程必须与其他进程互斥地访问共享对象的同步问题。

读者写者问题可以这样的描述, 有一群写者和一群读者, 写者在写同一本书, 读者也在读这本书, 多个读者可以同时读这本书。

但是,只能有一个写者在写书, 并且,读者必写者优先,也就是说,读者和写者同时提出请求时,读者优先。

当读者提出请求时需要有一个互斥操作, 另外, 需要有一个信号量S来确定当前是否可操作。

本设计方案就是通过利用记录型信号量对读者写者问题的解决过程进行模拟演示,形象地阐述记录型信号量机制的工作原理。

关键词:共享对象,互斥,同步,信号量1.设计思想本设计借助C语言实现进程同步和互斥的经典问题--读者写者问题,用高级语言编写和调试一个进程同步程序,以加深对进程同步机制的理解。

通过用C 语言模拟进程同步实现,加深理解有关进程同步和互斥机制的概念及P、V操作的应用。

学生通过该题目的设计过程,掌握读者、写者问题的原理、软件开发方法并提高解决实际问题的能力。

在 Windows环境下,创建一个包含n个线程的控制台进程。

用这n个线每个线程按相应测试数据文件的要求,进行读写操作。

程来表示 n 个读者或写者。

请用信号量机制分别实现读者优先和写者优先的读者-写者问题。

将所有的读者和所有的写者分别放进两个等待队列中,当读允许时就让读者队列释放一个或多个读者,当写允许时,释放第一个写者操作。

读者-写者的读写限制(包括读者优先和写者优先)1)写-写互斥,即不能有两个写者同时进行写操作;2)读-写互斥,即不能同时有一个读者在读,同时却有一个写者在写;3)读读允许,即可以有 2 个以上的读者同时读;4)读者优先附加条件:如果一个读者申请进行读操作,同时又有一个读操作正在进行读操作,则该读者可以直接开始读操作;5)写者优先附加条件:如果一个读者申请进行读操作时已经有一个写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。

读者-写者问题说明书

读者-写者问题说明书

《操作系统原理》课程设计任务书题目:读者-写者问题的实现学生姓名:李志旭学号:13740113 班级:_13级软件工程_题目类型:软件工程(R)指导教师:陈文娟、马生菊一、设计目的学生通过该题目的设计过程,掌握读者、写者问题的原理、软件开发方法并提高解决实际问题的能力。

二、设计任务编写程序实现读者优先和写者优先问题:读者-写者问题的读写操作限制(包括读者优先和写者优先)写-写互斥:不能有两个写者同时进行写操作读-写互斥:不能同时有一个线程在读,而另一个线程在写。

读-读允许:可以有一个或多个读者在读。

三、设计要求1.分析设计要求,给出解决方案(要说明设计实现所用的原理、采用的数据结构)。

2.设计合适的测试用例,对得到的运行结果要有分析。

3.设计中遇到的问题,设计的心得体会。

4.文档:课程设计打印文档每个学生一份,并装在统一的资料袋中,资料袋前面要贴有学校统一的资料袋封面。

四、提交的成果1. 课程设计说明书内容包括(1) 封面(学院统一印制);(2) 课程设计任务书;(3) 中文摘要150字;关键词3-5个;(4) 目录;(5) 正文;(设计思想;各模块的伪码算法;函数的调用关系图;测试结果等)(6) 设计总结;(7) 参考文献;(8) 致谢等。

注:每一部分是单独的一章,要另起一页写。

2. 排版要求(1) 所有一级标题为宋体三号加粗(即上面写的2~8部分,单独一行,居中)(2) 所有二级标题为宋体四号加粗(左对齐)(3) 所有三级标题为宋体小四加粗(左对齐)(4) 除标题外所有正文为宋体小四,行间距为固定值22磅,每个段落首行缩进2字符(5) 目录只显示3级标题,目录的最后一项是无序号的“参考文献资料”。

3. 其他要求(班长负责,务必按照以下方式建文件夹)(1) 以班级为单位刻录光盘一张,光盘以班级命名,例如:“10级计算机科学与技术1班”;(2) 光盘内每人一个文件夹,以学号姓名命名——如“10730101 陈映霞”,内容包括任务书、设计文档。

操作系统专业试题

操作系统专业试题

第二章进程管理一、选择题:1、下面过于程序的描述,正确的是(C)A. 程序执行的最终结果受到外界因素的影响,跟初始条件无关B. 程序执行的最终结果跟速度有关C. 程序是按前后次序相继地进行计算机操作序列集合,是一个静态的概念;D. 程序只能通过顺序执行2、程序的顺序执行有以下特点(B)A. 顺序性、封闭性、独立性B. 顺序性、封闭性、可再现性C. 顺序性、封闭性、随机性D. 顺序性、随机性、独立性3、现代操作系统的特点(D)A. 程序的并发执行;B. 系统所拥有的资源被共享;C. 用户随机地使用系统资源;D. 以上三者都是。

4、多道程序系统中的程序执行的特点为(A)A. 独立性、随机性、资源共享性;B. 顺序性、封闭性、可再现性;C. 顺序性、封闭性、随机性;D. 顺序性、随机性、独立性;5、PCB所包含的信息中,下列说法不正确的是(D)。

A. 描述信息B. 控制信息C. 资源信息D. CPU信息6、下面哪项不属于进程的基本状态:(C)A. 阻塞状态B. 就绪状态C. 挂起状态D. 执行状态7、在单CPU系统中,任一时刻处于执行状态的进程有几个(A)A.1 B.2 C.3 D.无法判断8、就绪状态分为内存就绪和外存就绪,这种方式的好处是(A)A. 明显提高内存的利用效率B. 降低系统开销C. 降低系统复杂性D. 降低系统参数和状态转换过程9、下面说法错误的是:(D)A.就绪状态进程得到除CPU以外其他资源,只要调度得到处理机,便可立即执行B.只有处于就绪状态的进程经调度选中之后才可以进入执行状态C.处于外存就绪状态的进程只有先成为内存就绪状态后,才可执行D.从一个状态到另一个状态的转换只要使用不同的控制过程就可以实现10、关于进程状态之间的转换原因,下列说法错误的是:(D)A.由系统唤醒,进程由阻塞态进入就绪态B.因为申请某资源忙或者I/O设备忙,进程由执行态进入阻塞态C.因时间片用完,进程由执行态进入就绪态D.进程经由一段时间的等待后,可以自动由就绪态到执行态11、()就是系统使用一些具有特定功能的程序段来创建、撤销进程以及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。

操作系统题目

操作系统题目
1、系统产生死锁是指(5)。产生死锁的基本原因是(B)和(C),产生死锁的四 个必要条件是互斥条件、(D)、不剥夺条件和(E)。 A: (1)系统发生重大故障(2)若干进程同时处于阻塞状态(3)若干进程正
在等待永远不可能得到的资源(4)请求的资源数量大于系统提供的资源数量(5) 若干进程等待被其它进程所占用而又不可能被释放的资源
程创建的典型事件是(2)
A:(1)用户注册 (2)用户登录(3)用户记账
(4)用户通信
B:(1)作业录入(2)作业调度(3)进程调度 (4)中级调度
7、由系统专门为运行中的应用进程创建新进程的事件是(4)。在创建进程时,
(3)不是创建所必须的步骤。
C:(1)分配资源 (2)进行通信(3)共享资源
(4)提供服务
1、操作系统是一种(B)
A. 应用软件 B.系统软件
C.通用软件 D.工具软件
2、操作系统的(D)管理部分负责对进程进行调度
A. 存储器 B. 设备 C. 文件 D. 处理机
3、(A)要保证系统有较高的吞吐能力
A. 批处理系统 B. 分时系统
C. 网络操作系统 D 分布式操Байду номын сангаас系统
4、操作系统的基本类型主要有(C)
最低松弛度优先(LIF) 1、在三种基本类型的操作系统中,都设置了(3),在批处理系统中还应该设置 (2);在分时系统中除了(3),通常还设置了(4)。
A,B,C(1)剥夺调度(2)作业调度 (3)进程调度(4)中级调度
2、下列算法中,(3)只能采用非抢占调度方式(2)只能采用抢占调度方式,而 其余的算法即可采用抢占方式,也可采用非抢占方式。 (1)高优先权优先法(2)时间片轮转法 (3)FCFS 调度算法 (4)短作业优先算法 3、若某单处理器多进程系统中有多个就绪态进程,则下列关于处理机调度的叙 述中错误的是(C) A. 在进程结束时能进行处理机调度 B. 创建新进程后能进行处理机调度 C. 在进程处于临界区时不能进行处理机调度 D. 在系统调用完成并返回用户态时能进行处理机调度 4、某系统正在执行三个进程 P1、P2 和 P3,各进程的计算(CPU)时间和 I/O 时 间比例如下表所示。

2022年巢湖学院计算机科学与技术专业《操作系统》科目期末试卷B(有答案)

2022年巢湖学院计算机科学与技术专业《操作系统》科目期末试卷B(有答案)

2022年巢湖学院计算机科学与技术专业《操作系统》科目期末试卷B(有答案)一、选择题1、若8个字(字长32位)组成的位示图管理内存,假定用户归还一个块号为100的内,存块,它对应位示图的位置为()。

假定字号、位号、块号均从1开始算起,而不是从0开始。

A.字号为3,位号为5B.字号为4,位号为4C.字号为3,位号为4D.字号为4,位号为52、如果文件采用直接存取方法,且文件大小不固定,则应采用()物理结构。

A.直接B.索引C.随机D.顺序3、为多道程序提供的共享资源不足时,可能会产生死锁。

但是,不当的()也可能产生死锁。

A.进程调度顺序B.进程的优先级C.时间片大小D.进程推进顺序4、下列选项中,会导致进程从执行态变为就绪态的事件是()。

A.执行P(wait)操作B.中请内存失败C.启动I/O设备D.被高优先级进程抢占5、若一个用户进程通过read系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是()。

I.若该文件的数据不在内存中,则该进程进入睡眠等待状态II.请求rcad系统调用会导致CPU从用户态切换到核心态III.read系统调用的参数应包含文件的名称A.仅I、IIB. 仅I、IIIC.仅II、IIID. I、II和III6、操作系统采用分页存储管理方式,要求()。

A.每个进程拥有一张页表,且进程的页表驻留在内存中,B.每个进程拥有一张页表,但只要执行进程的页表驻留在内存中C.所有进程共享一张页表,以节约有限的内存空间,但页表必须驻留在内存中D.所有进程共享一张页表,只有页表中当前使用的页面必须驻留在内存中7、适合多道程序运行的存储管理中,存储保护是为了()A.防止一个作业占用同个分区B.防止非法访问磁盘文件C.防止非法访问磁带文件D.防止各道作业相互干扰8、某时刻进程的资源使用情况见表。

此时的安全序列是()A.P1、P2、P3、P4B. P1、P3、P2、P4C. P1、P4、P3、P2D.不存在9、在下列选项中,()不属于操作系统提供给用户的可使用资源。

读者写者问题

读者写者问题
2)读-写互斥,即不能同时有一个读者在读,同时却有一个写者在写
3)读读允许,即可以有2个以上的读者同时读
将所有的读者与所有的写者分别放进两个等待队列中,当读允许时就让读者队列释放一个或多个读者,当写允许时,释放第一个写者操作。读者写者问题的定义如下:有一个许多进程共享的数据区,这个数据区可以就是一个文件或者主存的一块空间;有一些只读取这个数据区的进程(Reader)与一些只往数据区写数据的进程(Writer),此外还需要满足以下条件:1)任意多个读进程可以同时读这个文件;2)一次只有一个写进程可以往文件中写;3)如果一个写进程正在进行操作,禁止任何读进程度文件。我们需要分两种情况实现该问题:
一设计概述
所谓读者写者问题,就是指保证一个writer进程必须与其她进程互斥地访问共享对象的同步问题。
读者写者问题可以这样的描述,有一群写者与一群读者,写者在写同一本书,读者也在读这本书,多个读者可以同时读这本书,但就是,只能有一个写者在写书,并且,读者必写者优先,也就就是说,读者与写者同时提出请求时,读者优先。当读者提出请求时需要有一个互斥操作,另外,需要有一个信号量S来当前就是否可操作。
信号量机制就是支持多道程序的并发操作系统设计中解决资源共享时进程间的同步与互斥的重要机制,而读者写者问题则就是这一机制的一个经典范例。
与记录型信号量解决读者—写者问题不同,信号量机制它增加了一个限制,即最多允许RN个读者同时读。为此,又引入了一个信号量L,并赋予初值为RN,通过执行wait(L,1,1)操作,来控制读者的数目,每当有一个读者进入时,就要执行wait(L,1,1)操作,使L的值减1。当有RN个读者进入读后,L便减为0,第RN+1个读者要进入读时,必然会因wait(L,1,1)操作失败而堵塞。对利用信号量来解决读者—写者问题的描述如下:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用信号量机制实现的写者优先的算法如:
Var Mut1,Mut2,Wmutex,Fmutex:Semaphore;
Rcount,Wcount:integer;
Mut1:=Mut2:=WMutex:=Fmutex:=1;
Rcount:=Wcount:=0;
//Fmutex --> 读者写者互斥
//WMutex --> 写者互斥
//Mut1 --> access to Rcount && 竞争Fmutex
//Mut2 --> access to Wcount
Writer:begin
Wait(Mut1);
Wcount:=Wcount+1;
If Wcount=1 then Wait(Fmutex); //如有读者,写者阻塞在此处
Signal(Mut1);
Wait(WMutex);
写操作;
Signal(Wmutex);
Wait(Mut1);
Wcount:=Wcount-1;
If Wcount=0 then Signal(Fmutex);
Signal(Mut1);
end
Reader:begin
Wait(Mut1); //读者需要先申请Mut1,如果有写者在等待Fmutex,则读者被阻塞,写者优先
Signal(Mut1); //立即释放Mut1,使写者可以随时申请到Mut1
Wait(Mut2);
Rcount:=Rcount+1;
If Rcount=1 then Wait(Fmutex); //第一个读者进入时,申请Fmutex;如有写者,第一个读者会阻塞在此处
Signal(Mut2);
读操作;
Wait(Mut2);
Rcount:=Rcount-1;
If Rcount=0 then Signal(Fmutex); //最后一个读者退出时,释放Fmutex Singal(Mut2);
end。

相关文档
最新文档