《操作系统实验三(页面置换算法)实验报告材料(共14页).doc》由会员分享,可在线阅读,更多相关《操作系统实验三(页面置换算法)实验报告材料(共14页).doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上实验三实验报告实验源码:#include stdio.h#include #include #define DataMax 100 / 常量DataMax#define BlockNum 10 / 常量BlockNumint DataShowBlockNumDataMax; / 用于存储要显示的数组bool DataShowEnableBlockNumDataMax; / 用于存储数组中的数据是否需要显示int DataDataMax; / 保存数据int BlockBlockNum; / 物理块int countBlockNum; / 计数器int N; / 页面个
2、数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);printf(*n);printf(* 1-Optimal *n);printf(* 2-FIFO *n);pri
3、ntf(* 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;case 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请输入
4、0 - 4之间的整数!n);continue;return 0;void DataInput()int i,choice;printf(请输入最小物理块数:);scanf(%d,&M);/ 输入最小物理块数大于数据个数while(M BlockNum)printf(物理块数超过预定值,请重新输入:);scanf(%d,&M);printf(请输入页面的个数:);scanf(%d,&N);/ 输入页面的个数大于数据个数while(N DataMax)printf(页面个数超过预定值,请重新输入:);scanf(%d,&N);printf(请选择产生页面访问序列的方式(1.随机 2.输入):);s
5、canf(%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+)printf(%d ,Datai);printf(n);break;case 2:/ 输入访问序列printf(请输入页面访问序列:n);for(i = 0;i N;i+)scanf(%d,&Datai);system(cl
6、s);/ 显示输入的访问序列printf(n输入的访问序列为:);for(i = 0;i N;i+)printf(%d ,Datai);printf(n);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
7、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;for(j = 0;j M;j+)for(i=0;i N;i+)DataShowEnableji = false; / 初
8、始化为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+;/ 对所有数据进行操作for(i=0;i N;i+)/ 表示块中有没有该数据find = false;for(j = 0;j M;j+)if( Blockj = Datai
9、)find = true;if( find ) continue; / 块中有该数据,判断下一个数据/ 块中没有该数据,最优算法ChangeTimes+; / 缺页次数+for(j = 0;j M;j+)/ 找到下一个值的位置find = false;for( k = i;k 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+)Dat
10、aShowji = Blockj;DataShowEnablei M ? (j 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 =3的块,替换后计数值置1,/ 同时其它的块计数值加1 ,成了(1 3 2 ),见下面先进先出程序段/ 确定当前
11、页面是否在物理块中,在继续,不在置换/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 = 0;i N;i+)/ 增加countfor(j = 0;j M;j+)countj+;find = false; / 表示块中有没有该数据for(j = 0;j M )/获得要替换的块指针temp = 0;for(j = 0;j M;j+)if( temp coun
12、tj ) temp = countj;point = j; / 获得离的最远的指针else point = i;/ 替换Blockpoint = Datai; countpoint = 0; / 更新计数值/ 保存要显示的数据for(j = 0;j M;j+)DataShowji = Blockj;DataShowEnablei M ? (j n);DataOutput();/ 最近最久未使用置换算法void LRU()int i,j;bool find;int point; int temp; / 临时变量int m = 1,n;ChangeTimes = 0;for(j = 0;j M;j
13、+)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+;/ 对有所数据操作for(i = 0;i N;i+)/ 增加countfor(
14、j = 0;j M;j+)countj+;find = false; / 表示块中有没有该数据for(j = 0;j M )/获得要替换的块指针temp = 0;for(j = 0;j M;j+)if( temp countj ) temp = countj;point = j; / 获得离的最远的指针else point = i;/ 替换Blockpoint = Datai; countpoint = 0;/ 保存要显示的数据for(j=0;jM;j+)DataShowji = Blockj;DataShowEnablei M ?(j n);DataOutput();实验结果截图:程序运行:输入相应数据:选择相应算法:最佳置换算法:先进先出算法:最近最久未使用算法:专心-专注-专业