操作系统—页面置换算法C++实现


页面置换算法: 资源包含三个算法:OPT---最佳置换算法、//FIFO---先进先出、//LRU---最近最久未使用 操作:用户输入物理块数、页面待要访问的个数、每个页面编号,计算出缺页数、置换数、缺页率 语言:C++ 运行环境:Visual Studio 2013/更高版本
资源截图
代码片段和文件信息

//OPT---最佳置换算法
#if 1
//by liuhao
//选择永不使用或者最长时间不被使用的页面进行置换
//每次操作完之后重置队列
// 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
//结果:缺页数:9   置换数:6   缺页率:45%
#include 
#include 
#include 
#include //sort()头文件
using namespace std;

struct pages
{
int value;
int time;
};
bool GreaterSort(pages a pages b)
{
return (a.time > b.time);
}


int main()
{
deque  dq;
deque::iterator pos;
int blockNum;//物理块数
int pageNum;//访问页面个数
int missPageNum = 0;//缺页数
int pageLabel;//当前输入的页面标签
vector pageList;//页面访问序列

cout << “****************** OPT ********************“ << endl;

cout << “请输入物理页框块数:“ << endl;
cin >> blockNum;

cout << “
请输入页面走向个数:“ << endl;
cin >> pageNum;

cout << “
请输入访问页面序列:“ << endl;
for (int i = 0; i < pageNum; i++)
{
cin >> pageLabel;
pageList.push_back(pageLabel);
}


for (int i = 0; i < pageNum; i++)
{
if (dq.size() < blockNum)//存在多余页框
{
bool flag = false;
for (pos = dq.begin(); pos != dq.end(); pos++)
{
if ((*pos).value == pageList[i])//存在元素和它相同
{
flag = true;
break;
}  //存在该元素
}

if (!flag) //不存在此元素
{
missPageNum++;//缺页数+1
pages temp;
temp.value = pageList[i];

bool flag2 = false;
for (int j = i + 1; j < pageNum; j++)
{
if (pageList[j] == pageList[i])
{
flag2 = true;
temp.time = j - i;
break;
}
}
if (!flag2)
temp.time = pageNum;//如果后面序列没有出现,time设置为总访问页面个数
dq.push_back(temp);
}
}
else //不存在多余页框
{
bool flag = false;
for (pos = dq.begin(); pos != dq.end(); pos++)
{
if ((*pos).value == pageList[i])
{
flag = true;
break;
}  //存在该元素
}

if (!flag) //不存在此元素 则置换time最大的项
{
missPageNum++;//缺页数+1
// 按照time从大到小排序
sort(dq.begin() dq.end() GreaterSort);
int maxTime = dq.front().time;//第物理块中第一个页面的time
dq.pop_front();//time值最大的出队列

pages temp;
temp.value = pageList[i];
bool flag2 = false;

for (int j = i + 1; j < pageNum; j++)
{
if (pageList[j] == pageList[i])
{
flag2 = true;
temp.time = j - i;
break;
}
}

if (!flag2)
temp.time = pageNum;
dq.push_back(temp);
}
}
//每次之后重置
cout << endl << “第“ << i + 1 << “个页面进入队列中的元素为:“;
for (pos = dq.begin(); pos != dq.end(); pos++)
{
cout << (*pos).value << “  “;
int flag = false;
for (int j = i + 1; j < pageNum; j++)
if (pageList[j] == (*pos).value)
{
flag = true;
(*pos).time = j - i;
break;
}
if (!flag)
(*pos).time = pageNum;
//cout << “<“ << (*pos).value << ““ << (*pos).time << “>   “;
}
cout << endl << endl;
}
cout << “OPT缺页次数为:“ << missPageNum << endl;
cout << “OPT页面置换次数:“ << missPageNum - 3 << endl;
cout << “OPT缺页中断率为:“ << (double)missPageNum / pageNum * 100 << “%“ << endl;
system(“pause“)

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-05-13 17:31  页面置换算法
     目录           0  2019-05-13 16:50  页面置换算法Debug
     文件      115200  2019-05-13 17:36  页面置换算法Debug页面置换算法.exe
     文件      576792  2019-05-13 17:36  页面置换算法Debug页面置换算法.ilk
     文件     1412096  2019-05-13 17:36  页面置换算法Debug页面置换算法.pdb
     文件          22  2019-05-13 17:31  页面置换算法页面置换算法.opensdf
     文件     7864320  2019-05-13 17:32  页面置换算法页面置换算法.sdf
     文件        1000  2019-05-11 11:08  页面置换算法页面置换算法.sln
     文件       27648  2019-05-11 23:57  页面置换算法页面置换算法.v12.suo
     目录           0  2019-05-13 17:36  页面置换算法页面置换算法
     目录           0  2019-05-13 17:36  页面置换算法页面置换算法Debug
     文件      400320  2019-05-13 17:36  页面置换算法页面置换算法Debugmain.obj
     文件      486400  2019-05-13 17:36  页面置换算法页面置换算法Debugvc120.idb
     文件      446464  2019-05-13 17:36  页面置换算法页面置换算法Debugvc120.pdb
     文件        2754  2019-05-13 17:36  页面置换算法页面置换算法Debug页面置换算法.log
     目录           0  2019-05-13 17:36  页面置换算法页面置换算法Debug页面置换算法.tlog
     文件        1238  2019-05-13 17:36  页面置换算法页面置换算法Debug页面置换算法.tlogcl.command.1.tlog
     文件       18940  2019-05-13 17:36  页面置换算法页面置换算法Debug页面置换算法.tlogCL.read.1.tlog
     文件         452  2019-05-13 17:36  页面置换算法页面置换算法Debug页面置换算法.tlogCL.write.1.tlog
     文件        5862  2019-05-13 17:36  页面置换算法页面置换算法Debug页面置换算法.tloglink.command.1.tlog
     文件        8262  2019-05-13 17:36  页面置换算法页面置换算法Debug页面置换算法.tloglink.read.1.tlog
     文件         430  2019-05-13 17:36  页面置换算法页面置换算法Debug页面置换算法.tloglink.write.1.tlog
     文件         195  2019-05-13 17:36  页面置换算法页面置换算法Debug页面置换算法.tlog页面置换算法.lastbuildstate
     文件        7981  2019-05-13 17:36  页面置换算法页面置换算法main.cpp
     文件        4095  2019-05-11 13:13  页面置换算法页面置换算法页面置换算法.vcxproj
     文件         945  2019-05-11 13:13  页面置换算法页面置换算法页面置换算法.vcxproj.filters

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)