版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、蒀实验三实验报告薅实验源码:蒅 #in clude"stdio.h"芁 #in clude<iostream.h>袁 #in clude<stdlib.h>莇#defineDataMaxlOO/ 常量 DataMax芃#defineBlockNumIO/ 常量 BlockNum莁 intDataShowBlockNumDataMax;/ 用于存储要显示的数组羇 boolDataShowEnableBlockNumDataMax;/ 用于存储数组中的数据是否需要显示螅 intDataDataMax;/ 保存数据肂 intBlockBlockNum;/
2、物理块蒁 intcountBlockNum;/ 计数器莈 intN;/ 页面个数蒇 intM;/ 最小物理块数肅 intChangeTimes;/薁 voidDataInput();/蝿 voidDataOutput();/羅 voidFIFO();/FIFO缺页次数输入数据的函数输出数据的函数函数袄 voidOptimal();/Optimal 函数蚀 voidLRU();/LRU 函数膀 intmain(intargc,char*argv)蚃 DataInput();intmenu;while(true)printf("n* 菜单项选择择 *n");printf(&qu
3、ot;*n");printf("*1-Optimal*n");printf("*2-FIFO*n");printf("*3-LRU*n");printf("*4- 返回上一级 *n");printf("*0-EXIT*n");printf( "*n");scanf("%d",&menu);switch(menu)case1:Optimal();break;case2:FIFO();break;case3:LRU();break;case0
4、:螄exit(0);芀break;蒈case4:袈system("cls");薃DataInput();薃break;衿莆if(menu!=1&&menu!=2&&menu!=3&&menu!=0&&menu!=4)薆system("cls");蚃printf"n 请输入 0-4 之间的整数! n"芀continue;肈莅螃return0;蚁蒆 voidDataInput()");肄袃inti,choice;袈printf" 请输入最小物理块数: &q
5、uot;芈scanf("%d",&M);袃/ 输入最小物理块数大于数据个数羃while(M>BlockNum)艿蚅printf" 物理块数超过预定值,请重新输入:scanf("%d",&M);肃虿 printf(" 请输入页面的个数: ");莇 scanf("%d",&N);蚄 / 输入页面的个数大于数据个数肃 while(N>DataMax)肀袅printf(" 页面个数超过预定值,请重新输入: ");蒃scanf("%d",&
6、amp;N);膃膇 printf(" 请选择产生页面访问序列的方式 (1. 随机 2. 输入 ) : ");薇 scanf("%d",&choice);节 switch(choice)节薈 case1:/ 产生随机访问序列随机数大小在 0-9 之间for(i=0;i<N;i+)Datai=(int)(float)rand()/32767)*10);/system("cls");/ 显示随机产生的访问序列printf("n 随机产生的访问序列为: ");for(i=0;i<N;i+)螃薂 prin
7、tf("%d",Datai);螁袇printf("n");袆break;薂 case2:羈/ 输入访问序列蚈printf(" 请输入页面访问序列: n");薄for(i=0;i<N;i+)蚂 scanf("%d",&Datai);莈system("cls");肆/ 显示输入的访问序列莃printf("n 输入的访问序列为: ");螂for(i=0;i<N;i+)蝿螈 printf("%d",Datai);膂袂printf("n
8、");膀break;芆 default:膅 while(choice!=1&&choice!=2)羁芇printf(" 请输入 1 或 2 选择相应方式 :");羈scanf("%d",&choice);羄芅break;羂蚀羇 voidDataOutput()莅莃inti,j;莂/ 对所有数据操作羀for(i=0;i<N;i+)蒅螄printf("%d",Datai);袀蝿printf("n");薅for(j=0;j<M;j+)膅薁/ 对所有数据操作薈for(i=0;i
9、<N;i+)蚅-+-芁if(DataShowEnableji)聿printf("%d",DataShowji);芆else螅printf("");蚂螁printf("n");荿袅printf(" 缺页次数 :%dn",ChangeTimes);肃printf(" 缺页率 :%d%n",ChangeTimes*100/N);腿膈 / 最正确置换算法袄 voidOptimal()羁inti,j,k;袇boolfind;羄intpoint;袅inttemp;/ 临时变量,比拟离的最远的时候用荿i
10、ntm=1,n;羀ChangeTimes=0;肄for(j=0;j<M;j+)羂肁for(i=0;i<N;i+)虿膄DataShowEnableji=false;/ 初始化为 false ,表示没有要显示的数据莃螃蒈for(i=0;i<M;i+)芄袄counti=0;/ 初始化计数器芀芇 / 确定当前页面是否在物理块中,在继续,不在置换莄 /芄 Block0=Data0;羂 for(i=1;m<M;i+)艿蒄intflag=1;莁for(n=0;n<m;n+)蒀肈 if(Datai=Blockn)flag=0;蒄螂if(flag=0)continue;膂Block
11、m=Datai;螇 m+;袈 膃 /薀 / 对所有数据进行操作袀 for(i=0;i<N;i+)羇薄/ 表示块中有没有该数据莂find=false;蕿for(j=0;j<M;j+)肇羅 if(Blockj=Datai)螀find=true;肇肂蒂 if(find)continue;/ 块中有该数据,判断下一个数据膇/ 块中没有该数据,最优算法膇ChangeTimes+;/ 缺页次数 +蒃for(j=0;j<M;j+)/ 找到下一个值的位置find=false;for(k=i;k<N;k+)if(Blockj=Datak)find=true;countj=k;break;
12、if(!find)countj=N;/由于i是从0开始记,而BlockNum指的是个数,从1开始,所以i+1肆if(i+1)>M)薃/ 获得要替换的块指针temp=0;for(j=0;j<M;j+)if(temp<countj)temp=countj;point=j;/ 获得离的最远的指针elsepoint=i;/ 替换膀Blockpoint=Datai;蒆/ 保存要显示的数据膇 for(j=0;j<M;j+)膃设置显示数据芀DataShowji=Blockj;袇DataShowEnablei<M?(j<=i?j:i):ji=true;/蚄袁莀 / 输出信息
13、芇 printf("nOptimal=>n");莆 DataOutput();蚀 莀/ 先进先出置换算法蚈 voidFIFO螄蚃inti,j;蒀boolfind;螅intpoint;蒆inttemp;/ 临时变量蒂intm=1,n;蕿ChangeTimes=0;膆for(j=0;j<M;j+)羄-+-芁for(i=0;i<N;i+)虿薇DataShowEnableji=false;/ 初始化为 false ,表示没有要显示的数据蚆芄蝿for(i=0;i<M;i+)羈膄counti=0;/大于等于BlockNum,表示块中没有数据,或需被替换掉肃/ 所
14、以经这样初始化 321,每次替换 >=3 的块,替换后计数值置 1,衿/ 同时其它的块计数值加1,成了 132,见下面先进先出程序段荿袆/ 确定当前页面是否在物理块中,在继续,不在置换螂 /衿 Block0=Data0;薆 for(i=1;m<M;i+)芃薀intflag=1;罿for(n=0;n<m;n+)羆 肅 if(Datai=Blockn)flag=0;薃聿if(flag=0)continue;莇Blockm=Datai;蒃 m+;莂 腿 /螈 / 对有所数据操作膅 for(i=0;i<N;i+)膁芈 / 增加 count腿 for(j=0;j<M;j+)
15、蚃膄 countj+;莈芆find=false;/ 表示块中有没有该数据莅for(j=0;j<M;j+)羃蒈if(Blockj=Datai)蚇肇 find=true; 螂 蒈肈 / 块中有该数据,判断下一个数据薅 if(find)continue;蒁/ 块中没有该数据薈ChangeTimes+;/ 缺页次数 +葿 / 由于 i 是从 0 开始记,而 M 指的是个数,从 1 开始,所以 i+1芆 if(i+1)>M)薃蚈 / 获得要替换的块指针蚅temp=0;蚄for(j=0;j<M;j+)节if(temp<countj)temp=countj;肁 point=j;/ 获
16、得离的最远的指针膂 蒇袄肄elsepoint=i;膁/ 替换袈Blockpoint=Datai;薆countpoint=0;/ 更新计数值袃/ 保存要显示的数据-+-芁for(j=0;j<M;j+)艿肄DataShowji=Blockj;蚂DataShowEnablei<M?(j<=i?j:i):ji=true;/ 设置显示数据莁莆螆/ 输出信息莁printf("nFIFO=>n");蒁DataOutput();螇膃/ 最近最久未使用置换算法蒄 voidLRU()薁膈inti,j;羅boolfind;膂intpoint;蚁inttemp;/ 临时变量
17、薈intm=1,n;莃 ChangeTimes=0;for(j=0;j<M;j+)for(i=0;i<N;i+)DataShowEnableji=false;/初始化为 false,表示没有要显示的数据for(i=0;i<M;i+)counti=0;/ 初始化计数器/ 确定当前页面是否在物理块中,在继续,不在置换/Block0=Data0;for(i=1;m<M;i+)intflag=1;for(n=0;n<m;n+)if(Datai=Blockn)flag=0;if(flag=0)continue;Blockm=Datai;m+;莇 蒄 /膁 / 对有所数据操作
18、for(i=0;i<N;i+)/ 增加 count for(j=0;j<M;j+)countj+;find=false;/ 表示块中有没有该数据for(j=0;j<M;j+)if(Blockj=Datai)countj=0;find=true;/块中有该数据,判断下一个数据if(find)continue;/ 块中没有该数据ChangeTimes+;/ 由于 i 是从 0 开始记,而 BlockNum 指的是个数,从 1 开始,所以 i+1if(i+1)>M)/ 获得要替换的块指针temp=0;for(j=0;j<M;j+)if(temp<countj)temp=countj;poi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电机制造工保密意识测试考核试卷含答案
- 炭素配料工岗前班组建设考核试卷含答案
- 2026年医疗安全文化构建
- 2026年术后并发症预防与护理课件
- 2026年护士条例学习解读课件(含案例分析)
- 光缆线务员岗前工作规范考核试卷含答案
- 桥式起重机司机岗位安全知识竞赛考核试卷含答案
- 碳排放交易员操作能力知识考核试卷含答案
- 铅笔制造工诚信评优考核试卷含答案
- 酸再生工岗前岗位水平考核试卷含答案
- 2024年国航股份地面服务部招聘笔试参考题库附带答案详解
- 海信入职在线测评题库
- 集装箱七点检查表
- INS输液治疗实践标准指南解读
- 提高隧道光面爆破炮眼痕迹率
- 肖星老师《财务分析与决策》学习笔记
- 普通地质学教材
- JJF 1099-2018表面粗糙度比较样块校准规范
- GB/T 20013.1-2005核医学仪器例行试验第1部分:辐射计数系统
- GB/T 16938-2008紧固件螺栓、螺钉、螺柱和螺母通用技术条件
- 公文写作语言课件
评论
0/150
提交评论