采用先进先出实现分页管理的缺页调度
采用先进先出实现分页管理的缺页调度
根据到达先后顺序进行处理,设有四个主存块号,每访问一次均存入主存,具体步骤可看下面代码结果截图。
#include<stdio.h>
struct PCB{
int num;
int label;
int block;
int address;
int fix;
};
struct FIFO{
int num;
int fag;
};
int k=1;
//初始化
void init(PCB *p,FIFO *q){
FILE *r=fopen("4-2.txt","r");
for(int i=0;i<8;i++)
fscanf(r,"%d%d%d%d%d",&p[i].num,&p[i].label,&p[i].block,&p[i].address,&p[i].fix);
printf("页号 标志 主存块号 外存地址 修改位 \n");
for(int i=0;i<8;i++)
printf("%3d%7d%21d\n",p[i].num,p[i].label,p[i].address);
r=fopen("4-2x.txt","r");
for(int i=0;i<8;i++)
fscanf(r,"%d%d",&q[i].num,&q[i].fag);
printf("主存块号为:\n");
for(int i=0;i<4;i++)
printf("%5d",q[i].num);
}
//缺页处理
void cut(PCB *p,int a,int b,FIFO *q){
int ss=0;
for(int i=0;i<4;i++)
if(q[i].fag==0&&ss==0){
p[a].block=q[i].num;
p[a].label=1;
q[i].fag=k;
p[a].fix=0;
k=k%4+1;
ss=1;
}
if(ss==0){
int temp=0;
for(int i=0;i<4;i++){
if(q[temp].fag>q[i].fag)
temp=i;
}
for(int i=0;i<8;i++)
if(p[i].block==q[temp].num){
p[i].block=0;
p[i].label=0;
}
for(int i=0;i<4;i++)
q[i].fag--;
q[temp].fag=4;
p[a].label=1;
p[a].block=q[temp].num;
p[a].fix=0;
}
printf("页号 标志 主存块号 外存地址 修改位 \n");
for(int i=0;i<8;i++){
if(p[i].label!=0)
printf("%3d%7d%10d%11d%12d\n",p[i].num,p[i].label,p[i].block,p[i].address,p[i].fix);
else
printf("%3d%7d%21d\n",p[i].num,p[i].label,p[i].address);
}
printf("绝对地址为:\n");
int m=p[a].block*64+b;
printf("%x\n",m);
}
//搜索页表
void search(PCB *p,int a,int b,FIFO *q){
if(p[a].label==0){
printf("该页不在主存,产生缺页中断\n");
cut(p,a,b,q);
}
else{
printf("绝对地址为:\n");
int m=p[a].block*64+b;
printf("%x\n",m);
p[a].fix=1;
printf("页号 标志 主存块号 外存地址 修改位 \n");
for(int i=0;i<8;i++){
if(p[i].label!=0)
printf("%3d%7d%10d%11d%12d\n",p[i].num,p[i].label,p[i].block,p[i].address,p[i].fix);
else
printf("%3d%7d%21d\n",p[i].num,p[i].label,p[i].address);
}
}
}
//输入指令
void input(PCB *p,FIFO *q){
int N,a,b,m;
printf("\n输入指令个数:\n");
scanf("%d",&N);
for(int i=0;i<N;i++){
printf("输入第%d条指令\n",i+1);
scanf("%x",&m);
a=m/64;
b=m%64;
search(p,a,b,q);
}
}
//主函数
int main(){
PCB p[8];
FIFO q[4];
init(p,q);
input(p,q);
}
代码中文件读取如下:
结果展示如下:
谢谢大家观看!