欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    OS课程设计读者写者.docx

    • 资源ID:1469450       资源大小:61.66KB        全文页数:28页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    OS课程设计读者写者.docx

    老州衮通裔假操作系统课程设计课程:计算机操作系统题目:进程同步(读者一写者)班级:姓名:学号:指导老师:日期:2012年12月21日书目1题目12wa½121问题描述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.1.1 要求允很多个读者同时执行读操作;不允许读者、写者同时操作;不允很多个写者同时操作。2.1.2 读者加写者的相互关系:2.2 采纳信号-机制1) WmUteX表示读写的互斥信号量,初值:Wmutex=1;2)公共变fitRcount表示“正在读”的进程数,初值:Rcount=0;3)Rmutex:表示对RCoUnt的互斥操作,初值:Rmutex-1o3课程设计目的与功能3.1 设计目的通过试验模拟读者和写者之间的关系,了解并驾驭他们之间的关系与其原理。由此增加对进程同步的问题的了解,详细如下:D驾驭基本的同步互斥算法,理解读者和写者模型;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的互斥操作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操作,同时也作为写者进程的人口voidwrite(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_v(inti)模拟读者对Wmutex的V操作voidrsub_v(inti)模拟读之后对Rmutex的V操作4.5 海程期#include<stdio.h>#include<windows.h>#include<process.h>#include<iostream>usingnamespacestd;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.wait11l=-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);/Rcount加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(Wmutex<O)/表示假如WmUteX<0,则该写者进入等待队w_wait-Wmutex-l=i;elsewrite(i);进行写操作voidwrite(inti)wi=l;模拟写者对Wmutex的V操作,写操作完成的时候调用voidWrite_v(inti)(wi=O;Wmutex+;if(Wmutex<=O)/表示假如Wmutex<=O,则从等待队列中选择写者或读者进行操作intif(w_waitO>=O)&&(w_waitO<w_num)j=w_waitO|;for(k=0;k<w_num;k+)w_waitk=w_waitk+1;write(j);elsej=r-waitO;for(k=0;k<w_num;k+)w_waitk=w_wait(k+1;for(k=0;k<r_num;k+)r_waitk=r_wait(k+1);radd.v(j);模拟读之前对Rmutex的P操作,同时也作为读者进程的入口Rmutex-;if(Rmutex<O)/表示假如RmUteX<0,则进入等待队列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(Wmutex<O)表示假如WmUteXV0,则进入等待队列w_wait-Wmutex-1)=10;r.wait0=i;elseradd-v(i);模拟读之前对Rmutex的V操作voidradd_v(inti)Rmutex+;if(Rmutex<=O)/表示假如Rmutex<=0,则从等待队列中选择读者进入RCOUnt的临界区intk,j;j=r-waitO;for(k=0;k<r_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);elsersub-v(i);模拟读者对Wmutex的V操作voidread_v(inti)Wmutex+;if(Wmutex<=O)/表示假如WmUteXV=0,则从等待队列中选择写者或读者进行操作intk,j;if(w_wait01>=0)&&(w_wait0<w_num)j=w-waitO;for(k=0;k<w_num;k+)w_waitk=w_waitIk+1;write(j);elsej=r.waitO;for(k=0;k<w_num;k+)w_waitk=w_waitk+1;for(k=0;k<r_num;k+)r_waitk=r_waitk+1;radd_v(j);rsub_v(i);模拟读之后对Rmutex的V操作voidrsub_v(inti)Rmutex+;intmain()cout<<"ttt读者一写者问题演示cout<<endl;CoUtVV”请输入写者个数(1-10):cin>>w_num;while(w_num<1IlW_nUm>10)COUt<<”输入有误,请重新输入写者个数(1-10):";cin>>w_num;/完成对写者个数的输入c。UtVV”请输入读者个数(1-10):";cin>>r-num;while(r_num<1r-num>10)cout<v"输入有误,请重新输入读者个数(1-10):cin>>r.num;完成对读者个数的输入intx,k,j,a20;while(l)cout<<M*"<<endl;for(k=0;k<20;k+)ak)=O;cout<<nWmutex="<<Wmutex<<"t"<<"Rcount=>,<<Rcount<<"t"<<"Rmutex="<<Rmutex<<endl;cout<<endl;for(k=0;k<w_num;k+)if(wlk=l)cout<<"写者”<v(k+l)<<"正在写"<<endl;for(k=0;k<r_num;k+)if(rkl=l)cout<<"=读者"vv(k+l)vv"正在读="<<endl;if(w-waitO=-l)JCOUtVV"等待队列中无对象"<<endl;cout<<endl;elseCoUt<<”等待队列中有:”;for(k=0;k<w_num;k+)if(w_waitk=10)for(j=0;j<5;j+)cout<<"->"«"读者if(w_waitk>=0)8b&(w_waitk<w_num)cout<<"->"<<"写者"«(w-wait(k+1)<<"t"cout<<cndl;for(k=0;k<w_num;k+)x=0;for(j=0;j<w_num;j+)if(k=w-waitj)a(k=l;x=1;if(x=l)continue;cout<<"("<<(k+l)<<")写者"<v(k+l);if(wk=O)CoUt<v"中清',;elseCOUt<<"完成"for(k=0;k<r_num;k+)x=0;for(j=0;j<r_num;j+)if(k=r_waitj)ak+w_num=l;x=1;if(x=l)continue;cout<<r,("<<(k+l+w_num)«")读者"<<(k+l);if(rk=O)cout<<"i,;elseCOUt<<"完成"cout<<"("<<(w_num+r_num+1)«")结束"v<endl;CoUtVV”请输入选项序号:";cin>>x;while(x<l|x>(w_num+r_num+l)ax-ll=l)if(ax-l=l)CoUt<<"该对象已在等待队列中,请重新输入门elseCOUt<<"输入有误,请重新输入:";cin>>x;for(k=0;k<w_num;k+)if(x=(k+l)if(wk=O)write.p(k);elsewrite_v(k);break;for(k=0;k<r_num;k+)if(x=(k+1+w_num)if(rk=三O)radd_p(k);elsersub-p(k);break;if(x=(w_num+r_num+1)returnO;5潴试用例,运行结果与运行状况分析5.1潴试用例本程序模拟读者和写者问题,每个读者和写者对读操作或写操作的申请和完成都由用户手动选择。测试用例如F:输入写者个数:3输入读者个数:53、写者1巾请写操作(选择选项(D)4、写者3申请写操作(选择选项(3)5、读者2申请读操作(选择选项(5)6、写者1完成写操作(选择选项(D)7、读者5申请读操作(选择选项(8)8、写者3完成写操作(选择选项(3)9、读者5完成读操作(选择选项(8)10、读者2完成读操作(选择选项(5)11、结束(选择选项(9)5.2运行结果结果一:=读者一写者间观演示=请输入写者个数(1-10).3清输入读者个蚊(1-10),5iwtex=lRcount=ORnutex=I等待认列中无对象(1)写者1申请(2)写者2申请(3)写者3申请(G读者1申请(6)读者3申请读者4申请(8)读者5申请(9)结束清福入选项序号,1»»»»*:»*。*拿*M*r*Mr*r*0*+lr1r*1r»»)»»*«*»*Wnutex=ORcount=ORnutex=I=写者1正在写="等待队列巾无对象(1)写者1完成(2)药者2申Ut(3)号者3申请(4)读者1申请(6)读者3申清(7)读者4申请(8)读者5申请(9)结束清辅入选项序号,344444444*¼*¼¼¼¼-¼4444444*¼¼¼¼44444444*Wnutex=-IRcount=ORnutex=I=写1Tp¾rg,=-=察待队列中有,一后者3(1)写者1完成(2)后者2申请(4)读者1申请(5)读者2申请(7)读:4申请(8)读者5申请(9)结束请淄入选项序号.5(三)读者2申请(5)、次者2申请(6)读者3申请(utex=-2Rcount=IRmutejc=O=写者1正在写=羿待队列中有,一写者3读者2(1)写者1完成(2)写者2申请(4读者1图清()读者3申请(8)源省5申请(9)结束i青输入选项序号,1.(7)读者岬请结果二:W11utex三-1Rcount=IRnwtex=Og=写者3正在写=帧待队列中有,一读者2(6)读者3申请(1)写者1申请(2)写者2申请(3)写者院成(4)读者1申清(7)读者4申请(8)读者5申请(9)结束区输入选项序号,8*A*»*#*»*»*»*:»*拿*Wirutex=-IRcount=IRmutex=-I者3正在写=等待队列中有;->读者2>读者5(6)读者3申请I(I)写者1申请(2)写者2申谓(3)写者院成(4)读者1申请(7)读者4申请(9)结束谚输入选项序号,3if*W11utex=0RCoUnt=2Rmutex=I;=田2Z在读=(5)读者编成F=X=读者5正在读=汽待队列中无对象(1)写者1申谓(2)写者2申请(3)写者3申谪(4)读者1申请I(6)读者3申请(7)读者4申请(8)读者5完成(9)结束帆输入选项序号,811utex=0Rcount=IRroutex=I=i精证在读=等待队列中无对象(5)读者院成(1)写者1申请(2)写者2申请(3)写者3申请(4)读者1申请(6)读者3申请(7)读者4申请(8)读者5申请(9)结束,输入选项序号,5*O*f*>t=tcl*>*C*1结果三:*珞打*料*共*打*择*办*共*林*北未*林东科林Rcount=ORnutcx=I等待队列中无对象(3)可者3申请(4)读者1申请(5)读者2申请(8)读者5申请(9)结束(1)写者1申请(2)写者2申请(6)读者3申请(7)读者4申请请输入选项序号:9Pressanykeytocontinue5.3运行储果分析1、输入写者个数:33、刚起先时Wmutex=1Rcount=ORmUtCX=I,写者1申请写操作,此时,信号fitWmUteX减1,所以WmUteX=O,写者1可以干脆起先写操作4、写者3申请写操作此时,信号量Wmutex减1,所以WmUtCX=-I,写者1正在写,所以写者3进入等待队列5、读者2巾请读操作此时,信号砧Rmutex减1,所以Rmutex=O,Rcount力Il1,所以RCoUnt=1,又因为Rcount=1,所以WmUtCX减1,WmUtCX=-2,写者1正在写,所以读者2进入等待队列6、写者1完成写操作此时,信号量WmUteX加1,所以WmUteX=-I,写者3起先写操作7、读者5申请读操作此时,信yISRmutex减1,所以Rmutex=-1,读者2还在Rcount的临界区中,所以读者5等待8、写者3完成写操作此时,信号量Wmutex加1,所以Wmutex=O,读者2从等待队列中取出,并且Rmutex加1,则RmUteX=O,读者2起先读操作,读者5进入Rcount的临界区,Rcount加l,Rcount=2,Rmutex加1,RmUteX=I,此时读者5可干脆起先读操作,所以此时,读者2和读者5正在进行读操作9、读者5完成读操作此时Rcount减1,RcoUnt=I,还剩读者2在进行读操作10、读者2完成读操作此时Rcount减1,Rcount=O1Wmutex力Il1,所以Wmutex=111、结束6总结与心得本课程设计是学生学习完计算机操作系统课程后,进行的一次全面的综合训练,通过课程设计,我更好地驾驭了操作系统的原理与实现方法,加深对操作系统基础理论和重要算法的理解,加强了动手实力。在设计过程中,出现了很多问题,比如对涉与到的学问没方深化的理解,对其实现方法感到很模糊,有时不知道该用什么方案来解决该问题,但通过自己杳资料,进行深化的了解后,慢慢对其所用到的学问和方法有了清舱的相识、理解,能依据问题描述逐步对问题进行分析、抽象,并将其进行转化,最终通过编程实现该问题所描述的功能。这次自己的收获还是不小,首先使我提高了分析问题,并依据需求转化成相应的程序结构的实力;其次也丰富了自己编写程序,调试程序的阅历,这使得我编程时可能出现的错误的相识,并如何去避开产生了新的相识。总的来说,通过本次设计收获很大。首先更加娴熟的驾驭了通过P、V原语和信号成解决一些问题的思想。其次,编程实力得到提高。在起先编程的时候发觉程序并不像想象中的那样简洁实现,最终最终通过把写者和读者进程分别分割为若干个函数,并通过其中的相互连接实现了模拟。同时运行时对操作界面中的选项动态的给出很重要,例如,若某个写者还没有申请写操作,则给出的该选项为写者i申请;若某个写者在等待队列中,则不给出该写者的选项;若某个写者正在进行写操作,则给出的该选项为写者i完成。读者和写者问题,始终认为这些东西很简洁,但是详细编程实现其模拟并不简洁。虽然这还不算真正的实践,但通过这次设计,向实践除近了一步。更加深刻的理解了操作系统中这些理论学问的意义。路漫漫其修远兮,吾将上下而求索!

    注意事项

    本文(OS课程设计读者写者.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开