目录
1.算法原理
基本思想是淘汰最先进入内存的页面,即选择在内存驻留时间最长的页面予以淘汰。实现简单。按页面调入内存的先后链结为队列,设置一个替换指针,总是指向最先进入内存的页面。缺点在与进程实际运行规律不符,性能不好。
2.实验要求
在某请求分页管理系统中,作业执行时依次访问如下页面:1,4,3,1,2,5,1,4,2,1,4,5,分配给该作业的主存块数为3
3.算法流程图
4.代码分析
1.sort函数的构建
void sort(int a[3],int temp){//顶替内存的第一个页面,并排序
a[0]=a[1];
a[1]=a[2];
a[2]=temp;
}
输入为在内存中的三个页面以及即将要进入内存的页面,但这个页面和我们在main函数直接输入的页面不一样,因为这个页面是一定与内存中页面不相同的
索引值也相当于时间先后顺序,0为最先进入内存的
排序后a[1],a[2]都会前移,新来的temp放在最后
2.IN函数的构建
int IN(int a[3],int temp){//找出即将进来的进程是否在内存的三个页面中
int flag=0;
for(int i=0;i<3;i++){
if(a[i]==temp){
flag=1;
break;
}
}
return flag;
}
IN函数输入为内存的三个页面以及即将进入内存的页面,是为了判断内存页面中是否和它重复
如果重复,则flag置为1,否则不变,还是0,最后返回flag
3.print函数的构建
void print(int a[3],int temp){
if(IN(a,temp)==0){//如果即将进来的进程不在内存的三个页面中
sort(a,temp);
}
cout<<"现在系统内的三个页面为:"<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
}
print函数是总流程,输入为内存的三个页面以及即将进入内存的页面
调用了IN函数后,如果返回的为0,则说明没有重复的,那么temp就要进入内存的三个页面中,即执行sort函数,然后再输出
返回为1,就默认直接输出,因为并不改变内存里的三个页面。
4.主函数的构建
int main(){
int a[3],b[100],n;
for(int i=0;i<3;i++){
cout<<"请输入第"<<i<<"个页面:";
cin>>a[i];
}
cout<<"现在系统内的三个页面为:"<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
cout<<"请按时间先后顺序输入即将进入系统的页面数目:";
cin>>n;
for(int i=0;i<n;i++){
cout<<"请输入要访问的页面:";
cin>>b[i];
print(a,b[i]);
}
}
数组a是内存中的三个页面,b是即将进入内存的页面,n是即将进入内存页面的数量
5.总代码
#include<iostream>
using namespace std;
void sort(int a[3],int temp){//顶替内存的第一个页面,并排序
a[0]=a[1];
a[1]=a[2];
a[2]=temp;
}
int IN(int a[3],int temp){//找出即将进来的进程是否在内存的三个页面中
int flag=0;
for(int i=0;i<3;i++){
if(a[i]==temp){
flag=1;
break;
}
}
return flag;
}
void print(int a[3],int temp){
if(IN(a,temp)==0){//如果即将进来的进程不在内存的三个页面中
sort(a,temp);
}
cout<<"现在系统内的三个页面为:"<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
}
int main(){
int a[3],b[100],n;
for(int i=0;i<3;i++){
cout<<"请输入第"<<i<<"个页面:";
cin>>a[i];
}
cout<<"现在系统内的三个页面为:"<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
cout<<"请按时间先后顺序输入即将进入系统的页面数目:";
cin>>n;
for(int i=0;i<n;i++){
cout<<"请输入要访问的页面:";
cin>>b[i];
print(a,b[i]);
}
}
5.测试结果及其分析
测试数据就用实验要求给出的
测试结果分析
起始 | 输入1 | 2 | 5 | 1 | 4 | 2 | 1 | 4 | 5 | |
a[0] | 1 | 1 | 4 | 3 | 2 | 5 | 1 | 1 | 1 | 4 |
a[1] | 4 | 4 | 3 | 2 | 5 | 1 | 4 | 4 | 4 | 2 |
a[2] | 3 | 3 | 2 | 5 | 1 | 4 | 2 | 2 | 2 | 5 |