⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pageexchange.cpp

📁 在计算机系统中
💻 CPP
字号:
//pageExchange.cpp
//======================================
//
#include"pageExchange.h"
#include<vector>
using namespace std;

void create(vector<int>& pageList,int num)
{
	for(int i = 0; i < num;i ++)
	{
		int temp;
		temp = -1;
		pageList.push_back(temp);
	}
}
void create1(vector<int>& pageList,int num,vector<int>& pages,int page[],int pageCount)
{
	for(int i = 0; i < num;i ++)
	{
		int temp;
		temp = -1;
		pageList.push_back(temp);
	}
	for(i = 0;i < pageCount;i ++)
	{
		pages.push_back(page[i]);
	}
}
void visit(const vector<int>& pageList)
{
	for(int i = 0;i < pageList.size(); i ++)
	{
		cout<<pageList[i]<<"  ";
	}
}

int isHave(const vector<int>& pageList,int cPage)
{
	for(int i = 0;i < pageList.size();i ++)
	{
		if(pageList[i] == cPage)
		{
			return i;
		}
	}
	return -1;
}

void FIFOSolve(vector<int>& pageList,vector<int>& pages,int& lostPages)
{
	for(int i = 0;i < pageList.size();i ++)
	{
		pageList[i] = pages[i];
		visit(pageList);
		cout<<endl;
		lostPages ++;
	}
	for(;i < pages.size();i ++)
	{
		if(isHave(pageList,pages[i]) == -1)
		{
			lostPages ++;
			int ePage = pageList[0];
			for(int j = 0;j < pageList.size() - 1;j ++)
			{
				pageList[j] = pageList[j + 1];
			}
			pageList[j] = pages[i];
			visit(pageList);
			cout<<"\tR"<<ePage<<endl;
		}
		else
		{
			visit(pageList);
			cout<<endl;
		}
	}
	for(i = 0;i < pageList.size();i ++)
	{
		pageList[i] = -1;
	}
}

void OPRSolve(vector<int>& pageList,vector<int>& pages,int& lostPages)
{
	vector<bool> usedMost;
	for(int i = 0;i < pageList.size();i ++)
	{
		pageList[i] = pages[i];
		visit(pageList);
		cout<<endl;
		bool exist = false;
		usedMost.push_back(exist);
		lostPages ++;
	}
	for(;i < pages.size();i ++)
	{
		if(isHave(pageList,pages[i]) == -1)
		{
			lostPages ++;
			//int ePage = pageList[0];
			int scan = -1;
			for(int k = i + 1;k < pages.size();k ++)
			{
				if(isHave(pageList,pages[k]) != -1)
				{
					usedMost[isHave(pageList,pages[k])] = true;
					scan = isHave(pageList,pages[k]);
				}
			}
			int aim = -1;
			for(k = 0;k < usedMost.size();k ++)
			{
				if(!usedMost[k])
				{
					aim = k;
					break;
				}
			}
			if(aim == -1)
			{
				aim = scan;
			}
			//cout<<"***********"<<aim<<"  "<<scan<<endl;
			int ePage = pageList[aim];
			for(int j = aim;j < pageList.size() - 1;j ++)
			{
				pageList[j] = pageList[j + 1];
			}
			pageList[j] = pages[i];
			visit(pageList);
			cout<<"\tR"<<ePage<<endl;
			for(k = 0;k < usedMost.size();k ++)
			{
				usedMost[k] = false;
			}
		}
		else
		{
			visit(pageList);
			cout<<endl;
		}
	}
	for(i = 0;i < pageList.size();i ++)
	{
		pageList[i] = -1;
	}
}

void LRUSolve(vector<int>& pageList,vector<int>& pages,int& lostPages)
{
	for(int i = 0;i < pageList.size();i ++)
	{
		pageList[i] = pages[i];
		visit(pageList);
		cout<<endl;
		lostPages ++;
	}
	for(;i < pages.size();i ++)
	{
		if(isHave(pageList,pages[i]) == -1)
		{
			lostPages ++;
			int ePage = pageList[0];
			for(int j = 0;j < pageList.size() - 1;j ++)
			{
				pageList[j] = pageList[j + 1];
			}
			pageList[j] = pages[i];
			visit(pageList);
			cout<<"\tR"<<ePage<<endl;
		}
		else
		{
			for(int j = isHave(pageList,pages[i]);j < pageList.size() - 1;j ++)
			{
				pageList[j] = pageList[j + 1];
			}
			pageList[j] = pages[i];
			visit(pageList);
			cout<<endl;
		}
	}
	for(i = 0;i < pageList.size();i ++)
	{
		pageList[i] = -1;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -