#include<stdio.h>
#define page 4
#define out_size 17
int array[]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1};
int size=sizeof(array)/sizeof(array[0]);
float rate;
int in(int *a,int x){
int t=0;
for(int i=0;i<page;i++){
if(x==a[i]){
t=1;//包含 不需要置换
break;
}
}
return t;
}
int Get_Index(int *a,int x){
int t;
for(int i=0;i<page;i++){
if(x==a[i])
t=i;
}
return t;
}
void change(int *c,int x){
int t=c[x];
while(x!=0){
c[x]=c[x-1];
x--;
}
c[0]=t;
}
void out_put(int *b,int *o,int i){
printf("主存页号:");
for(int i=0;i<page;i++){
if(b[i]!=-1){
printf("%3d",b[i]);
}
else
printf(" ");
}
printf("\t");
if(o[i]!=-1){
printf("淘汰:%2d",o[i]);
}
else
printf("淘汰: --");
printf("\n");
}
void FIFO(int *box){
int j=0,k=0,out[out_size],sum_out=0;
float rate;
for(int i=0;i<size;i++){
out[i]=-1;
if(i<page){
box[j++]=array[i];
}
else{
if(in(box,array[i])==0){
out[i]=box[k];
box[k++]=array[i];
k%=page;
sum_out++;
}
}
out_put(box,out,i);
}
rate=(page+sum_out)/float(size);
printf("缺页中断率:%.3f\n",rate);
}
void LRU(int *box){
int sum_out=0,out[out_size],index;
for(int i=0;i<size;i++){
out[i]=-1;
if(i==0)
box[0]=array[0];
else if(i<page){
for(int j=i;j>=1;j--){
box[j]=box[j-1];
}
box[0]=array[i];
}
else if(in(box,array[i])!=0){
index=Get_Index(box,array[i]);
if(index>0)
change(box,index);
}
else{
if(in(box,array[i])==0){
out[i]=box[page-1];
for(int j=page-1;j>0;j--){
box[j]=box[j-1];
}
box[0]=array[i];
sum_out++;
}
}
out_put(box,out,i);
}
rate=(page+sum_out)/float(size);
printf("缺页中断率:%.3f\n",rate);
}
int main(){
int num,box[page];
for(int i=0;i<page;i++){
box[i]=-1;
}
printf("请输入算法:");
while(num){
scanf("%d",&num);
switch (num) {
case 1:
printf("FIFO:\n");
FIFO(box);
break;
case 2:
printf("LRU:\n");
LRU(box);
break;
default:
printf("输入错误。");
break;
}
}
}
页面调度-FIFO-LRU
最新推荐文章于 2024-09-06 10:38:06 发布
这篇文章介绍了使用C语言实现的FIFO(First-In-First-Out)和LRU(LeastRecentlyUsed)内存替换算法,以及如何计算缺页中断率。通过这两个算法模拟虚拟内存管理过程。
摘要由CSDN通过智能技术生成