#include<stdio.h>
#include<conio.h>
#define M 3
#define N 15
#define Myprintf printf("|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|\n")
typedef struct page
{
int num;
int time;
}Page;
Page b[M];
int c[M][N];
int queue[100];
int K;
void Init(Page *b,int c[M][N])
{
int i,j;
for(i=0;i<N;i++)
{
b[i].num=-1;+
b[i].time=N-i-1;
}
for(i=0;i<M;i++)
for(j=0;j<N;j++)
c[i][j]=-1;
}
int GetMax(Page *b)
{
int i;
int max=-1;
int tag=0;
for(i=0;i<M;i++)
{
if(b[i].time>max)
{
max=b[i].time;
tag=i;
}
}
return tag;
}
int Equation(int fold,Page *b)
{
int i;
for(i=0;i<M;i++)
{
if (fold==b[i].num)
return i;
}
return -1;
}
void Lru(int fold,Page *b)
{ int i;
int val;
val=Equation(fold,b);
if (val>=0)
{
b[val].time=0;
for(i=0;i<M;i++)
if (i!=val)
b[i].time++;
}
else
{
queue[++K]=fold;
val=GetMax(b);
b[val].num=fold;
b[val].time=0;
for(i=0;i<M;i++)
if (i!=val)
b[i].time++;
}
}
void main()
{
int a[N];
int i,j;
printf("M=%d\n",M);
printf("N=%d\n",N);
printf("Input %d page numbers:",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
start: K=-1;
Init(b, c);
for(i=0;i<N;i++)
{
Lru(a[i],b);
c[0][i]=a[i];
for(j=0;j<M;j++)
c[j][i]=b[j].num;
}
printf("The memory:\n");
Myprintf;
for(j=0;j<N;j++)
printf("|%2d ",a[j]);
printf("|\n");
Myprintf;
for(i=0;i<M;i++)
{ for(j=0;j<N;j++)
{
if(c[i][j]==-1)
printf("|%2c ",32);
else
printf("|%2d ",c[i][j]);
}
printf("|\n");
}
Myprintf;
printf("\nThe queue input:");
for(i=0;i<K+1;i++)
printf("%3d",queue[i]);
printf("\nThe number of lost pages:%6d\nThe probability of lost page:%16.6f",K+1,(float)(K+1)/N);
printf("\nWell done! Continue?\ty?");
if(getche()=='y')
goto start;
}
OS.rar_LRU_LRU Algo in os_M?n
版权申诉
183 浏览量
2022-09-24
13:26:11
上传
评论
收藏 22KB RAR 举报
alvarocfc
- 粉丝: 109
- 资源: 1万+