当前位置:文档之家› C++模拟LRU页面置换算法

C++模拟LRU页面置换算法

实验五C++模拟LRU页面置换算法
一、实验目的:用c++模拟LRU页面置换算法
二、实验内容:随机一访问串和驻留集的大小,通过模拟程序显示淘汰的页号并统计命中率。示例:
输入访问串:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1
驻留集大小:3
算法的实现:由于LRU算法淘汰的是上次使用距离t时刻最远的页,故需记录这个距离。
cin>>n;
cout<<"请输入驻留级大小:"<<endl;
cin>>m;
cout<<"请输入访问串的内容:"<<endl;
init(str,n,zhuliuji,m);
LRU(str,n,zhuliuji,m);
return 0;
}
五.运行结果
{
cin>>str[i];
}
}
void addtime(struct node zhuliuji[],int m)
{
for(int i=0;i<m;i++)
{
zhuliuji[i].time++;
}
}
char addzhuliuji(struct node zhuliuji[],int m,char c)
zhuliuji[jtemp].time = 0;
jtemp ++;
}else
{
addtime(zhuliuji,m);
char ch = addzhuliuji(zhuliuji,m,str[i]);
// if(ch!='\0')
//cout<<"淘汰的页数为:"<<ch<<endl;
}
cout<<"驻留级为:";
temp = i;
}
if(zhuliuji[i].data==c)
{
zhuliuji[i].time =0;
// cout<<"zhuliuji存在"<<c<<endl;
return ch;
}
}
ch = zhuliuji[temp].data;
zhuliuji[temp].data = c;
zhuliuji[temp].time = 0;
return ch;
}
void LRU(char ቤተ መጻሕፍቲ ባይዱtr[],int n,struct node zhuliuji[],int m)
{
int jtemp=0;
for(int i =0;i<n;i++)
{
if(i<m)
{
zhuliuji[jtemp].data = str[i];
addtime(zhuliuji,m);
0/11/12/10/31/32/30/21/22/23/20/2
缺 缺缺缺命 缺命缺缺缺缺命命
红色表示:每个页帧对应的计数器值
通过模拟程序输出淘汰的页号分别为:7 1 2 3 0 4
命中率为:4/13
四、代码:
#include <iostream>
using namespace std;
struct node
计数器:可使用计数器,给每一个页帧增设一个计数器。每访问一页,就把对应页帧的计数器清零,其余页帧的计数器加1.因此,计数器值为最大的页即上次访问距当前最远的页。
7 0 12030 4 2 3 0 320/71/72/70/21/22/23/20/41/42/40/01/02/0
0/01/02/00/01/00/01/02/00/31/30/31/3
for(int j=0;j<m;j++)
{
cout<<zhuliuji[j].data<<'\t';
}
cout<<endl;
}
cin>>jtemp;//显示结果,以便观察
}
int main()
{
struct node zhuliuji[20];
char str[20];
int n,m;
cout<<"请输入访问串的大小:"<<endl;
{
char ch = '\0';
int max = zhuliuji[0].time;
int temp = 0; //标记时间最长的驻留级
for(int i=0;i<m;i++)
{
if(max<zhuliuji[i].time&&zhuliuji[i].data!=c)
{
max = zhuliuji[i].time;
{
char data;
int time;
};
void init(char str[],int n,struct node zhuliuji[],int m)
{
for(int i = 0;i<m;i++)
{
zhuliuji[i].data = '\0';
zhuliuji[i].time = 0;
}
for(int i =0;i<n;i++)
相关主题