fifo.c
来自「关于操作系统:先进先出调度算法(FIFO)处理缺页中断」· C语言 代码 · 共 94 行
C
94 行
#define t_i_m 4 //定义内存中的页面数
#define t_i_t 7 //定义全部页面数
#include <stdio.h>
typedef struct //定义页表数据结构
{
int pno;
int flag;
int mpno;
int sign;
int direction;
} paget;
paget pt[t_i_t]; //定义页表
typedef struct //命令结构
{
int code;
int pno;
int address;
} instruction;
/*
1 add
2 sub
3 mul
4 div
5 shift
6 store
7 load
*/
instruction array[12]={{1,0,70}, //定义指令序列
{1,1,50},
{3,2,15},
{6,3,21},
{7,0,56},
{2,6,40},
{5,4,53},
{1,5,23},
{6,1,37},
{7,2,78},
{1,4,1},
{6,6,84}};
int p[t_i_t]={0,1,2,3,4,5,6},k=0;
void initpt() //初始化页表
{
int i;
for(i=0;i<t_i_t;i++)
{
pt[i].pno=i;
pt[i].flag=0;
pt[i].mpno=0;
pt[i].sign=0;
pt[i].direction=0;
}
for(i=0;i<t_i_m;i++)
pt[i].flag=1;
pt[0].mpno=5;pt[0].direction=11;
pt[1].mpno=8;pt[1].direction=12;
pt[2].mpno=9;pt[2].direction=13;
pt[3].mpno=1;pt[3].direction=21;
pt[4].mpno=-1;pt[4].direction=22;
pt[5].mpno=-1;pt[5].direction=23;
pt[6].mpno=-1;pt[6].direction=121;
}
void adt(instruction s) //地址转换函数
{
int i,l,addr,j;
l=s.pno;
if(pt[l].flag==1)
{
addr=1024*pt[s.pno].mpno+s.address;
if(s.code==6) pt[l].sign=1;
printf("\n%d",addr);
}
else
{
printf("\n*%d ",l);
j=p[k];
if(pt[j].sign==1)
printf("OUT %d ",j);
printf("IN %d ",l);
p[k]=l;
k=(k+1)%t_i_m;
pt[j].flag=0;
pt[l].flag=1;
}
}
main()
{
int i;
initpt();
for(i=0;i<12;i++)
adt(array[i]);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?