《操作系统实验(进程调度+存储管理+磁盘调度++银行家算法+文件系统设计259.docx》由会员分享,可在线阅读,更多相关《操作系统实验(进程调度+存储管理+磁盘调度++银行家算法+文件系统设计259.docx(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、操作系统统实验实验一 进程调调度一、 实验目的的多道程序序设计中中,经常常是若干干个进程程同时处处于就绪绪状态,必必须依照照某种策策略来决决定那个个进程优优先占有有处理机机。因而而引起进进程调度度。本实实验模拟拟在单处处理机情情况下的的处理机机调度问问题,加加深对进进程调度度的理解解。二、 实验要求求1 设计进程程调度算算法,进进程数不不定2 包含几种种调度算算法,并并加以实实现3 输出进程程的调度度过程进程程的状态态、链表表等。三、 参考例1 题目优先权权法、轮轮转法简化假设设1) 进程为计计算型的的(无II/O)2) 进程状态态:reeadyy、ruunniing、finnishh3) 进
2、程需要要的CPPU时间间以时间间片为单单位确定定2 算法描述述1) 优先权法法动态态优先权权当前运行行进程用用完时间间片后,其其优先权权减去一一个常数数。2) 轮转法开始键盘输入进程数n,和调度方法的选择优先权法?轮转法产生n个进程,对每个进程产生一个PCB,并用随机数产生进程的优先权及进程所需的CPU时间按优先权大小,把n个进程拉成一个就绪队列初始化其他数据结构区链首进程投入运行时间片到,进程所需的CPU时间减1,优先权减3,输出个进程的运行情况所需的CPU时间=0?撤销进程就绪队列为空?结束将进程插入就绪队列NYNYYBN四、 实验流程程图产生n个进程,对每个进程用随机数产生进程的轮转时间
3、片数及进程所需的时间片数,已占用CPU的时间片数置为0按进程产生的先后次序拉成就绪队列链链首进程投入运行时间片到,进程所需时间片数减1,已占用CPU时间片数加1输出各进程的运行情况进程所需时间片数=0?撤销该进程就绪队列为空吗?占用CPU的时间片数=轮转时间片数?占用CPU的时间片数置为0把该进程插入就绪队列尾BNYNYY结束N注意:1 产生的各各种随机机数的取取值范围围加以限限制,如如所需的的CPUU时间限限制在11200之间。2 进程数nn不要太太大通常常取48个3 使用动态态数据结结构4 独立编程程5 至少三种种调度算算法6 若有可能能请在图图形方式式下,将将PCBB的调度度用图形形成动
4、画画显示。五实验验过程:(1)输输入:进进程流文文件(11.txxt),其其中存储储的是一一系列要要执行的的进程, 每个作作业包括括四个数数据项:进程名 进程状状态(11就绪 2等待待 3运运行) 所需时时间 优优先数(0级最最高)进程0 1 550 22进程1 2 110 44进程2 1 115 00进程3 3 228 55 进程4 2 119 11进程5 3 88 77输出: 进程执执行流等等待时间间,平均等等待时间间本程序包包括:FFIFOO算法,优优先数调调度算法法,时间间片轮转转调度算算法(2)程程序代码码#inccludde #inccludde #inccluddeconsst
5、iint bloock_timme=110; /定定义时间间片的长长度为110秒 consst iint MAXXPCBB=1000; /定定义最大大进程数数/定义义进程结结构体 typeedeff sttrucct nnodeechaar nnamee200; intt sttatuus;intt tiime; intt prriviilegge;intt fiinisshedd; intt waait_timme; pccb;pcbb pccbsMAXXPCBB; intt quuanttityy;/初始始化函数数 voidd innitiial() intt i;forr(i=0;iiM
6、AAXPCCB;ii+) sttrcppy(ppcbssi.naame,); pccbsi.staatuss=0; pccbsi.timme=00;pccbsi.priivillegee=0;pccbsi.finnishhed=0; pccbsi.waiit_ttimee=0; quaantiity=0;/读数数据函数数 int reaadDaata() FILLE *fp; chaar ffnamme220; intt i;couutffnamme; if(fpp=foopenn(fnnamee,rr)=NNULLL) coout错错误,文文件打不不开,请请检查文文件名eendll; els
7、se whhilee(!ffeoff(fpp) ffscaanf(fp,%ss %dd %dd %dd,ppcbssquuanttityy.nnamee,&ppcbssquuanttityy.sstattus,&pccbsquaantiity.tiime,&pccbsquaantiity.prriviilegge); qquanntitty+; /输输出所读读入的数数据 coout输输出所读读入的数数据enndl; coout进进程名 进程状状态 所所需时间间 优先先数enndl; foor(ii=0;iqquanntitty;ii+) ccoutt pccbsi.namme ppcbssi.
8、sttatuus ppcbssi.tiime pcbbsii.pprivvileegeenndl; reeturrn(11); retturnn(0);/重置置数据,以供另另一个算算法使用用 voidd innit() intt i;forr(i=0;iiMAAXPCCB;ii+)pccbsi.finnishhed=0; pcbbsii.wwaitt_tiime=0; /先进进先出算算法 voidd FIIFO() intt i,j; intt tootall;/输输出FIIFO算算法执行行流 couutenddl*enddl; couutFIIFO算算法执行行流:eendll; ccoutt
9、进程名名 等待待时间eendll; forr(i=0;iiquuanttityy;i+) coout pcbbsii.nnamee pccbsi.waiit_ttimeeeendll; foor(jj=i+1;jjquuanttityy;j+) pcbbsjj.wwaitt_tiime+=pccbsi.timme; tottal=0; forr(i=0;iiquuanttityy;i+) ttotaal+=pcbbsii.wwaitt_tiime; couut总等等待时间间:tootall 平均均等待时时间:ttotaal/qquanntittyenddl;/优先先数调度度算法 voidd p
10、rriviilegge() intt i,j,pp; intt paasseed_ttimee=0; intt tootall;intt quueueeMAAXPCCB; intt cuurreent_priivillegee=10000;forr(i=0;iiquuanttityy;i+) cuurreent_priivillegee=10000; foor(jj=0;jqquanntitty;jj+) iif(pcbbsjj.ffiniisheed=0)&(ppcbssj.prriviileggeccurrrentt_prriviilegge) p=j; ccurrrentt_prrivi
11、ilegge=ppcbssj.prriviilegge; quueueei=p;pccbsp.finnishhed=1; pccbsp.waiit_ttimee+=ppasssed_timme; paasseed_ttimee+=ppcbssp.tiime; /输出出优先数数调度执执行流 couutenddl*enddl; couut优先先数调度度执行流流:enndl; couut进程程名 等等待时间间enddl; forr(i=0;iiquuanttityy;i+) coout pcbbsqqueuueii.namme ppcbssquueueei.wwaitt_tiimeenndl; to
12、ttal=0; forr(i=0;iiquuanttityy;i+) ttotaal+=pcbbsii.wwaitt_tiime; couut总等等待时间间:tootall 平均均等待时时间:ttotaal/qquanntittyenddl;/时间间片轮转转调度算算法 voidd tiimerr() intt i,j,nnumbber,flaag=11; intt paasseed_ttimee=0; intt maax_ttimee=0; intt rooundd=0; intt quueuee10000; intt tootall=0;whiile(flaag=1) fllag=0; nu
13、umbeer=00;foor(ii=0;i11)ffor(i=00;iquaantiity;i+) if(pcbbsii.ffiniisheed=0) fflagg=1; queeuetottal=i; tottal+; if(pcbbsii.ttimee=bblocck_ttimee*(rrounnd+11) pcbbsii.ffiniisheed=11; rooundd+; if(queeuetottal-1=quueueetootall-2) ttotaal-; couutenddl*eendll; couut时间间片轮转转调度执执行流:enddl; forr(i=0;iitootall
14、;i+) cooutpccbsqueeuei.naame ;cooutenndl;/显示示voidd veersiion() couut /* 进程调调度 */; couutenddlenddl; /主函函数 voidd maain() intt fllag;verrsioon();iniitiaal();flaag=rreaddDatta();if(flaag=1) FFIFOO(); innit();prriviilegge(); innit();tiimerr(); (3)运运行结果果:输入进程程流文件件名1.txtt即可得得出以下下输出结结果:实验二 银行家家算法一、 实验目的的死锁会
15、引引起计算算机工作作僵死,因因此操作作系统中中必须防防止。本本实验的的目的在在于让学学生独立立的使用用高级语语言编写写和调试试一个系系统动态态分配资资源的简简单模拟拟程序,了了解死锁锁产生的的条件和和原因,并并采用银银行家算算法有效效地防止止死锁的的发生,以以加深对对课堂上上所讲授授的知识识的理解解。二、 实验要求求设计有nn个进程程共享mm个系统统资源的的系统,进进程可动动态的申申请和释释放资源源,系统统按各进进程的申申请动态态的分配配资源。系统能显显示各个个进程申申请和释释放资源源,以及及系统动动态分配配资源的的过程,便便于用户户观察和和分析;三、 数据结构构1 可利用资资源向量量Avaa
16、ilaablee ,它它是一个个含有mm个元素素的数组组,其中中的每一一个元素素代表一一类可利利用的资资源的数数目,其其初始值值是系统统中所配配置的该该类全部部可用资资源数目目。其数数值随该该类资源源的分配配和回收收而动态态地改变变。如果果Avaailaablee(j)=k,标标是系统统中现有有Rj类类资源kk个。2 最大需求求矩阵MMax,这这是一个个nm的矩矩阵,它它定义了了系统中中n个进进程中的的每一个个进程对对m类资资源的最最大需求求。如果果Maxx(i,j)=k,表表示进程程i需要RRj类资资源的最最大数目目为k。3 分配矩阵阵Alllocaatioon,这这是一个个nm的矩矩阵,它
17、它定义了了系统中中的每类类资源当当前一分分配到每每一个进进程的资资源数。如果AAlloocattionn(i,j)=k,表表示进程程i当前已已经分到到Rj类类资源的的数目为为k。AAlloocattionn i表示进进程i的分配配向量,有有矩阵AAlloocattionn的第ii行构成成。4 需求矩阵阵Neeed,这这是一个个nm的矩矩阵,用用以表示示每个进进程还需需要的各各类资源源的数目目。如果果Neeed(ii,j)=k,表表示进程程i还需要要Rj类类资源kk个,才才能完成成其任务务。Neeed i表示进进程i的需求求向量,由由矩阵NNeedd的第ii行构成成。上述三个个矩阵间间存在关关系
18、:NNeedd(i,j)=Maxx(i,j)-Alllocaatioon(ii,j);四、 银行家算算法Requuestt i 是进进程Pii 的请请求向量量。Reequeest i (jj)=kk表示进进程Pii请求分分配Rjj类资源源k个。当Pii发出资资源请求求后,系系统按下下述步骤骤进行检检查:1 如果Reequeest iNeeed,则则转向步步骤2;否则,认认为出错错,因为为它所请请求的资资源数已已超过它它当前的的最大需需求量。2 如果Reequeest iAvaailaablee,则转转向步骤骤3;否否则,表表示系统统中尚无无足够的的资源满满足Pii的申请请,Pii必须等等待。3
19、 系统试探探性地把把资源分分配给进进程Pii,并修修改下面面数据结结构中的的数值:Avaiilabble = AAvaiilabble - RRequuestt iAlloocattionni= Allloccatiionii+ Reequeest iNeedd i= NNeedd i - Reqquesst ii4 系统执行行安全性性算法,检检查此次次资源分分配后,系系统是否否处于安安全状态态。如果果安全才才正式将将资源分分配给进进程Pii,以完完成本次次分配;否则,将将试探分分配作废废,恢复复原来的的资源分分配状态态,让进进程Pii等待。假定系统统有5个个进程(pp0,pp1,pp2,pp
20、3,pp4)和和三类资资源(AA,B,CC),各各种资源源的数量量分别为为10,55,7,在在T0时时刻的资资源分配配情况如如下图:Max Alllocaatioon Neeed AvaailaableeA B C A B C A B C A BB CP0 7 5 3 0 1 0 77 44 33 33 33 22 ( 2 3 0 )P1 3 2 2 2 0 0 11 22 22 (3 0 2 ) (0 2 0 )P2 9 0 2 3 0 2 66 00 00P3 2 2 2 2 1 1 00 11 11P4 4 3 3 0 0 2 44 33 11五、 安全性算算法1 设置两个个向量。Wor
21、kk:它表表示系统统可提供供给进程程继续运运行的各各类资源源数目,它它包含mm个元素素,开始始执行安安全性算算法时,WWorkk = Avaailaablee。Finiish:它表示示系统是是否有足足够的资资源分配配给进程程,使之之运行完完成,开开始Fiinissh(II)=ffalsse;当当有足够够资源分分配给进进程Pii时,令令Finnishh(i)=ttruee;2 从进程集集合中找找到一个个能满足足下述条条件的进进程。Finiish(ii)= = ffalsse;Needd iworrk;如找到则则执行步步骤3;否则,执执行步骤骤4;3 当进程PPi获得得资源后后,可顺顺利执行行直到
22、完完成,并并释放出出分配给给它的资资源,故故应执行行Workk = worrk + AllloccatiioniiFiniish(ii)=ttruee;转向向步骤22;4 若所有进进程的FFiniish(i)都为true,则表示系统处于安全状态;否则,系统处于不安全状态。六、 系统流程程图开 始输入资源数m, 及各类资源总数,初始化Available向量输入进程数n,i=1输入进程i的最大需求向量max。inmax资源总数提示错误重新输入i加1任选一个进程作为当前进程输入该进程的资源请求量Request 调用银行家算法,及安全性算法,完成分配,或并给出提示该进程的Need向量为0该进程已运行结
23、束Need矩阵为0所有进程运行都结束结 束NYYNNY初始化need 矩阵NY七银行行家算法法程序代代码#inccludde#inccludde#inccluddeusinng nnameespaace stdd;typeedeff sttrucct MMax11 / 资源的的最大需需求量intt m_a;intt m_b;intt m_c;Maxx; typeedeff sttrucct AAlloocattionn1 /已分配配的资源源数intt a_a;intt a_b;intt a_c;Alllocaatioon; typeedeff sttrucct NNeedd1 /还需要要的资源
24、源数intt n_a;intt n_b;intt n_c;Neeed; struuct Avaailaablee1 /可利利用的资资源量intt avv_a;intt avv_b;intt avv_c; q;struuct pr /定义一一个结构构chaar nnamee;Maxx maax;Alllocaatioon aalloocattionn;Neeed nneedd;intt fiinisshfllag;p55;charr naa5;/*voidd innit() /读入入文件1.ttxtcouut各进进程还需需要的资资源数NNEEDD:enndl;FILLE *fp;fp=foppe
25、n(1.txtt,r+); / 打开文文件11.txxtforr(innt ii=0;i55;i+)fsscannf(ffp,%c,%d,%d,%d,%d,%d,%dn,&pi.namme,&pii.mmax.m_aa,&ppi.maax.mm_b,&pii.mmax.m_cc,&ppi.allloccatiion.a_aa,&ppi.allloccatiion.a_bb,&ppi.allloccatiion.a_cc);pi.neeed.nn_a=pii.mmax.m_aa-pi.alllocaatioon.aa_a;pi.neeed.nn_b=pii.mmax.m_bb-pi.allloc
26、aatioon.aa_b;pi.neeed.nn_c=pii.mmax.m_cc-pi.alllocaatioon.aa_c;cooutpi.namme: pii.nneedd.n_a ppi.neeed.n_bb pi.neeed.nn_cenndl;fcllosee(fpp); /关闭文文件/*int fennpeii()/分配配资源couutAvvaillablle:;couutq.aav_aa q.av_b qq.avv_cenndl;intt fiinisshcnnt=00,k=0,ccounnt=00;forr(innt jj=0;j55;j+)pj.finnishhflaag=0
27、0;whiile(finnishhcntt5)foor(iint i=00;i=pii.nneedd.n_a&q.aav_bb=ppi.neeed.n_bb&qq.avv_c=pi.neeed.nn_c)q.aav_aa+=ppi.allloccatiion.a_aa;q.aav_bb+=ppi.allloccatiion.a_bb;q.aav_cc+=ppi.allloccatiion.a_cc;pii.ffiniishfflagg=1;finnishhcntt+;nak+=ppi.naame;breeak;coountt+;/禁禁止循环环过多iff(coountt5)retturnn 0;
28、retturnn 1;/*int shqq() /申请资资源intt m=0,ii=0,j=00,k=0; /m为进进程号; i,j,kk为申请请的三类类资源数数 couut请输输入进程程号和请请求资源源的数目目!enndl;couut如:进程号号 资源源A BB Ceendll;couut 0 2 0 22mmiijjkk;if(i=pmm.nneedd.n_a&j=pmm.nneedd.n_b &k=pm.neeed.nn_c)iff(i=q.av_a&j=q.aav_bb&kk=qq.avv_c)ppm.allloccatiion.a_aa+=ii;ppm.allloccatiion.a
29、_bb+=jj;ppm.allloccatiion.a_cc+=kk;ppm.neeed.n_aa=pm.maxx.m_a-ppm.allloccatiion.a_aa;ppm.neeed.n_bb=pm.maxx.m_b-ppm.allloccatiion.a_bb;ppm.neeed.n_cc=pm.maxx.m_c-ppm.allloccatiion.a_cc;ccoutt各进程程还需要要的资源源数NEEED:nn;ffor(intt w=0;ww5;w+) ccouttppw.naame: pw.neeed.nn_a pww.nneedd.n_b pww.nneedd.n_cenddl
30、;rretuurn 1;ellseccouttAAvaiilabble让让进程mm等待.eendll;elsse cooutNeeed,让进程程m等待待.enddl;retturnn 0;/*voidd maain()intt fllag;chaar cc;couut /* 银银 行行 家家 算算 法法*/ eendll;couut确认认已经在在11.txxt文档中中正确输输入各进进程的有有关信息息后按回回车键eendll;gettch();iniit();q.aav_aa=100; /各种种资源的的数量q.aav_bb=5;q.aav_cc=7;whiile(flaag)foor(iint
31、i=00;i5;ii+)qq.avv_a-= ppi.allloccatiion.a_aa;qq.avv_b-= ppi.allloccatiion.a_bb;qq.avv_c-= ppi.allloccatiion.a_cc;iff(feenpeei()ccoutt这样配配置资源源是安全全的!eendll;ccoutt其安全全序列是是: ;ffor(intt k=0;kk5;k+)ccouttnak;ccoutteendll;ccoutt有进程程发出RRequuestt请求向向量吗?(Ennterr y or Y)eendll;ccoutteendll;cc=geetchh();iif(cc
32、=y|c=YY)if(shqq()conntinnue;elsse bbreaak;eelsee fllag=0;ellse fflagg=0;coout不不安全!eendll;八运行行结果实验三 存存储管理理一 实验目的的存储管理理的主要要功能之之一是合合理地分分配空间间。请求求页式管管理是一一种常用用的虚拟拟存储管管理技术术。本实验的的目的是是通过请请求页式式管理中中页面置置换算法法模拟设设计,了了解虚拟拟存储技技术的特特点,掌掌握请求求页式存存储管理理的页面面置换算算法。二 实验内容容(1) 通过计算算不同算算法的命命中率比比较算法法的优劣劣。同时时也考虑虑了用户户内存容容量对命命中率的
33、的影响。页面失失效次数数为每次次访问相相应指令令时,该该指令所所对应的的页不在在内存中中的次数数。在本实实验中,假假定页面面大小为为1k,用用户虚存存容量为为32kk,用户户内存容容量为44页到332页。(2) prodducee_adddsttreaam通过过随机数数产生一一个指令令序列,共共3200条指令令。A、 指令的地地址按下下述原则则生成:1) 50%的的指令是是顺序执执行的2) 25%的的指令是是均匀分分布在前前地址部部分3) 25%的的指令是是均匀分分布在后后地址部部分B、 具体的实实施方法法是:1) 在0,3319的指令令地址之之间随机机选取一一起点mm;2) 顺序执行行一条指指令,即即执行地地址为mm+1的的指令;3) 在前地址址0,mm+1中随机机选取一一条指令令并执行行,该指指令的地地址为mm;4) 顺序执行行一条指指令,地地址为mm+1的的指令5) 在后地址址m+2,3319中随机机选取一一条指令令并执行行;6) 重复上述述步骤11)55