分页置换

#include
using namespace std;
int input[16] = { 1, 2, 3, 6, 4, 7, 3, 2, 1, 4, 7, 5, 6, 5, 2, 1 };
int LackPageRate;
class page
{
public:
int num;
int mark;
page()
{
num = 0;
mark = 17;
}
};
void FIFO()
{
cout << “------FIFO-----------” << endl;
int error = 0;
page frame[4];//页帧
for (int i = 0; i < 4; i++)//处理前三个引用
{
frame[i].num = input[i];
error++;
cout << frame[i].num << " | ";
for (int j = 0; j <= i; j++)
cout << frame[j].num << ’ ';
cout << endl;
}
int n=0;
int temp;
for (int i = 4; i < 16; i++)
{
int j;
for (j = 0; j < 4; j++)
if (input[i] == frame[j].num)
{
cout << input[i] << endl;
break;
}
if (j == 4)
{
error++;
temp=frame[((error - 1) % 4)].num;
frame[((error - 1) % 4)].num = input[i];//换掉最旧的页
n++;
cout << input[i] << " | ";
for (int k = 0; k < 4; k++)
cout << frame[k].num << ’ ';
cout << temp;
cout << endl;
}
}
cout << “缺页中断次数:” << error << endl;
cout << “缺页中断率:” << (error*1.0)/16.0 << endl;
cout << “页面置换次数:” << n << endl;
cout << “被置换出的页面序号在置换过程的最后一列” <<endl;
cout << endl;
}

void LRU()
{
cout << “------LRU------------” << endl;
int error = 0;
page frame[4];
for (int i = 0; i < 4; i++)//处理前三个引用
{
frame[i].num = input[i];
error++;
cout << frame[i].num << " | ";
for (int j = 0; j <= i; j++)
cout << frame[j].num << ’ ';
cout << endl;
}
int m=0;
for (int i = 4; i < 16; i++)
{
int j;
for (j = 0; j < 4; j++)
if (input[i] == frame[j].num)
{
cout << input[i] << endl;
break;
}
if (j == 4)
{
error++;
for (j = 0; j < 4; j++)
{
frame[j].mark = 0;
for (int k = 0; k <= i; k++)//向前遍历,找到最近最少使用的
{
if (frame[j].num == input[k])
frame[j].mark = k;
}
}
m++;
if (frame[0].mark < frame[1].mark&&frame[0].mark < frame[2].mark&&frame[0].mark < frame[3].mark)
frame[0].num = input[i];
else if (frame[1].mark < frame[0].mark&&frame[1].mark < frame[2].mark&&frame[1].mark < frame[3].mark)
frame[1].num = input[i];
else if (frame[2].mark < frame[0].mark&&frame[2].mark < frame[1].mark&&frame[2].mark < frame[3].mark)
frame[2].num = input[i];
else
frame[3].num = input[i];
cout << input[i] << " | ";
for (int k = 0; k < 4; k++)
cout << frame[k].num << ’ ';
cout << endl;
}
}
cout << "缺页中断次数: " << error << endl;
cout << "缺页中断率: " << (error*1.0)/16.0 << endl;
cout << “页面置换次数:” << m <<endl;
}
int main()
{
FIFO();
LRU();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值