目录
前言
1 实验题目
2 实验目的
3 实验内容
3.1 步骤
3.2 关键代码
3.2.1 生成指令序列
3.2.2 OPT函数
3.2.3 FIFO函数
3.2.4 LRU函数
3.2.5 CLOCK函数
4 实验结果与分析
5 代码
本实验为课设内容,博客内容为部分报告内容,仅为大家提供参考,请勿直接抄袭,另外,本次实验所用平台是dev c++5.11
实验八 虚拟内存系统的页面置换算法模拟
通过对页面、页表、地址转换和页面置换过程的模拟,加深对虚拟页式内存管理系统的页面置换原理和实现过程的理解。
(1)通过随机数产生一个指令序列,共 320 条指令。
① 50%的指令是顺序执行的;
② 25%的指令是均匀分布在前地址部分;
③ 25%的指令是均匀分布在后地址部分;
(2)实现OPT算法函数。
(3)实现LRU算法函数。
(4)实现FIFO算法函数。
(5)实现CLOCK算法函数。
void createOpt(){
srand((unsigned)time(0));
int i=0;
while(i=optNum)break;
int m1=rand()%(m+2); //生成[0,m+1]之间的随机数
opt[i++]=m1; //把随机的m1指令放入数组
if(i>=optNum)break;
if(m1==optNum-1)continue; //如果生成的是319,则m1+1不能放进去
opt[i++]=m1+1; //把m1+1放进去
if(i>=optNum)break;
m=(rand()%(optNum-m1-2))+m1+2; //0,319-m1-2,生成[m1+2,319]之间的随机数
opt[i++]=m;
}
}
void OPT(){
int pageNum=0;
int err=0;
for(int i=0;i
void FIFO(){
int pageNum=0;
int err=0;
for(int i=0;i
void LRU(){
int pageNum=0;
int err=0;
for(int i=0;ipage[j].num){
min=j;
}
}
page[min].index=opt[i]/10;
page[min].num=i;
}
//cout<<"F "<
void CLOCK(){
int pageNum=0;
int err=0;
int p=0; //指针
for(int i=0;i
根据指导书要求,若访问的指令已在内存中就直接输出其物理地址,若不在内存中,则发生缺页先输出F,置换后再输出其物理地址,运行结果如下面两张图片所示,经统计和计算,每个算法的缺页次数和缺页率是正确的。
图1.1 OPT算法和FIFO算法
图1.2 LRU和CLOCK算法
#include
using namespace std;
typedef long long ll;
#define optNum 320 // 指令数
#define proPageNum 4 //程序可用页数
#define pageOptNum 10 //一页的指令数
struct memClock{
int index; //页号
int num; //使用次数
};
int test[]={20,30,20,10,50,20,40,50,30,20,50,20};
memClock test1[]={{20,0},{30,0},{20,0},{10,0},{50,0},{20,0},{40,0},{50,0},{30,0},{20,0},{50,0},{20,0}};
int opt[optNum]; //指令数数组
memClock page[proPageNum]; //程序可用页面
void createOpt(){
srand((unsigned)time(0));
int i=0;
while(i=optNum)break;
int m1=rand()%(m+2); //生成【0,m+1】之间的随机数
opt[i++]=m1; //把随机的m1指令放入数组
if(i>=optNum)break;
if(m1==optNum-1)continue; //如果生成的是319,则m1+1不能放进去
opt[i++]=m1+1; //把m1+1放进去
if(i>=optNum)break;
m=(rand()%(optNum-m1-2))+m1+2; //0,319-m1-2,生成【m1+2,319】之间的随机数
opt[i++]=m;
}
}
void OPT(){
int pageNum=0;
int err=0;
for(int i=0;ipage[j].num){
min=j;
}
}
page[min].index=opt[i]/10;
page[min].num=i;
}
cout<<"F "<