实验五 虚拟内存页面置换算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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