版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实验三实验报告实验源码:#include "stdio.h"#include <iostream.h>#include <stdlib.h>#define DataMax 100 / 常量DataMax#define BlockNum 10 / 常量BlockNumint DataShowBlockNumDataMax; / 用于存储要显示的数组bool DataShowEnableBlockNumDataMax; / 用于存储数组中的数据是否需要显示int DataDataMax; / 保存数据int BlockBlock
2、Num; / 物理块int countBlockNum; / 计数器int N; / 页面个数int M; / 最小物理块数int ChangeTimes; / 缺页次数void DataInput(); / 输入数据的函数void DataOutput(); / 输出数据的函数void FIFO(); / FIFO 函数void Optimal(); / Optimal函数void LRU(); / LRU函数int main(int argc, char* argv)DataInput();int menu;while(true)printf("n* 菜单选择 *n")
3、;printf("*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)case 1:Optimal();break;case 2:FIFO();break;cas
4、e 3:LRU();break;case 0:exit(0);break;case 4:system("cls");DataInput();break;if(menu != 1 && menu != 2 && menu != 3 && menu != 0 && menu !=4) system("cls");printf("n请输入0 - 4之间的整数!n");continue;return 0;void DataInput()int i,choice;printf(&q
5、uot;请输入最小物理块数:");scanf("%d",&M);/ 输入最小物理块数大于数据个数while(M > BlockNum)printf("物理块数超过预定值,请重新输入:");scanf("%d",&M);printf("请输入页面的个数:");scanf("%d",&N);/ 输入页面的个数大于数据个数while(N > DataMax)printf("页面个数超过预定值,请重新输入:");scanf("%
6、d",&N);printf("请选择产生页面访问序列的方式(1.随机 2.输入):");scanf("%d",&choice);switch(choice)case 1:/ 产生随机访问序列for(i = 0;i < N;i+) Datai = (int)(float) rand() / 32767) * 10); / 随机数大小在0 - 9之间system("cls");/ 显示随机产生的访问序列printf("n随机产生的访问序列为:");for(i = 0;i < N;i
7、+)printf("%d ",Datai);printf("n");break;case 2:/ 输入访问序列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;void DataOutput()int i,j;/ 对所有数据操作for(i = 0;i < N;i+)printf("%d ",Datai);printf("n");for(j = 0;j < M;j+)/ 对所有数据操作for(i = 0;i < N;i+)if( Data
9、ShowEnableji )printf("%d ",DataShowji);elseprintf(" ");printf("n");printf("缺页次数: %dn",ChangeTimes);printf("缺页率: %d %n",ChangeTimes * 100 / N);/ 最佳置换算法void Optimal()int i,j,k;bool find;int point;int temp; / 临时变量,比较离的最远的时候用int m = 1,n;ChangeTimes = 0;f
10、or(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+)int flag = 1;for(n = 0; n < m;n+)if(Datai = Blockn) flag = 0;if(flag = 0) continue;Blockm = Datai;m+;/
11、对所有数据进行操作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;if
12、( !find ) countj = N;/ 因为i是从0开始记,而BlockNum指的是个数,从1开始,所以i+1if( (i + 1) > M )/获得要替换的块指针temp = 0;for(j = 0;j < M;j+)if( temp < countj )temp = countj;point = j; / 获得离的最远的指针else point = i;/ 替换Blockpoint = Datai; / 保存要显示的数据for(j = 0;j < M;j+)DataShowji = Blockj;DataShowEnablei < M ? (j <
13、= i ? j : i) : ji = true; / 设置显示数据/ 输出信息printf("nOptimal => n");DataOutput();/ 先进先出置换算法void FIFO()int i,j;bool find;int point; int temp; / 临时变量int m = 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+)co
14、unti = 0; / 大于等于BlockNum,表示块中没有数据,或需被替换掉 / 所以经这样初始化(3 2 1),每次替换>=3的块,替换后计数值置1,/ 同时其它的块计数值加1 ,成了(1 3 2 ),见下面先进先出程序段/ 确定当前页面是否在物理块中,在继续,不在置换/Block0 = Data0;for(i = 1;m < M;i+)int flag = 1;for(n = 0; n < m;n+)if(Datai = Blockn) flag = 0;if(flag = 0) continue;Blockm = Datai;m+;/ 对有所数据操作for(i =
15、0;i < N;i+)/ 增加countfor(j = 0;j < M;j+)countj+;find = false; / 表示块中有没有该数据for(j = 0;j < M;j+)if( Blockj = Datai )find = true; / 块中有该数据,判断下一个数据if( find ) continue;/ 块中没有该数据ChangeTimes+; / 缺页次数+ / 因为i是从0开始记,而M指的是个数,从1开始,所以i+1if( (i + 1) > M )/获得要替换的块指针temp = 0;for(j = 0;j < M;j+)if( temp
16、 < countj ) temp = countj;point = j; / 获得离的最远的指针else point = 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();/ 最近最久未使用置换算法voi
17、d LRU()int i,j;bool find;int point; int temp; / 临时变量int m = 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+)int flag = 1;for(n = 0;
18、 n < m;n+)if(Datai = Blockn) flag = 0;if(flag = 0) continue;Blockm = Datai;m+;/ 对有所数据操作for(i = 0;i < N;i+)/ 增加countfor(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;point =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026安徽阜阳市界首农商银行春季校园招聘6人备考题库及1套参考答案详解
- 2026河南省工人文化宫公益性岗位招聘100人备考题库及完整答案详解1套
- 2026四川遂宁市中心医院招聘高层次卫生专业技术人才31人备考题库含答案详解(夺分金卷)
- 2026广西来宾武宣县桐岭中心卫生院招聘编外人员2人备考题库(第二期)及答案详解(新)
- 2026年上半年黑龙江哈尔滨师范大学招聘专任教师12人备考题库附答案详解(能力提升)
- 2026四川凉山州会理市公安局考试招聘工作人员30人备考题库附答案详解(轻巧夺冠)
- 2026山西吕梁市消防救援局社会招聘政府专职消防员的170人备考题库附答案详解(突破训练)
- 2026江苏南京白下人力资源开发服务有限公司招聘劳务派遣人员8人备考题库(七)及答案详解(全优)
- 2026年4月江苏扬州市宝应县教育系统事业单位招聘教师24人备考题库附答案详解(模拟题)
- 2026山东日照银行烟台分行社会招聘备考题库及答案详解(历年真题)
- 2026山东日照银行烟台分行社会招聘建设笔试模拟试题及答案解析
- 2025江西中寰投资集团及其下属公司招聘人员笔试历年参考题库附带答案详解
- TSG 92-2026 承压类特种设备安全附件安全技术规程
- 主动运输与胞吞、胞吐高一上期生物人教版必修1
- 现场施工图纸确认单
- 第9课 共同弘扬中华传统美德 《中华民族大团结》(初中 精讲课件)
- 工业分析试卷及答案共10套
- 贝叶斯公式课件
- 污水处理设备点检表
- 刑法案例分析课件
- 城市景观设计
评论
0/150
提交评论