实验六虚拟内存页面置换算法.docx

上传人:b****7 文档编号:16576961 上传时间:2023-07-14 格式:DOCX 页数:14 大小:52.15KB
下载 相关 举报
实验六虚拟内存页面置换算法.docx_第1页
第1页 / 共14页
实验六虚拟内存页面置换算法.docx_第2页
第2页 / 共14页
实验六虚拟内存页面置换算法.docx_第3页
第3页 / 共14页
实验六虚拟内存页面置换算法.docx_第4页
第4页 / 共14页
实验六虚拟内存页面置换算法.docx_第5页
第5页 / 共14页
实验六虚拟内存页面置换算法.docx_第6页
第6页 / 共14页
实验六虚拟内存页面置换算法.docx_第7页
第7页 / 共14页
实验六虚拟内存页面置换算法.docx_第8页
第8页 / 共14页
实验六虚拟内存页面置换算法.docx_第9页
第9页 / 共14页
实验六虚拟内存页面置换算法.docx_第10页
第10页 / 共14页
实验六虚拟内存页面置换算法.docx_第11页
第11页 / 共14页
实验六虚拟内存页面置换算法.docx_第12页
第12页 / 共14页
实验六虚拟内存页面置换算法.docx_第13页
第13页 / 共14页
实验六虚拟内存页面置换算法.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验六虚拟内存页面置换算法.docx

《实验六虚拟内存页面置换算法.docx》由会员分享,可在线阅读,更多相关《实验六虚拟内存页面置换算法.docx(14页珍藏版)》请在冰点文库上搜索。

实验六虚拟内存页面置换算法.docx

实验六虚拟内存页面置换算法

甘肃政法学院

本科生实验报告

(六)

姓名:

马晓娟

学院:

公安技术学院

专业:

信息安全

班级:

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、实事求是做实验,认真仔细地做好实验记录。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2