#include iostream#include String#includealgorithm#include iomanip#include Windowsh#includevector#includebitsstdc++husing namespace std;const int MaxNumber=100;int PageOrderMaxNumber; 页面序列int PageNumL
#include
const int MaxNumber=100; //定义最大页面数量
int PageOrder[MaxNumber]; //页面序列
int PageNum,LackNum,MinBlockNum; //页面个数,缺页次数,分配的物理块数
int PageDisCount[MaxNumber]; //当前内存距离下一次出现的距离
double LackPageRate; //缺页率
vector
//函数声明 void input(); void initial(); void FIFO(); //先进先出 void OPI(); //最佳置换 void LRU(); //最近最久未使用LRU页面置换算法 void display();
void input(){ //输入函数 cout<<"请输入分配的物理块数:"<<endl; cin>>MinBlockNum; //输入物理块数 cout<<"请输入页面数:"<<endl; cin>>PageNum; //输入页面数 cout<<"请输入页面走向,页面之间以空格做间隔:"<<endl; for (int i=0;i<PageNum;i++){ cin>>PageOrder[i]; //输入页面序列 }
cout<<"读取数据结果如下:"<<endl;
cout<<"物理块数 = "<<MinBlockNum<<endl;
cout<<"页面个数 = "<<PageNum<<endl;
cout<<"页面序列如下:"<<endl;
for ( i = 0;i<PageNum;i++){
cout<<PageOrder[i]<<" "; //输出页面序列
}
cout<<endl;
}
void FIFO(){ //FIFO算法 v.clear(); //清空动态数组 cout<<"********* 你选择了FIFO算法:********* "<<endl; cout<<"页面置换情况如下:"<<endl; LackNum = 0; //缺页数初始化为0 for (int i=0;i<MinBlockNum;i++){ v.push_back(-1); //将动态数组初始化为-1 } for ( i = 0;i<PageNum;i++){ bool flag=false; //定义标志位 for(int j=0;j<MinBlockNum;j++){ if(v[j] == PageOrder[i]) flag = true; //如果存在该页面则标志位置为true } if(!flag){ v.erase(v.begin()); //删除动态数组的第一个元素 v.push_back(PageOrder[i]); //将该页面加入动态数组 LackNum++; //缺页数加一 } } LackPageRate = (LackNum * 1.0)/PageNum; //计算缺页率 cout<<"缺页数LackNum = "<<LackNum<<endl; cout<<"缺页率LackPageRate = "<<LackPageRate<<endl; }
void LRU(){
//LRU算法
v.clear(); //清空动态数组
cout<<"********* 你选择了LRU算法:********* "<<endl;
cout<<"页面置换情况如下:"<<endl;
LackNum = 0; //缺页数初始化为0
for (int i=0;i<MinBlockNum;i++){
v.push_back(-1); //将动态数组初始化为-1
}
vector
LackPageRate = (LackNum*1.0)/PageNum; //计算缺页率
cout<<"缺页数LackNum = "<<LackNum<<endl;
cout<<"缺页率LackPageRate = "<<LackPageRate<<endl;
}
int main(){ input(); //调用输入函数 int isContinue = 1; //定义循环条件 int chooseAlgorithm; //定义选择算法的变量 while(isContinue){ cout<<"*********************************************"<<endl; cout<<" 1代表FIFO算法 *"<<endl; cout<<" 2代表LRU算法 *"<<endl; cout<<" 请选择算法 **********"<<endl;
cin>>chooseAlgorithm; //输入选择的算法
switch(chooseAlgorithm){
case 1:
FIFO(); //调用FIFO算法
break;
case 2:
LRU(); //调用LRU算法
break;
default:
cout<<"请输入正确的序号进行选择:"<<endl;break;
}
cout<<"********** 是否继续选择算法? **********"<<endl;
cout<<"********** 输入1代表继续,输入0代表退出! **********"<<endl;
cin>>isContinue; //输入是否继续选择算法
}
cout<<"***************************结束***************************"<<endl;
system("pause"); //暂停程序
return 0;
原文地址: https://www.cveoy.top/t/topic/fFf0 著作权归作者所有。请勿转载和采集!