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