还剩19页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
软件学院综合性、设计性试验汇报业java年级/班级2023计算机操作系统指导教师级2023—2023学年第一学期课程名称学号-姓名-王宇菲试验地点过街楼B区试验时间2023-12-23项目名称储存管理试验类型综合性/设计性
一、试验目的
二、通过祈求页式存储管理中页面置换算法模拟程序,理解虚拟存储技术的特点,掌握祈求页式存储管理的页面置换算法
三、试验仪器或设备试验机房pc电脑
四、总体设计(设计原理、设计方案及流程等)1,通过随机数产生一种指令序列,共320条指令,指令的|地址按下述原则生产50%的指令是次序执行的;25%日勺指令是均匀分布在前地址部分;25%的指令是均匀分布在后地址部分
2.将指令序列变换成为页地址流设页面大小为1K;顾客内存容量为4页到32页;顾客虚存容量为32K在顾客虚存中,按每K寄存10条指令排列虚存地址,即320条指令在虚存中的寄存count++;}}else〃存在相似的I进程{phb[n]=pro[i];forj=0;jbsize;j++lflag[j]++;n=-1;forj=0;jbsize;j++|printf〃%d〃,phb[j];}printf〃\n〃;printf〃缺页次数为:%d\nz,,count;/*初始化内存单元、缓冲区*/void InitPage*b,int c[bsize][psize]int i,j;fori=0;ipsize;i++b[i].num=一1;b[i].time=psize-i-l;for i=0;ibsize;i++for j=0;jpsize;j++c[i]/*获得在内存中停留最久附页面,默认状态下为最早调入时页面*/int GetMaxPage*bint max=l;int tag=0;fori=0;ibsize;i++if b[i].timemax{max=b[i].time;tag二i;}}return tag;/*判断页面与否已在内存中*/int Equationint fold,Page*b{int i;fori=0;ibsize;i++]if fold==b[i].num returni;return-1;/*LRU关键部分*/void Lruuint fold,Page*bint i;int val;val=Equationfold,b;if val=0]b[val].time=0;for i=0;ibsize;i++if i!=valb[i].time++;}else]queue[++K]=fold;/*记录调入页面*/val=GetMaxb;b[val].num=fold;b[val].time=0;fori=0;ibsize;i++if i!=valb[i].time++;}void LRU{int i,j;K=-l;Init b,c;fori=0;ipsize;i++Lruupro[i],b;c
[0][i]=pro[i];/*记录目前附内存单元中时页面*/forj=0;jbsize;j++c[j][i]=b[j].num;}/*成果输出*/printf内存状态为:\n;Myprintf;for j=0;jpsize;j++printf/z|%2d z,,pro[j];printf|\n;Myprintf;for i=0;ibsize;i++{forj=0;jpsize;j++if c[i][j]==-lprintfCI%2c”,32;elseprintf,z|%2d,c[i][j];printf|\n;Myprintf;printf z,\n调入队列为〃;fori=0;iK+l;i++printf〃%3d”,queue[i];printf\n缺页次数为:%6d\n缺页率:%
16.6fz,,K+l,float K+l/psize;//viz*x**1**1**1**1**1**1**1**A**£**1**1**1**1**1**1**1**1**A**1**1**X**1**1**1**1**1**1**1**1**1**1**X**X**1**1**1**1**1**1**X**1**1**1**1**1**1**1**X*//f_*r%tzi fyAr//*i**T**T**T**T**T**7**T**T**T**T**T**T**T**T**T**T**T**T**1**7**7**T**7**T**T**T**7**7**T**7**1**1**T**7**7**T**T**7**7**7**T**T**T**T**1**T**4**T**T**7**7**T*//—[.ixp\i-•yvoid mainintsei;doprintf z,\t\t\t-----------------------------------------------------------------\t\t\t〃;printf z,\t\t\t☆☆、八欢迎进入操作系统界面八二☆☆\t\t\t〃;printf〃\t\t\t----------------------------------------------------------------\t\t\t\n〃;printf曾■/☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\t\t\t〃;printf z,\t\t\ti^虚拟内存☆\t\t\t〃;printf z,\t\t\t☆--------------------------------------------------------☆\t\t\t〃;printf,z\t\t\ti^
1.产生随机序列☆\t\t\t〃;printf z,\t\t\ti^--------------------------------------------------------☆\t\t\t〃;printf z,\t\t\t☆
2.最久未使用LRU☆\t\t\t〃;printf/z\t\t\t^r--------------------------------------------------------☆\t\t\t〃;printf z,\t\t\ti^
3.先进先出FIFO☆\t\t\t〃;printf〃\t\t\t+--------------------------------------------------------☆\t\t\t〃;printf z,\t\t\ti^
4.最佳置换算法OPT☆\t\t\t〃;printf z,\t\t\t☆--------------------------------------------------------☆\t\t\t〃;printf,z\t\t\ti^
5.三种算法的比较☆\t\t\t〃;printf z,\t\t\t☆---------------------------------------------------------☆\t\t\t〃;printf z,\t\t\ti^
0、退出Exit☆\t\t\t〃;printf让让☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\t\t\t\n〃;printf〃请选择所要执行欧J操作0/1/2/3/4/5:〃;scanf〃%d〃,sel;switchselcaseO:printf〃\t\t\一,再会!二\t\t\t\n〃;systemz,pausez,;break;case1:build;break;case2:printf〃最久未使用算\n〃;LRU;empty;printf〃\n〃;break;case3:printf〃先进先出算\n〃;FIF0;empty;printf〃\n〃;break;case5:printf〃先进先出算法\n〃;FIF0;empty;printf最久未使用算法算〃;LRU;empty;break;default:printf〃请输入对日勺Tj选项号!”;printf\n\n;break;}whilesei!=0;
五、成果分析与总结产生时随机序列随机产生二不进程序列号为:近来至少使用算法执行成果如下:666666888888822244;4444:4666!9!9!9!9!9!9!9!9!9!99!91调列率缺页数11缺页入先进先出FIFO算法执行成果:总结体会祈求页式管理的基本原理是将逻辑地址空间提成大小相似日勺页,将存储地址空间分块,页和块口勺大小相等,通过页表进行管理页式系统的I逻辑地址分为页号和页内位移量页表包括页号和块号数据项,它们一一对应根据逻辑空间的页号,查找页表对应项找到对应的块号,块号乘以块长,加上位移量就行成存储空间的物理地址每个作业的逻辑地址空间是持续时,重定位到内存空间后就不一定持续了对不一样算法的性能进行评价FIFO算法较易实现,对具有线性次序特性日勺程序比较合用,而对具有其他特性的程序则效率不高,此算法还也许出现抖动现象Belady异常LRU算法基于程序的局部性原理,因此合用用大多数程序,此算实现必须维护一种特殊H勺队列一一页面淘汰队列OPT算法虽然产生区J缺页数至少,然而,却需要预测程序欧I页面引用串,这是无法预知的I,不也许对程序时运行过程做出精确的断言,不过此理论算法可用做衡量多种详细算法的原则教师签名年月日方式为第条至第9条指令为第页;第10条至19条指令为第1页;…第310条至319条指令为第31页3,计算并输出下述多种算法在不一样内存容量下的命中率1先进先出算法FIFO2近来至少使用算法LRU3最佳使用算OPT命中率=1一页面失效次数/页地址流长度本试验中,页地址流长度为320,页面失效次数为每次访问对应指令时,该指令所对应的页不在内存的次数有关随机数的产生措施首先要初始化设置随机数,产生序列的开始点,例如,通过下列语句实现srand400;1计算随机数,产生320条指令序列;m=160;;for i=0i80i++=;j=i*4alj+l]=m+l;;a[j4-2]=a[j]*
1.0*rand/32767a[j+3]=a[j+2]+l;m=a[j+3]+319-a[j+3]*
1.0*rand/327672将指令序列变换成为页地址流fork=0;k320;k++;{pt=a[k]/10;pd=a[k]%10•••3计算不一样算法日勺命中率;rate=1-
1.0*U/320其中U为缺页中断次数,320是页地址流长度4输出格式k fifoIru
40.
230.25•••
321.
01.0
四、试验环节包括重要环节、代码分析等
1.代码如下#includeconio.h#includestdio.h#includestdlib.h#includestring.h#define Myprintf〃/*表格控制*/#define bsize4〃物理块大小#define psize16〃进程大小typedef structpageint num;/*记录页面号*/int time;/*记录调入内存时间*/}Page;/*页面逻辑构造,构造为以便算法实现设计*/Page btbsize];/*内存单元数*/int c[bsize][psize];/*暂保留内存目前日勺状态缓冲区*/int queue
[100];/*记录调入队列*/int K;/*调入队列计数变量*/int phb[bsize]={0};〃物理块标号int pro[psize]={0};〃进程序列号int flag[bsize]={0};〃进程等待次数寄存最久未被使用的进程标志int i=0,j=0,k=0;//i表达进程序列号,j表达物理块号int max-1,maxflag0;//标识替代物理块进程下标int count=0;〃记录页面缺页次数//物理块空闲和进程与否相似判断标志//*1**1**1**1**1**1**1**1**1**1**1**1**1**1**4**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**4**1**X**1**1**1**4**1*////*y**T**T**7**T**7**T**T**T**1**T**T**T**T**T**T**T**T**T**T**T**7**T**T**T**T**7**T**T**7**7**7**T**T**T**T**7**T**1**T**T**7**7**T*////sfzslzslz si*si*si**£**£**lz%lzslz sfzslzslz^1*si**X**1^*X**A**£*slzslzslz*A*%lz%lzslz*£*//IQ,[L2\I*、24/I*//、、、«、、、、.卜.卜«、〃[、、、,[、〃卜.卜/、.卜.卜―卜、〃[、〃[、、、xT%xjxxyx zjxXJH jxzj zjxjxxjx xjxxj%xpx zjxJzj xjxxyx*J jxjxxjxgjxxj xyxxjxpxJ*J xy%zj/IM]l-j/llII序列号函数//K!//^TxxTxzTx✓is✓TSXTS xTsxTsxrszrxzrsxrsxrsxsxTsxTxxrxzrxxjxxrs*rsxTxzTxzrsxisxsxTsXgXxTxzTxzts✓tsxjsxsxTsxrszTxzrsxrsxrsxTxxrxzis✓rsxjsxx*TS xTxxTxzrsxisxsxTsxxxTxzrxztszrsxjsxsxTsxTxint*buildprintf(〃随机产生一种进程序列号为\n〃);int i=0;fori=0;ipsize;i++pro[i]=10*rand/RAND MAX+1+1;printf〃%d〃,pro[i]printf〃\n〃;return pro;、、[■//%L*vt*1■vL*K!stzKL**1**1*vt*vtz*X*^1*vt*KIZKIZKI*^1*%L*vtzKIZ vt**Xz K!stzKL*1**1*viz*,tz*.1*KIZKIZ^1*%fxKIZKI**XZ^£Z//*y**y**y**js z|kzj%*f**y**js*7**y*〃查找空闲物理块//*£*si*six%lz xlzsfz、slz*lz si*sl、z*lzlz*lz*£**lzslz*lzslz*1**£*1%l、z*lz*£**£*s£*xl*sfz、slz1**1**lzslz、slz*1**X**1*slz*lz*lz*X*^L*xlz*lz、slz*£**1*//*T**T**T*XI%xjx^T*XTXXTX1%ZI%4*TXXT*ZTXZTX*7%ZIXZTX*TX#7X TX4*T*XTXXTXXT%ZTV*T*ZTVZl%ZJX XT^^7*ZTX*TXXT**TS#T*XIX*TXXJX^T**T*int searchpbforj=0;jbsize;j++ifphb[j]==0return m;break;return-1;、[■、]/、、].、]//*1*xfx%!vt**1*%1*%L*1/%tzviz VL*vizxtzxf*%tzvtzvizKL**1^*1*xl*%!vizvt*%1*%L*vfvtzvizv!x■%!、].xtzKI*xf*%tzvtzvizvt**1Z K1*vfvt*//*y**y**T**T*zj%*y*zjszjx^|X*jsyy%*jx zjszjs*7%〃查找相似进程//slzxl*xL*six*JzsixvlxSA*sixsixslz^Ix^lxslz^Izviz^Iz vizxl*slzslzsixslz^Izsi*slzslzvizvizxl*sixvizXIX//✓ixxlxxl✓Tx xix✓Txz»xrx7^x xixxlx✓Tx✓1%xr^*7xxzxix✓Tx✓Tx✓!%^Txxfxx.^xix^Tx✓Tx✓rs xTx✓TxrxXTX^fx xr^^TxxTxxTxxix✓fx✓Tx✓rxint searchproforj=0;jbsize;j++if phb[j]pro[i]return j;return-1;//^1*xlxxt*xlxsix^L*xlzsixvfx^1*xlxxlxxlz^1*xlxlxxtzxlx^1*six^1*^£*vlx^lzxt*lxlxxlxIxxlxxlzx!*lx*JxsixIxvizxlx1^si*//x|s xjsxjs✓Jxx|xxjsxjx xjx^yxzyx✓Jxxjxxjsxyxxp*xjx^|xxjsxjsxjx^|x✓jxxjx z|x|x xjxxy^zyx✓Jxxjxxjsxjxxy*xy*x|x^|xxjsxjxxjx〃初始化内存//slzslzsi*slzslzlz%Iz*lz%Iz*lz*lzslz*Azslzsix%lzslz*Jzslzslzsiz*Izxlzslzlz%lzslzslzsi*slz%lz slzsi*slzslz%Izslzsi**Xzslz%£zsiz%lz%lzslzslz//*T**T*1%*T*^TX1%#TXXTS IX1%XT**TX1%IXXT^^TS XTSX7^^TX^TXXIXXT*XTS^1X*T^XTSXTS^TS^1XIXTXTS^TX^TXIXIXZTXXTS*7^void emptyfori=0;ibsize;i++phb[i]=0;counts;〃计数器置零//XIXVI Xl//xTszTxxtsxTsztsxTsZgSZ|SzixzTszfszTszjsxjsXiszTxxixzTsxTsxjsxTxztsxtszTszfszjsZjSxTsztxxtsxTsztsxTsxjsZ|SzixxTsztszTszjs✓TsxixztsxTsZTSXTSXjSxTxzTsxtszTszfsztsXjSzTszTsxTszrszrsxjszTszrs〃先进先出页面置换算法//%lzslzKIZ«X*«X**1^s£*1^fzslz1^^lz*£zlz*X*si**X**X*1**£*slzvfz%tz^lzsi*si*^£*S1^/^X/T*Xy^*IX*Xy T*^X*Ty N*X%*T*^T*xT**T**T**7**T**T**T**T**T**T**T**T**T**T**T**T**T**T**T**7**7**7**T**1**y**y**y**y***xjv#jx^jxxj%void FIF0fori=0;ipsize;i++m=searchpb;n=searchpro;〃找flag值最大的forj=0;jbsize;j++ifflagtj]maxflagmaxflag=flagtj];max=j;if n二二-1〃不存在相似进程ifm!=-1〃存在空闲物理块phb[m]=pro[i];〃进程号填入该空闲物理块count++;flag[m]=0;forj=0;j=m;j++flag[j]++;}m=-1;else〃不存在空闲物理块!phb[max]=pro[i];flag[max]=0;forj=0;jbsize;j++flag[j]++;}max=-1;maxflag=0;。
个人认证
优秀文档
获得点赞 0