1、 1 操作系统课程设计说明书操作系统课程设计说明书 学院名称: 计算机与信息工程学院 班级名称: 网工 114 班 组长姓名: 何铭川 学 号: 2011211371 题 目: 读者写者问题 指导教师: 组员姓名: 起止日期: 2013.06.242013.06.28 2 第一部分:正文部分第一部分:正文部分 一、一、选题背景选题背景 所谓读者写者问题,是指保证一个 writer 进程必须与其他进程互斥地访问 共享对象的同步问题。 读者写者问题可以这样的描述, 有一群写者和一群读者, 写者在写同一本书, 读者也在读这本书, 多个读者可以同时读这本书, 但是, 只能有一个写者在写书, 并且,读者
2、必写者优先,也就是说,读者和写者同时提出请求时,读者优先。当 读者提出请求时需要有一个互斥操作,另外,需要有一个信号量 S 来当前是否可 操作。 信号量机制是支持多道程序的并发操作系统设计中解决资源共享时进程间 的同步与互斥的重要机制,而读者写者问题则是这一机制的一个经典范例。 与记录型信号量解决读者写者问题不同,信号量机制它增加了一个限制, 即最多允许 RN 个读者同时读。为此,又引入了一个信号量 L,并赋予初值为 RN, 通过执行 wait(L,1,1)操作,来控制读者的数目,每当有一个读者进入时,就 要执行 wait(L,1,1)操作,使 L 的值减 1。当有 RN 个读者进入读后,L
3、便减为 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; Ssignal(L,1); Until false; End Writer:begin Repeat Swait(mx ,1,1,l,RN,0); Perform writer operation; Ss
4、ignal(mx,1); 3 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 进程在写(mx=1) ,又无 reader 进程在读(L=RN)时,writer 进程才能进 入临界区写。 本设计方案就是通过利用记录型信号量对读者写者问题的解决过程进行模 拟演示,形象地阐述记录型信号
5、量机制的工作原理。 二、二、设计思路设计思路 在 Windows 7 环境下,创建一个包含 n 个线程的控制台进程。用这 n 个线 程来表示 n 个读者或写者。 每个线程按相应测试数据文件的要求, 进行读写操作。 请用信号量机制分别实现读者优先和写者优先的读者-写者问题。 读者-写者问题的读写操作限制: 读者-写者的读写限制(包括读者优先和写者优先) 写-写互斥,即不能有两个写者同时进行写操作 读-写互斥,即不能同时有一个读者在读,同时却有一个写者在写 读读允许,即可以有 2 个以上的读者同时读 将所有的读者和所有的写者分别放进两个等待队列中, 当读允许时就让读者 队列释放一个或多个读者,当写
6、允许时,释放第一个写者操作。读者写者问题的 定义如下:有一个许多进程共享的数据区,这个数据区可以是一个文件或者主存 的一块空间;有一些只读取这个数据区的进程(Reader)和一些只往数据区写数 据的进程(Writer),此外还需要满足以下条件:任意多个读进程可以同时读这 个文件;一次只有一个写进程可以往文件中写; 如果一个写进程正在进行操 作,禁止任何读进程度文件。我们需要分两种情况实现该问题: 读优先:要求指一个读者试图进行读操作时,如果这时正有其他读者在进行 操作,他可直接开始读操作,而不需要等待。写优先:一个读者试图进行读操作 时,如果有其他写者在等待进行写操作或正在进行写操作,他要等待该写者完成 写操作后才开始读操作,具体流程如下图 2.1 所示。 4 图 2.1 读者写者总体流程框图 三三、过程论述过程论述 概要设计 程序由两部分组成: 读者-写者模块:包括系统调用接口,