《OS课程设计读者写者.docx》由会员分享,可在线阅读,更多相关《OS课程设计读者写者.docx(28页珍藏版)》请在优知文库上搜索。
1、老州衮通裔假操作系统课程设计课程:计算机操作系统题目:进程同步(读者一写者)班级:姓名:学号:指导老师:日期:2012年12月21日书目1题目12wa121问题描述122采纳信号fit机制13蝌蝴目的与功能23.1 设计目的23.2 设计功能24总体设计34功能流程图34.2 开发平台与源程序的主要部分44.3 数据结构44.4 模块说明44.5 源程序55潴试用例,运行结果与运行状况分析225.1 测试用例225.2 运行结果2353运行结果分析246总结与行261题目进程同步模拟设计一读者和写者问题2.1 问题描述模拟用信号侬机制实现读者和写者问题,即有两组并发进程:读者和写者,共享一组数
2、据区,进行读写操作,要求任一时刻“写者”最多只允许一个,而读者”则允很多个。2.1.1 要求允很多个读者同时执行读操作;不允许读者、写者同时操作;不允很多个写者同时操作。2.1.2 读者加写者的相互关系:2.2 采纳信号-机制1) WmUteX表示读写的互斥信号量,初值:Wmutex=1;2)公共变fitRcount表示“正在读”的进程数,初值:Rcount=0;3)Rmutex:表示对RCoUnt的互斥操作,初值:Rmutex-1o3课程设计目的与功能3.1 设计目的通过试验模拟读者和写者之间的关系,了解并驾驭他们之间的关系与其原理。由此增加对进程同步的问题的了解,详细如下:D驾驭基本的同步
3、互斥算法,理解读者和写者模型;2) 了解WindOWS中多线程(多进程)的并发执行机制,线程(进程)间的同步和互斥;3)学习运用WindoWS中基本的同步对象,亚驭相应的AP1.3.2 蚂娜利用模拟用信号量机制实现读者和写者问题:通过用户限制读进程和写进程,反应读者和写者问题中所涉与的进程的同步与互斥。4.1功能流程图结束4.2 开发平台与源程序的主要部分本试验用C+语旨在VisualC+6.0中编程。4.3 髓结构intJnUm;读者个数intw_num;/写者个数intWmUteX=1;表示允许写成允许读intRCOUnt=0;表示正在读的进程数intRmUteX=1;/表示对Rcount
4、的互斥操作intr100,0,0,0,0,0,0,0,0,0;/表示读者的状态,1表示正在读intw10=0,0,0,0,0,0,0,0,0,0;/表示写者的状态,1表示正在写表示等待队列,0-9表示写者,10时需引入读者的等待队列,-1表示空intw-waitll-l,-Irb-Irb-Irlr1.-1.-Irlh读者的等待队列,。-9表示对应的读者,-1为空intr_wait(U=-l,-l,-1,-1,-1,-1,-1,-1,-1,-IrU;4.4 模块说明四组P、V函数:D写者进程由3个函数组成voidWrite_p(inti)模拟写者对Wmutex的P操作,同时也作为写者进程的人口v
5、oidwrite(inti)起先写操作voidWrite_v(inti)/模拟写者对Wmutex的V操作,写操作完成的时候调用2)读者进程由8个函数组成voidradd_p(inti)模拟读之前对Rmutex的P操作,同时也作为读者进程的入口voidradd(inti)/Rcount加1voidread_p(inti)/模拟读者对Wmutex的P操作voidradd_v(inti)/模拟读之的对Rmutex的V操作voidread(inti)读voidrsub_p(inti)/模拟读之后对Rmutex的P操作,读操作完成的时候调用voidrsub(inti)/Rcount减1voidread_
6、v(inti)模拟读者对Wmutex的V操作voidrsub_v(inti)模拟读之后对Rmutex的V操作4.5 海程期#include#include#include#includeusingnamespacestd;intr_num;/读者个数intw_num;/写者个数intWmutex=I;表示允许写或允许读intRcount=O;表示正在读的进程数intRmutex=1;表示对Rcount的互斥操作intr(101=0,0,0,0,0,0,0,0,0,0h/表示读者的状态,】表示正在读intw10=0,0,0,0,0,0,0,0,0,0;表示写者的状态,1表示正在写intw.wai
7、t11l=-1,-lrl,-1,-1,-1,-1,-1,-1,-1,-U;表示等待队列。9表示写者,10时需引入读者的等待队列,-1表示空intJWaitUlEm-I11,-1,-1,-1,-11;读者的等待队列,0-9表示对应的读者,-1为空voidwrite.p(inti);模拟写者对WmUteX的P操作,同时也作为写者进程的入口voidwrite(inti);起先写操作voidwrite_v(inti);模拟笃者对WmUteX的V操作,写操作完成的时候调用voidradd_p(inti);模拟读之前对Rmutex的P操作,同时也作为读者进程的入口voidradd(inti);/Rcoun
8、t加1voidread.p(inti);模拟读者对WmUteX的P操作voidradd_v(inti);模拟读之前对Rmutex的V操作voidread(inti);读voidrsub_p(inti);/模拟读之后对Rmutex的P操作,读操作完成的时候调用voidrsub(inti);/Rcount减1voidread_v(inti);模拟读者对Wmutex的V操作voidrsub_v(inti);模拟读之后对Rmutex的V操作模拟写者对WmUteX的P操作,同时为写者进程也作写的入口voidwrite_p(inti)Wmutex-;if(WmutexO)/表示假如WmUteX0,则该写者
9、进入等待队w_wait-Wmutex-l=i;elsewrite(i);进行写操作voidwrite(inti)wi=l;模拟写者对Wmutex的V操作,写操作完成的时候调用voidWrite_v(inti)(wi=O;Wmutex+;if(Wmutex=O)/表示假如Wmutex=O)&(w_waitOw_num)j=w_waitO|;for(k=0;kw_num;k+)w_waitk=w_waitk+1;write(j);elsej=r-waitO;for(k=0;kw_num;k+)w_waitk=w_wait(k+1;for(k=0;kr_num;k+)r_waitk=r_wait(k
10、+1);radd.v(j);模拟读之前对Rmutex的P操作,同时也作为读者进程的入口Rmutex-;if(RmutexO)/表示假如RmUteX0,则进入等待队列JWaid-RmUteX=i;elseradd(i);对于Rcount加1的限制voidradd(inti)Rcount+;if(Rcount=l)read.p(i);elseradd_v(i);模拟读者对WmUteX的P操作:voidread_p(inti)Wmutex-;if(WmutexO)表示假如WmUteXV0,则进入等待队列w_wait-Wmutex-1)=10;r.wait0=i;elseradd-v(i);模拟读之前
11、对Rmutex的V操作voidradd_v(inti)Rmutex+;if(Rmutex=O)/表示假如Rmutex=0,则从等待队列中选择读者进入RCOUnt的临界区intk,j;j=r-waitO;for(k=0;kr_num;k+)r_waitk=r_waitk+1;radd(j);rcad(i);进行读操作voidread(inti)ri=l;模拟读之后对Rmutex的P操作,读操作完成的时候调用voidrsub_p(inti)(ri=O;Rmutex-;rsub(i);对RcoUnt减1的限制voidrsub(inti)Rcount;if(Rcount=0)read_v(i);els
12、ersub-v(i);模拟读者对Wmutex的V操作voidread_v(inti)Wmutex+;if(Wmutex=0)&(w_wait0w_num)j=w-waitO;for(k=0;kw_num;k+)w_waitk=w_waitIk+1;write(j);elsej=r.waitO;for(k=0;kw_num;k+)w_waitk=w_waitk+1;for(k=0;kr_num;k+)r_waitk=r_waitk+1;radd_v(j);rsub_v(i);模拟读之后对Rmutex的V操作voidrsub_v(inti)Rmutex+;intmain()coutttt读者一写者问题演示coutw_num;while(w_num10)COUtw_num;/完成对写者个数的输入c。UtVV”请输入读者个数(1-10):;cinr-num;while(r_num10)coutr.num;完成对读者个数的输入intx,k,j,a20;while(l)coutM*endl;for(k=0;k20;k+)ak)=O;coutnWmutex=Wmutext,RcounttRmutex=Rmutex