1、 操作系统课程设计报告 题题 目:目: 读者写者问题读者写者问题 学学 院:院: 专专 业:业: 班班 级:级: 学学 号:号: 姓姓 名:名: 指导老师:指导老师: 2 目目 录录 一一 设计概述设计概述 3 3 二二 设计目的与内容设计目的与内容 4 4 三三 设计分析设计分析 5 5 四四 程序实现程序实现 6 6 五五 程序调试程序调试 7 7 六六 结果分析和讨论结果分析和讨论 7 7 七七 心得体会心得体会 8 8 八八 源代码源代码 8 8 九九 实验截图实验截图1414 3 一一 设计概述设计概述 所谓读者写者问题, 是指保证一个 writer 进程必须与其他进程互斥地访问共
2、享对象的同步问题。 读者写者问题可以这样的描述, 有一群写者和一群读者, 写者在写同一本书, 读者也在读这本书, 多个读者可以同时读这本书, 但是, 只能有一个写者在写书, 并且,读者必写者优先,也就是说,读者和写者同时提出请求时,读者优先。当 读者提出请求时需要有一个互斥操作, 另外, 需要有一个信号量 S 来当前是否可 操作。 信号量机制是支持多道程序的并发操作系统设计中解决资源共享时进程间 的同步与互斥的重要机制,而读者写者问题则是这一机制的一个经典范例。 与记录型信号量解决读者写者问题不同,信号量机制它增加了一个限制, 即最多允许 RN 个读者同时读。 为此, 又引入了一个信号量 L,
3、并赋予初值为 RN, 通过执行 wait(L,1,1)操作,来控制读者的数目,每当有一个读者进入时,就要 执行 wait(L,1,1)操作,使 L 的值减 1。当有 RN 个读者进入读后,L 便减为 0, 第 RN+1 个读者要进入读时,必然会因 wait(L,1,1)操作失败而堵塞。对利用 信号量来解决读者写者问题的描述如下: Var RN integer;L,mx:semaphore: =RN,1; Begin Parbegin Reader :begin Repeat Swait(L,1,1); Swait(mx,1,0); . Perform reader operation; Ssi
4、gnal(L,1); 4 Until false; End Writer :begin Repeat Swait(mx ,1,1,l,RN,0); Perform writer operation; Ssignal(mx,1); Until false; End Parend End 其中, Swait (mx,1,0) 语句起着开关作用, 只要无 Writer 进程进入些,mx=1, reader 进程就都可以进入读。但是要一旦有 Writer 进程进入写时,其 MX=0,则 任何 reader 进程就都无法进入读。Swait(mx ,1,1,l,RN,0)语句表示仅当既无 Write 进程
5、在写(mx=1),又无 reader 进程在读(L=RN)时,writer 进程才能进入临 界区写。 本设计方案就是通过利用记录型信号量对读者写者问题的解决过程进行模 拟演示,形象地阐述记录型信号量机制的工作原理。 二二 设计目的与内容设计目的与内容 一 实验目的 l. 用信号量来实现读者写者问题。 2. 理解和运用信号量、PV 原语、进程间的同步互斥关系等基本知识。二、 二 实验内容 读者写者问题的定义如下:有一个许多进程共享的数据区,这个数据区可以 是一个文件或者主存的一块空间;有一些只读取这个数据区的进程(Reader)和 一些只往数据区写数据的进程(Writer),此外还需要满足以下条件: (1) 任意多个读进程可以同时读这个文件; 5 (2) 一次只有一个写进程可以往文件中写; (3) 如果一个写进程正在进行操作,禁止任何读进程度文件。 我们需要分两种情况实现