当前位置:文档之家› 内存分配,缺页中断程序

内存分配,缺页中断程序

#include <stdio.h>
#define M 100 // 要装入的作业数
#define N 10 //系统可以分配的最大主存数int chazhao(int x,int b[],int n)
{
for(int i=0;i<n;i++)
{
if(x==b[i])
return 1;
}
return 0;
}
int main(int argc, char *argv[])
{
int a[M];
int b[N];
int c[M]; // 淘汰的页号
int m=0,n,num;
int count;//缺页总数
printf("请输入作业队列,输入-1结束:");
do{
scanf("%d",&a[m]);
m++;
} while(a[m-1]!=-1);
printf("\n请输入分配的主存数:");
scanf("%d",&n);
count=n;
for(int i=0;i<n;i++)
{
b[i]=a[i];
}
num=0;
for(int j=n;j<m-1;j++)
{
if(!chazhao(a[j],b,n))
{
c[num++]=b[0];
for(int i=0;i<n-1;i++)
{
b[i]=b[i+1];
}
b[n-1]=a[j];
count++;
}
}
printf("\n缺页的次数为: %d\n\n",count);
printf("缺页中断率为: %.2f%%%\n\n",(float)count*100/(m-1));
printf("在内存中的页号为:");
for(int i=0;i<n;i++)
printf("%3d",b[i]);
printf("\n\n被淘汰的页号为:");
for(int i=0;i<num;i++)
printf("%3d",c[i]);
printf("\n\n");
return 0;
}
十一郎16:14:42
#include <stdio.h>
int find(int x,int b[],int n)
{
int i;
for( i=0;i<n;i++)
if(x==b[i])
return i;
return -1;
}
int main(int argc, char *argv[])
{
int a[100],b[15],c[100];
int i,j,k,count,num,flag,n,m,x;
printf("请输入作业队列数:");
scanf("%d",&m);
printf("请输入作业队列:");
for(i=0;i<m;i++)
scanf("%d",&a[i]);
printf("请输入内存数:");
scanf("%d",&n);
count=n;
for(i=0;i<n;i++)
b[i]=a[i];
num=0;
for(i=n;i<m;i++)
{
flag=find(a[i],b,n);
if(flag==-1)
{
c[num++]=b[0];
for( j=0;j<n-1;j++)
{
b[j]=b[j+1];
}
b[n-1]=a[i];
count++;
}
else
{
x=b[flag];
for(j=flag;j<n-1;j++)
b[j]=b[j+1];
b[n-1]=x;
}
}
printf("缺页的次数为:%3d\n\n",count);
printf("缺页率为:%.2f%%%\n\n",(float)count*100/m);
printf("驻留再内存的页号:");
for(i=0;i<n;i++)
printf("%3d",b[i]);
printf("\n\n被淘汰的页号为:");
for(i=0;i<num;i++)
printf("%3d",c[i]);
printf("\n\n");
return 0;
}
十一郎16:14:49
#include <stdio.h>
int find(int x,int b[],int n)
{
int i;
for( i=0;i<n;i++)
if(x==b[i])
return 1;
return 0;
}
int xuanze(int a[],int b[],int m,int n,int x)
{
int i,j,k;
int max=0,num;
for(i=0;i<n;i++)
{
num=0;
for(j=x;j<m;j++)
{
num++;
else
break;
}
if(num>max)
{
max=num;
k=i;
}
}
return k;
}
int main(int argc, char *argv[])
{
int a[100],b[15],c[100];
int i,j,k,count,num,flag,n,m,x;
printf("请输入作业队列数:");
scanf("%d",&m);
printf("请输入作业队列:");
for(i=0;i<m;i++)
scanf("%d",&a[i]);
printf("请输入内存数:");
scanf("%d",&n);
count=n;
for(i=0;i<n;i++)
b[i]=a[i];
num=0;
for(i=n;i<m;i++)
{
flag=find(a[i],b,n);
if(!flag)
{
x=xuanze(a,b,m,n,i);
c[num++]=b[x];
b[x]=a[i];
count++;
}
}
printf("缺页的次数为:%3d\n\n",count);
printf("缺页率为:%.2f%%%\n\n",(float)count*100/m);
printf("驻留再内存的页号:");
for(i=0;i<n;i++)
printf("\n\n被淘汰的页号为:");
for(i=0;i<num;i++)
printf("%3d",c[i]);
printf("\n\n");
return 0;
}。

相关主题