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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

一:实验目的

通过这次实验,加深对虚拟内存页面置换概念的理解,进一步掌握先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的实现方法。二:实验内容

问题描述:

设计程序模拟先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的工作过程。假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P, … ,P,分别利用不同的页1n 面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。

程序要求:

1)利用先进先出FIFO、最佳置换OPI和最近最久未使用LRU三种页面置换算法模拟页面访问过程。

)模拟三种算法的页面置换过程,给出每个页面访问时的内存分配情况。 2

3)输入:最小物理块数m,页面个数n,页面访问序列P, … ,P,算法选1n择1-FIFO,2-OPI,3-LRU。

)输出:每种算法的缺页次数和缺页率。 4

实现提示:

用C++语言实现提示:

1)程序中变量定义参考如下:

int PageOrder[MaxNumber];

int Time[MaxNumber];

int Simulate[MaxNumber][MaxNumber];

int PageCount[MaxNumber];

int PageNum,LackNum,PageMin;

double LackPageRate;

bool found;

2)页面置换的实现过程如下:

, 变量初始化;

, 接收用户输入最小物理块数m,页面个数n,页面序列P, … ,P,选择1n 算法1-FIFO,2-OPI,3-LRU;

, 根据用户选择的算法进行页面的分配和置换,输出页面置换算法的模拟

过程;

, 计算选择算法的缺页次数和缺页率;

, 输出选择算法的缺页次数和缺页率。

三:概要设计

输入函数void input()

初始化函数void Initial()

显示函数void show()

先进先出算法的函数void FIFO() 最佳置换算法的函数void OPI() 最近最久未使用置换算法void LRU() 主函数void main()

{

input();

int s=0;

while(s!=4)

{

cout<<"请选择算法:"<

cout<<"1:先进先出;2:最佳值换算法;3:最近最久未使用置换算法;4:退出"<

cin>>s;

switch(s)

{

case 1:

FIFO();

show();

break;

case 2:

OPI();

show();

break;

case 3:

LRU();

show();

break;

case 4:

return;

default:

cout<<"输入数字不对,请重新输入:";

break;

}

}

}

四:结果测试和截图以及说明输入:页面个数 20

页面数列 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 系统为进程分配的物理块:3

输出结果如截图所示:

先进先出算法:

2.最佳置换算法

3.LRU算法

说明:—1表示的是物理块中没有页面。

相邻的相同的也同时表示出来了并没有空出。五:源代码#include

//using namespace std;

const int MaxNumber=100;

int PageOrder[MaxNumber];

int Time[MaxNumber];

int Simulate[MaxNumber][MaxNumber]; int PageCount[MaxNumber]; int PageNum,LackNum,PageMin; double LackPageRate;

bool found;

//输入

void input()

{

cout<<"请输入页面个数:(PageNum)"<

cin>>PageNum;

while(PageNum>MaxNumber)

{

cout<<"页面个数太大,请重新输入:(PageNum)"<

cin>>PageNum;

}

cout<<"请输入页面序列:"<

for(int i_PageOrder=0;i_PageOrder

{

cin>>PageOrder[i_PageOrder];

}

cout<<"请输入系统分配的最小页面个数:(PageMin)"<

cin>>PageMin;

while(PageMin>MaxNumber)

{

cout<<"页面个数太大,请重新输入:(PageMin)"<

cin>>PageMin;

}

}

//先进先出页面置换算法

void Initial()

{

for(int i_Time=0;i_Time

{

Time[i_Time]=PageNum;

}

for(int i_Simulate=0;i_Simulate

for(int j_Simulate=0;j_Simulate

Simulate[i_Simulate][j_Simulate]=-1;

}

}

LackNum=0;

LackPageRate=0;

found=true;

}

void show()

{

for(int i=0;i

相关文档
最新文档