实验六虚拟内存页面置换算法文档格式.docx

上传人:b****5 文档编号:15712020 上传时间:2022-11-15 格式:DOCX 页数:14 大小:52.02KB
下载 相关 举报
实验六虚拟内存页面置换算法文档格式.docx_第1页
第1页 / 共14页
实验六虚拟内存页面置换算法文档格式.docx_第2页
第2页 / 共14页
实验六虚拟内存页面置换算法文档格式.docx_第3页
第3页 / 共14页
实验六虚拟内存页面置换算法文档格式.docx_第4页
第4页 / 共14页
实验六虚拟内存页面置换算法文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

实验六虚拟内存页面置换算法文档格式.docx

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

实验六虚拟内存页面置换算法文档格式.docx

实验题目

虚拟内存页面置换算法

小组合作

姓名

班级

学号

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<

<

endl;

"

*菜单选择*"

*******************************************************"

*1-FIFO*"

*2-Optimal*"

*3-LRU*"

*0-EXIT*"

cin>

>

menu;

switch(menu)

case1:

FIFO();

break;

case2:

Optimal();

case3:

LRU();

default:

break;

}

if(menu!

=1&

&

menu!

=2&

=3)break;

}

//*/

voidDataInput()

请输入最小物理块数:

;

M;

while(M>

BlockNum)//大于数据个数

物理块数超过预定值,请重新输入:

请输入页面的个数:

N;

while(N>

DataMax)//大于数据个数

页面个数超过预定值,请重新输入:

请输入页面访问序列:

for(inti=0;

i<

i++)

Data[i];

voidDataOutput()

inti,j;

for(i=0;

i++)//对所有数据操作

Data[i]<

"

for(j=0;

j<

j++)

if(DataShowEnable[j][i])

DataShow[j][i]<

else

缺页次数:

ChangeTimes<

缺页率:

ChangeTimes*100/N<

%"

voidFIFO()

boolfind;

intpoint;

inttemp;

//临时变量

ChangeTimes=0;

DataShowEnable[j][i]=false;

//初始化为false,表示没有要显示的数据

count[i]=0;

//大于等于BlockNum,表示块中没有数据,或需被替换掉

//所以经这样初始化(321),每次替换>

=3的块,替换后计数值置1,

//同时其它的块计数值加1,成了(132),见下面先进先出程序段

i++)//对有所数据操作

//增加count

count[j]++;

find=false;

//表示块中有没有该数据

if(Block[j]==Data[i])

find=true;

if(find)continue;

//块中有该数据,判断下一个数据

//块中没有该数据

ChangeTimes++;

//缺页次数++

if((i+1)>

M)//因为i是从0开始记,而M指的是个数,从1开始,所以i+1

//获得要替换的块指针

temp=0;

if(temp<

count[j])

temp=count[j];

point=j;

//获得离的最远的指针

elsepoint=i;

//替换

Block[point]=Data[i];

count[point]=0;

//更新计数值

//保存要显示的数据

DataShow[j][i]=Block[j];

DataShowEnable[i<

M?

(j<

=i?

j:

i):

j][i]=true;

//设置显示数据

//输出信息

endl;

FIFO=>

DataOutput();

voidOptimal()

inti,j,k;

//临时变量,比较离的最远的时候用

//for(i=0;

//{

//count[i]=0;

//

//}

//块中没有该数据,最优算法

//找到下一个值的位置

for(k=i;

k<

k++)

if(Block[j]==Data[k])

count[j]=k;

if(!

find)count[j]=N;

M)//因为i是从0开始记,而BlockNum指的是个数,从1开始,所以i+1

Optimal=>

voidLRU()

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

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1