LRU页面淘汰算法
咋个办呢 2008-01-01 02:31:46 一个很简单实现 LRU 页面淘汰算法 我很容易读懂的,希望他能帮助那些和我一样对 LRU 不了解的,给他们一些帮助。
不知道我写的对不对,还点请高手们看后多多指点。
用 LRU页面淘汰算法:(试验环境TC 2 . 0)
进程: 7,0,1,2,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 存储空间:3
源代码:
#include "stdio.h"
int y,i,j,x,t,count=0;
int a[3]={-1,-1,-1},b[3]={-1,-1,-1};
int c[]={7,0,1,2,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};
void feei()
{ printf("\n============");
printf("=============");
printf("=============");
printf("============");
printf("=============");
printf("============\n");
}
void word()
{ feei();
printf(" ");
printf(" 实现LRU算法\n");
feei();
printf("页面文件:7,0,1,2,3,0,4,2");
printf("3,0,3,2,1,2,0,1,7,0,1 \n");
printf("定义三个内存空间。\n");
printf(" ");
printf(" *LRU*算法过程(左 —〉右): \n");
feei();
}
void input()
{ a[0]!=-1 ? printf("-->| %2d",a[0]) : printf("| %2c",32);
a[1]!=-1 ? printf(" %2d",a[1]) : printf(" %2c",32);
a[2]!=-1 ? printf(" %2d |",a[2]) : printf(" %2c |",32);
count++;
if(count%5==0)feei();
}
void jshuq()
{
for(t=0;t<2;t++)
{
j++;
while(j>2){j=0;}
if(a[j]!=-1)b[j]++;
}
}
void exit()
{
a[j]=c[i]; b[j]=0; input(); jshuq();
}
main()
{
i=j=0;
word();
zhu: while(a[j]==-1)
{
a[j]=c[i];
input();
jshuq();
j=0;i++;
}
loop3:if(a[j]==c[i])
{
b[j]=0;
input();
jshuq();j=0;i++;
goto loop3;
}
for(t=1;t<=3;t++)
{
if(a[2]>=0)
{
loop4:if(a[j]==c[i])
{
b[j]=0;input();
jshuq();
j=0;i++;
while(i>=18)
{
goto loop0;
}
goto loop4;
}
j++;
while(j>2){j=0;}
}
else {goto loop5;}
}
loop2: x=j;
loop1: j++;
while(j>2){j=0;}
if(x==j)exit();
else if(b[x]-b[j]>0)goto loop1;
else goto loop2;
loop5: j++;
if(j>2)
{
j=0;
goto zhu;
}
else
goto zhu;
loop0: getch();
}