📄 存储管理源程序.cpp
字号:
//#include <iostream.h>
#include <stdio.h>
#include<math.h>
#define maxsize 32
##include <stdlib.h>
define vpf 200
void FIFO(int a[]);
void LRU(int a[]);
void OPT(int a[]);
void LFU(int a[]);
int count[maxsize];
//int b[pf];
int a[vpf];
void main()
{
for(int i=0;i<200;i++)
a[i]=rand()%32;
FIFO(a);
LFU(a);
OPT(a);
LRU(a);
}
void LFU(int a[])
{
for(int n=4;n<33;n++)
{
int num=0;
int same=0;
int min;
int minpage=0;
int dis=0;
int i=0;
int k=0;
int sum=n;
int num2=2;
int b[maxsize];
for (k=0;k<n;k++)
{ b[k]=0;
count[k]=0;}
for (i=0;i<vpf;i++)
{num=0;
for (k=0;k<n;k++)
{
if(a[i]==b[k])
{ same=k;
num++; }
}
if(num!=0)
count[same]++;
else
{
dis++;
if(sum==0)
{ min=201;
for(k=0;k<n;k++)
{
if(min>count[k])
{
min=count[k];
minpage=k;
}
}
b[minpage]=a[i];
if(num2==0)
for(k=0;k<n;k++)
{count[k]=0;
num2=3;}
count[minpage]=1;
num2--;
//count[minpage]=0;
}
else {
{b[n-sum]=a[i];
if(num2==0)
for(k=0;k<n;k++)
{count[k]=0;
num2=3;}
num2--;
count[n-sum]=1;
sum--;}
//for(k=0;k<4;k++)
//count[k]=0;
}
}
//else
// for (k=0;k<4;k++)
// count[k]++;
//printf(" a:%3d",a[i]);
//printf(" b:%3d%3d%3d%3d",b[0],b[1],b[2],b[3]);
}
printf("%d",n);
printf(" page frames LFU:%3d",dis);
printf(" LFU:%6.4f\n",1-(float)dis/32);
}
}
void OPT(int a[])
{
for(int n=4;n<33;n++)
{
int num1=0,num2=0,num3=0,num4=0;
int d;
int dis=0;
int b[maxsize];
int sum=n;
int max;
int maxpage;
int dist[vpf];
for(int i=0;i<vpf;i++)
{ num1=0;
for(int j=0;j<n;j++)
if(a[i]==b[j])
num1++;
if(num1==0)
{ dis++;
if (sum!=0)
{ b[n-sum]=a[i];
sum--;
}
//for(int j=0;j<4;j++)
// if(b[j]==0)
// {b[j]=a[i];
//}
else
{ for(int k=0;k<vpf;k++)
dist[a[k]]=0;
for (k=0;k<vpf;k++)
{ num2=0;
for(j=0;j<n;j++)
if(b[j]==a[k])
num2++;
if(num2!=0)
dist[a[k]]=201;
else dist[a[k]]=0;
}
d=1;
for( k=i+1;k<vpf;k++)
{ num3=0;
for(int j=0;j<n;j++)
if (a[k]==b[j])
num3++;
if (num3!=0)
{ num4=0;
for(int l=i+1;l<k;l++)
if (a[k]==a[l])
num4++;
if(num4==0)
dist[a[k]]=d;
d++;
}
}
max=-1;
maxpage=0;
for(int c=0;c<vpf;c++)
if(max<dist[a[c]])
{max=dist[a[c]];
maxpage=a[c];
}
for(j=0;j<n;j++)
if(b[j]==maxpage)
b[j]=a[i];
}
}
//printf(" a:%3d",a[i]);
//printf(" b:%3d%3d%3d%3d",b[0],b[1],b[2],b[3]);
}
printf("%d",n);
printf(" page frames OPT:%d ",dis);
printf(" OPT:%6.4f\n",1-(float)dis/32);
}
}
void FIFO(int a[])
{
for(int n=4;n<33;n++)
{
int num;
int max;
int maxpage=0;
int dis=0;
int i=0;
int k=0;
int sum=n;
int b[maxsize];
for (k=0;k<n;k++)
{ b[k]=-1;
count[k]=0;}
for (i=0;i<vpf;i++)
{ num=0;
for (k=0;k<n;k++)
{
if(a[i]==b[k])
num++;
}
if(num==0)
{
dis++;
for(k=0;k<n;k++)
count[k]++;
if(sum==0)
{ max=0;
for(k=0;k<n;k++)
{
if(max<count[k])
{
max=count[k];
maxpage=k;
}
}
b[maxpage]=a[i];
count[maxpage]=0;
}
else {
b[n-sum]=a[i];
count[n-sum]=0;
sum--;
}
}
//else
// for (k=0;k<4;k++)
// count[k]++;
//printf(" a:%3d",a[i]);
//printf(" b:%3d%3d%3d%3d",b[0],b[1],b[2],b[3]);
}
printf("%d",n);
printf(" page frames FIFO:%3d",dis);
printf(" FIFO:%6.4f\n",1-(float)dis/32);
}
}
void LRU(int a[])
{
for(int n=4;n<33;n++)
{
int num=0;
int same=0;
int max;
int maxpage=0;
int dis=0;
int i=0;
int k=0;
int sum=n;
int b[maxsize];
for (k=0;k<n;k++)
{ b[k]=-1;
count[k]=0;}
for (i=0;i<vpf;i++)
{num=0;
for (k=0;k<n;k++)
{
if(a[i]==b[k])
{ same=k;
num++; }
}
for(k=0;k<n;k++)
count[k]++;
if(num!=0)
count[same]=0;
else
{
dis++;
if(sum==0)
{ max=0;
for(k=0;k<n;k++)
{
if(max<count[k])
{
max=count[k];
maxpage=k;
}
}
b[maxpage]=a[i];
count[maxpage]=0;
}
else {
b[n-sum]=a[i];
count[n-sum]=0;
sum--;
}
}
//else
// for (k=0;k<4;k++)
// count[k]++;
//printf(" a:%3d",a[i]);
//printf(" b:%3d%3d%3d%3d",b[0],b[1],b[2],b[3]);
}
printf("%d",n);
printf(" page frames LRU:%3d",dis);
printf(" LRU:%6.4f\n",1-(float)dis/32);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -