实验六虚拟内存页面置换算法.docx
- 文档编号:28915808
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:14
- 大小:52.15KB
实验六虚拟内存页面置换算法.docx
《实验六虚拟内存页面置换算法.docx》由会员分享,可在线阅读,更多相关《实验六虚拟内存页面置换算法.docx(14页珍藏版)》请在冰豆网上搜索。
实验六虚拟内存页面置换算法
甘肃政法学院
本科生实验报告
(六)
姓名:
马晓娟
学院:
公安技术学院
专业:
信息安全
班级:
2013级信息安全
实验课程名称:
实验日期:
2015年12月2日
指导教师及职称:
王云峰
实验成绩:
开课时间:
2015-2016学年第一学期
甘肃政法学院实验管理中心印制
实验题目
虚拟内存页面置换算法
小组合作
否
姓名
马晓娟
班级
2013级信息安全
学号
201383030125
一、实验目的
通过这次实验,加深对虚拟内存页面置换概念的理解,进一步掌握先进先出FIFO,最佳置换OPI和最近最久未使用LRU页面置换算法的实现方法。
二.实验环境
C++环境
三、实验内容与步骤
问题描述:
设计程序模拟先进先出FIFO,最佳置换OPI和最近最久未使用LRU页面置换算法的工作过程。
假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1,…,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。
程序要求如下:
1)利用先进先出FIFO,最佳置换OPI和最近最久未使用LRU三种页面置换算法模拟页面访问过程。
2)模拟三种算法的页面置换过程,给出每个页面访问时的内存分配情况。
3)输入:
最小物理块数m,页面个数n,页面访问序列P1,…,Pn,算法选择1-FIFO,2-OPI,3-LRU。
4)输出:
每种算法的缺页次数和缺页率。
【实验要求】
1)上机前认真复习页面置换算法,熟悉FIFO,OPI,LRU三种页面分配和置换算法的过程;
2)上机时独立编程、调试程序;
3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。
【源代码】
#include"iostream.h"
constintDataMax=100;
constintBlockNum=10;
intDataShow[BlockNum][DataMax];//用于存储要显示的数组
boolDataShowEnable[BlockNum][DataMax];//用于存储数组中的数据是否需要显示
//intData[DataMax]={4,3,2,1,4,3,5,4,3,2,1,5,6,2,3,7,1,2,6,1};//测试数据
//intN=20;//输入页面个数
intData[DataMax];//保存数据
intBlock[BlockNum];//物理块
intcount[BlockNum];//计数器
intN;//页面个数
intM;//最小物理块数
intChangeTimes;
voidDataInput();//输入数据的函数
voidDataOutput();
voidFIFO();//FIFO函数
voidOptimal();//Optimal函数
voidLRU();//LRU函数
///*
intmain(intargc,char*argv[])
{
DataInput();//DataInput();
//FIFO();
//Optimal();
//LRU();
//return0;
intmenu;
while(true)
{
cout< cout<<"*菜单选择*"< cout<<"*******************************************************"< cout<<"*1-FIFO*"< cout<<"*2-Optimal*"< cout<<"*3-LRU*"< cout<<"*0-EXIT*"< cin>>menu; switch(menu) { case1: FIFO();break; case2: Optimal();break; case3: LRU();break; default: break; } if(menu! =1&&menu! =2&&menu! =3)break; } } //*/ voidDataInput() { cout<<"请输入最小物理块数: "; cin>>M; while(M>BlockNum)//大于数据个数 { cout<<"物理块数超过预定值,请重新输入: "; cin>>M; } cout<<"请输入页面的个数: "; cin>>N; while(N>DataMax)//大于数据个数 { cout<<"页面个数超过预定值,请重新输入: "; cin>>N; } cout<<"请输入页面访问序列: "< for(inti=0;i cin>>Data[i]; } voidDataOutput() { inti,j; for(i=0;i { cout< } cout< for(j=0;j { cout<<""; for(i=0;i { if(DataShowEnable[j][i]) cout< else cout<<""; } cout< } cout<<"缺页次数: "< cout<<"缺页率: "< } voidFIFO() { inti,j; boolfind; intpoint; inttemp;//临时变量 ChangeTimes=0; for(j=0;j for(i=0;i DataShowEnable[j][i]=false;//初始化为false,表示没有要显示的数据 for(i=0;i { count[i]=0;//大于等于BlockNum,表示块中没有数据,或需被替换掉 //所以经这样初始化(321),每次替换>=3的块,替换后计数值置1, //同时其它的块计数值加1,成了(132),见下面先进先出程序段 } for(i=0;i { //增加count for(j=0;j count[j]++; find=false;//表示块中有没有该数据 for(j=0;j { if(Block[j]==Data[i]) { find=true; } } if(find)continue;//块中有该数据,判断下一个数据 //块中没有该数据 ChangeTimes++;//缺页次数++ if((i+1)>M)//因为i是从0开始记,而M指的是个数,从1开始,所以i+1 { //获得要替换的块指针 temp=0; for(j=0;j { if(temp { temp=count[j]; point=j;//获得离的最远的指针 } } } elsepoint=i; //替换 Block[point]=Data[i]; count[point]=0;//更新计数值 //保存要显示的数据 for(j=0;j { DataShow[j][i]=Block[j]; DataShowEnable[i (j<=i? j: i): j][i]=true;//设置显示数据 } } //输出信息 cout< cout<<"FIFO=>"< DataOutput(); } voidOptimal() { inti,j,k; boolfind; intpoint; inttemp;//临时变量,比较离的最远的时候用 ChangeTimes=0; for(j=0;j for(i=0;i DataShowEnable[j][i]=false;//初始化为false,表示没有要显示的数据 //for(i=0;i //{ //count[i]=0;// //} for(i=0;i { find=false;//表示块中有没有该数据 for(j=0;j { if(Block[j]==Data[i]) find=true; } if(find)continue;//块中有该数据,判断下一个数据 //块中没有该数据,最优算法 ChangeTimes++;//缺页次数++ for(j=0;j { //找到下一个值的位置 find=false; for(k=i;k { if(Block[j]==Data[k]) { find=true; count[j]=k; break; } } if(! find)count[j]=N; } if((i+1)>M)//因为i是从0开始记,而BlockNum指的是个数,从1开始,所以i+1 { //获得要替换的块指针 temp=0; for(j=0;j { if(temp { temp=count[j]; point=j;//获得离的最远的指针 } } } elsepoint=i; //替换 Block[point]=Data[i]; //保存要显示的数据 for(j=0;j { DataShow[j][i]=Block[j]; DataShowEnable[i (j<=i? j: i): j][i]=true;//设置显示数据 } } //输出信息 cout< cout<<"Optimal=>"< DataOutput(); } voidLRU() { inti,j; boolfind; intpoint; inttemp;//临时变量 ChangeTimes=0; for(j=0;j for(i=0;i DataShowEnable[j][i]=false;//初始化为false,表示没有要显示的数据 for(i=0;i { count[i]=0; } for(i=0;i { //增加count for(j=0;j count[j]++; find=false;//表示块中有没有该数据 for(j=0;j { if(Block[j]==Data[i]) { count[j]=0; find=true; } } if(find)continue;//块中有该数据,判断下一个数据 //块中没有该数据 ChangeTimes++;//缺页次数++ if((i+1)>M)//因为i是从0开始记,而BlockNum指的是个数,从1开始,所以i+1 { //获得要替换的块指针 temp=0; for(j=0;j { if(temp { temp=count[j]; point=j;//获得离的最远的指针 } } } elsepoint=i; //替换 Block[point]=Data[i]; count[point]=0; //保存要显示的数据 for(j=0;j { DataShow[j][i]=Block[j]; DataShowEnable[i (j<=i? j: i): j][i]=true;//设置显示数据 } } //输出信息 cout< cout<<"LRU=>"< DataOutput(); } 【效果截图】 以作业为测试数据: 五、实验总结 通过这次实验,我加深了对虚拟内存页面置换概念的理解,进一步掌握先进先出FIFO,最佳置换OPI和最近最久未使用LRU页面置换算法的实现方法。 在实验的过程中,我发现自己的动手能力还不是很强,没有把理论与实验相结合。 但在同学的帮助下解决了问题,最终做出了实验。 在此次试验中我学到了: 1、多学多问,取长补短,学习他人技能。 2、善于思考,将理论与实践结合,真正地消化知识。 3、实事求是做实验,认真仔细地做好实验记录。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验六 虚拟内存页面置换算法 实验 虚拟内存 页面 置换 算法