#include #include //头文件,用于字符串 #include //头文件,用于算法 #include //头文件,用于输入输出格式控制 #include <Windows.h> //头文件,用于Windows系统API调用 #include //头文件,用于向量操作 using namespace std;

const int MaxNumber=100; //定义最大页面数量 int PageOrder[MaxNumber]; //页面序列 int PageNum,LackNum,MinBlockNum; //页面个数,缺页次数,分配的物理块数 int PageDisCount[MaxNumber]; //当前内存距离下一次出现的距离 double LackPageRate; //缺页率 vector v; //定义一个动态数组

//函数声明 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::iterator iter; //定义一个迭代器 for( i = 0;i<PageNum;i++){ bool flag=false; for(iter=v.begin(); iter!=v.end();iter++){ if(*iter == PageOrder[i]){ v.erase(iter); //删除该元素 v.push_back(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;

}

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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录