1、 1 网络操作系统网络操作系统 课程设计报告课程设计报告 题 目 LinuxLinux 下读者与写者的问题实现下读者与写者的问题实现 网络工程系网络工程系 2012013 3 年年 1 1 月月 1 1 日日 2 目录目录 1. 设计目的与要求 .P3 2 设计思想 P3 3. 设计分析 .P3 4 程序实现 P5 5、 设计原理 P6 6.程序调试 P7 7.源程序代码.P8 8. 程序测试结果 P12 9心得与体会 . P13 10参考文献 .P13 一、一、设计设计目的与要求目的与要求 l. l. 用信号量来实现读者写者问题。用信号量来实现读者写者问题。 3 2.2.理解和运用信号量、理
2、解和运用信号量、PVPV 原语、进程间的同步互斥关系等基本知识。原语、进程间的同步互斥关系等基本知识。 读者读者写者问题的定义如下:有一个许多进程共享的数据区,这个数据区可以是一个文写者问题的定义如下:有一个许多进程共享的数据区,这个数据区可以是一个文 件或者主存的一块空间;有一些只读取这个数据区的进程(件或者主存的一块空间;有一些只读取这个数据区的进程(ReaderReader)和一些只往数据区写)和一些只往数据区写 数据的进程数据的进程(Writer)(Writer),此外还需要满足以下条件:,此外还需要满足以下条件: (1 1)任意多个读进程可以同时读这个文件;)任意多个读进程可以同时读
3、这个文件; (2 2)一次只有一个写进程可以往文件中写;)一次只有一个写进程可以往文件中写; (3 3)如果一个写进程正在进行操作,禁止任何读进程度文件。)如果一个写进程正在进行操作,禁止任何读进程度文件。 我们需要分两种情况实现该问题:我们需要分两种情况实现该问题: 读优先:要求指一个读者试图进行读操作时,如果这时正有其他读者在进行操作,他读优先:要求指一个读者试图进行读操作时,如果这时正有其他读者在进行操作,他 可直接开始读操作,而不需要等待。可直接开始读操作,而不需要等待。 写优先:一个读者试图进写优先:一个读者试图进行读操作时,如果有其他写者在等待进行写操作或正在进行行读操作时,如果有
4、其他写者在等待进行写操作或正在进行 写操作,他要等待该写者完成写操作后才开始读操作。写操作,他要等待该写者完成写操作后才开始读操作。 二、二、设计思想设计思想 读者写者问题可以这样的描述, 有一群写者和一群读者, 写者在写同一 本书, 读者也在读这本书, 多个读者可以同时读这本书。但是,只能有一个写者 在写书, 并且,读者比写者优先,也就是说,读者和写者同时提出请求时,读者优 先。 当读者提出请求时需要有一个互斥操作, 另外, 需要有一个信号量 S 来确定 当前是否可操作。 本设计方案就是通过利用记录型信号量对读者写者问题的解决过程进行模 拟演示,形象地阐述记录型信号量机制的工作原理。 三、三
5、、设计设计分析分析 3.1 在 linux 环境下,使用多线程和信号量机制实现经典的读者写者问题, 每个线程代表一个读者或一个写者。每个线程按相应测试数据文件的要求,进行 读写操作。请用信号量机制分别实现读者优先和写者优先的读者-写者问题。 读者-写者问题的读写操作限制: (1)写-写互斥,即不能有两个写者同时进行写操作 (2)读-写互斥,即不能同时有一个读者在读,同时却有一个写者在写 (3)读-读允许,即可以有二个以上的读者同时读 4 将所有的读者和所有的写者分别放进两个等待队列中, 当读允许时就让读者队列释放一 个或多个读者,当写允许时,释放第一个写者操作。读者写者问题的定义如下:有一个许
6、多 进程共享的数据区, 这个数据区可以是一个文件或者主存的一块空间; 有一些只读取这个数 据区的进程(Reader)和一些只往数据区写数据的进程(Writer),此外还需要满足以下条件: 1)任意多个读进程可以同时读这个文件;2) 一次只有一个写进程可以往文件中写;3)如果 一个写进程正在进行操作,禁止任何读进程度文件。我们需要分两种情况实现该问题: 读优先:要求指一个读者试图进行读操作时,如果这时正有其他读者在进行操作,他可 直接开始读操作,而不需要等待。写优先:一个读者试图进行读操作时,如果有其他写者在 等待进行写操作或正在进行写操作,他要等待该写者完成写操作后才开始读操作。 读者优先的附加限制: 如果一个读者申请进行读操作时已有另一读者正在进 行读操作,则该读者可直接开始读操作。 写者优先的附加限制: 如果一个读者申请进行读操作时已有另一写者在等待 访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。 运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读写操 作和结束读写操作时分别