1、 * 实践教学实践教学 * 计算机与通信学院 2012 年秋季学期 操作系统原理操作系统原理课程设计课程设计 题 目: 读者-写者问题的实现 专业班级: 姓 名: 学 号: 指导教师: 成 绩: 1 目录目录 摘 要 . 2 1 设计思想 . 3 2 各模块的伪码算法 . 4 3. 函数关系调用图 . 6 4 程序测试结果 . 7 设计总结 10 参考文献 11 致 谢 12 2 摘摘 要要 本设计的读者写者问题,是指一些进程共享一个数据区。数据区可以使一个 文件、一块内存空间或者一组寄存器。Reader 进程只能读数据区中的数据,而 writer 进程必须与其他进程互斥地访问共享对象的同步问
2、题。 读者写者问题可以这样的描述, 有一群写者和一群读者, 写者在写同一本 书, 读者也在读这本书, 多个读者可以同时读这本书。但是,只能有一个写者在 写书, 并且,读者必写者优先,也就是说, 读者和写者同时提出请求时,读者优先。 当读者提出请求时需要有一个互斥操作, 另外, 需要有一个信号量 S 来确定当 前是否可操作。 本设计方案就是通过利用记录型信号量对读者写者问题的解决过程进行模 拟演示,形象地阐述记录型信号量机制的工作原理。 关键词关键词:共享对象,互斥,同步,信号量 3 1 1 设计思想设计思想 本设计借助 C 语言实现进程同步和互斥的经典问题-读者写者问题, 用高级 语言编写和调
3、试一个进程同步程序,以加深对进程同步机制的理解。通过用 C 语言模拟进程同步实现,加深理解有关进程同步和互斥机制的概念及 P、V 操作 的应用。学生通过该题目的设计过程,掌握读者、写者问题的原理、软件开发方 法并提高解决实际问题的能力。 在 Windows 环境下,创建一个包含 n 个线程的控制台进程。 用这 n 个线每个 线程按相应测试数据文件的要求,进行读写操作。程来表示 n 个读者或写者。 请用信号量机制分别实现读者优先和写者优先的读者-写者问题。 将所有的读者和所有的写者分别放进两个等待队列中,当读允许时就让读 者队列释放一个或多个读者,当写允许时,释放第一个写者操作。 读者-写者的读
4、写限制(包括读者优先和写者优先) 1)写-写互斥,即不能有两个写者同时进行写操作; 2)读-写互斥,即不能同时有一个读者在读,同时却有一个写者在写; 3)读读允许,即可以有 2 个以上的读者同时读; 4)读者优先附加条件:如果一个读者申请进行读操作,同时又有一个读操 作正在进行读操作,则该读者可以直接开始读操作; 5)写者优先附加条件:如果一个读者申请进行读操作时已经有一个写者在 等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操 作。 4 2 2 各模块各模块的伪码算法的伪码算法 读者优先算法:读者优先算法: 设置两个互斥信号量: rwmutex 用于写者与其他读者/写者互
5、斥的访问共享数据 rmutex 用于读者互斥的访问 读者计数器 readcount semaphore rwmutex=1, rmutex=1; int readcount = 0; reader i /读者进程 i=1,2,. do P(rmutex); /读者互斥 readcount+; /读者数加 1 if (readcount = 1) P(rwmutex); /读者写者互斥 V(rmutex); 读者读数据; P(rmutex); Readcount-; if (readcount = 0) V(rwmutex); V(rmutex); while(1); writer j /写者进
6、程 j = 1,2,. do P(rwmutex); 写文件; V(rwmutex); while(1); 写者优先算法:写者优先算法: 设置三个互斥信号量: rwmutex 用于写者与其他读者/写者互斥的访问共享数据 rmutex 用于读者互斥的访问 读者计数器 readcount nrmutex 用于写者等待已进入读者退出,所有读者退出前互斥写操作 semaphore rwmutex= 1,rmutex= 1,nrmutex= 1; 5 int readcount = 0; reader i /读者进程 i=1,2,. do P(rwmutex); P(rmutex); readcount+; if (readcount = 1) P(nrmutex); /