/*
File: E:\Courses\OS\OS2013\实验\实验5.TXT
2014/5/4, 21:40:49
在一个请求分页系统中,设页面大小占100个单
元,假如系统分配给一个作业的物理块数为3,
试求出用FIFO,LRU,OPT三种算法在程序访问
过程中所发生的缺页次数及缺页率,每次中断
时都需要打印出来或者标示出来,格式可以参
看课件OS009的ppt
73页。(假设最初页面都在外存)
1.
假定此作业的访问地址序列为202,313,252,
111,546,217,444,544,365,223,398,1
11。
2. 输入任意的访问序列,也必须正确显示。
FIFO:先入先出
LRU :近期最少使用的优先换出
OPT :最远的将来才使用的优先换出
写出LRU和OPT的就行
*/
#include<iostream>
#define N 3
using namespace std;
//全局物理块,序列顺序,缺页次数,缺页率等
int iArr[N]={-1,-1,-1};
int times = 0;
float percent = 0.0;
int iOrder[12]={202,313,252,111,546,217,444,544,365,223,398,111};
int mark = 0;
int temp = 0;
//地址序列转变为页码
void transform(int a[],int n)
{
for(int i=0;i<n;i++)
{
a[i] /= 100;
}
}
//初始化全局变量
void c1ear()
{
for(int i=0;i<N;i++)
{
iArr[i] = -1;
}
times = 0;
percent = 0.0;
}
//FIFO算法
void FIFO()
{
for(int i=0;i<12;i++)
{
for(int j=0;j<N;j++)
{
if(iArr[j]==iOrder[i]) //页码已存在 不需要中断
{
mark = 1;
break;
}
else
{
mark = 0;
}
}
if(!mark) //页码不存在
{
for(j=0;j<N;j++)
{
if(iArr[j]==-1) //有多余空间 中断 直接push
{
iArr[j] = iOrder[i];
times++;
mark = 1;
break;
}
else
{
mark = 0;
}
}
if(!mark) //没有多余空间
{
temp = iOrder[i];
for(j=0;j<N-1;j++)
{
iArr[j] = iArr[j+1];
}
iArr[N-1] = temp;
times++;
}
}
for(j=0;j<N;j++)
{
if(iArr[j]!=-1)
{
cout<<iArr[j]<<" ";
}
}
cout<<endl;
}
percent = (float) times / 12;
cout<<"缺页次数:"<<times<<" 缺页率:"<<percent<<endl;
}
int main()
{
transform(iOrder,12);
FIFO();
return 0;
}