先进先出置换:淘汰最先进入内存的页面
输入:内存物理块的大小,以及页面号引用串的大小,引用串的各个页面编号。
输出:被置换出去的页面编号。
运行结果:
所需的数据结构:
//页面
struct Page
{
int id; //标志
int start_time; //进入内存的时间
int exist_time; //在内存中没有被访问的时间
};
辅助函数:
//在内存中寻找最先进入内存的页面。返回内存下标。
int FindFirst(Page *q, int m)
{
int time, k, i;
time = q[0].start_time;
k = 0;
for(i = 1; i < m; i++)
if(q[i].start_time < time)
{
time = q[i].start_time;
k = i;
}
return k;
}
//在内存中寻找标志为id的页,如果找到,返回内存下标,否则返回-1
//q内存,m内存大小。
int Find(Page *q, int m, int id)
{
int i;
for(i = 0; i < m; i++)
if(q[i].id == id)
return i;
return -1;
}
实现方法:
void FIFO(Page *p, int n, int m)
{
int i, j, k;
Page q[maxm];
for(i = 0; i < m; i++)
q[i] = p[i];
for(i = m; i < n; i++)
if(Find(q, m, p[i].id) < 0)
{
k = FindFirst(q, m); //在内存中寻找最先进入内存的页面
printf("%d ", q[k].id);
q[k] = p[i];
}
printf("\n");
}