#include\
#define size 128 //块长 #define N 12 typedefstruct {
int pagenum; int flag; int block;
int location;//页表定义
}table;
typedefstruct//操作表定义 {
char ope[10]; int pagenum; int address;
}list; table p1[7] =
{ { 0,1,5,11 },{ 1,1,8,12 },{ 2,1,9,13 },{ 3,1,1,21 },{ 4,0,NULL,22 },{ 5,0,NULL,23 },{ 6,0,NULL,121 } }; void main() {
list p2[N];
int i, page, flag, memaddress;
printf(\); for (i = 0;i printf(\页号= \); scanf(\, &p2[i].ope); printf(\); scanf(\, &p2[i].pagenum); printf(\); scanf(\, &p2[i].address); page = p2[i].pagenum; flag = p1[page].flag; if (flag == 0 && p2[i].pagenum<7)//不在主存 { } elseif (p2[i].pagenum<7) { memaddress = p1[page].block*size + p2[i].address; printf(\物理地址=block(%d)*size(%d)+address(%d);\\n 物理地址= %ld\\n\\n\, printf(\, p2[i].pagenum); p1[page].block, size, p2[i].address, memaddress); } } } else printf(\); 二 #include\#include\ usingnamespace std;//使用setw()时用到的头文件 #include\#include\#define Max 30 #define Size 10 { { Block[i]=-1; } } int i; //某进程调入内存中的最大页面数 //系统为某进程分配的最大物理块数 //初始化物理块 void Init(int Block[],int m) for(i=0;i void creat(int Page[],int n) { { cin>>Page[i]; } } void FIFO(int Page[],int Block[],int n,int m) {//max_stay:比较当前内存中页面驻留的最久时间,count:统计页面置换次数 //get:某物理块是否等待驻入新页面(-1:否) //flag:标记当前序号页面是否已驻入内存(-1:否) //block_num:驻留内存时间最长的页面所在的物理块序号 //time[]标记对应序号的物理块中页面驻留时间 int i,j,max_stay=0,count=0; int get=-1,flag=-1,block_num=-1; int time[Size]; float p=0.0; for(i=0;i for(i=0;i for(j=0;j for(j=0;j if(time[j]>max_stay) { max_stay=time[j]; block_num=j; //block_num标记当前序号物理块中页面驻留时间最久 } if(Block[j]==Page[i])//物理块j中页面与当前期望调入内存的页面相同 //物理块j即将(/等待)驻入新页面 for(j=0;j //输入页面串引用号 } if(flag==-1) //不存在相同页面 { { cout<<\< Block[get]=Page[i]; for(j=0;j<=get;j++) { time[j]++; } get=-1; } else //页面调度置换,序号block_num的物理块是驻留时间最久的 { cout<<\< cout<<\内存已满,最老页面\< Block[block_num]=Page[i]; time[block_num]=0; for(j=0;j time[j]++; } block_num=-1; max_stay=0; count++; } } else //待调入页面与序号flag的物理块中页面相同 { cout<<\< for(j=0;j time[j]++; } //存入页面 //已驻入页面的驻留时间加 time[get]=0; //当前物理块重新计时 if(get!=-1) //物理块即将(/等待)驻入新页面 flag=-1; } for(j=0;j cout< cout< p=count*100/n; cout<<\缺页率为:\< void main() { int n,m,Page[Max],Block[Size]; char p; cout<<\先进先出FIFO页面置换算法*******\< cout< cout<<\警告:输入的数据错误!\< elsebreak; } Init(Block,m); cout<<\请输入总页面数(n<=30):\; cin>>n; cout<<\请输入页面号引用串:\; creat(Page,n); cout<<\算法过程如下:\< cout<<\是否继续?Y/N \; cin>>p; cout<