📄 存byc.txt
字号:
/****************************************************************************/
/* 实验一: */
/* 模拟分页式存储管理中硬件的地址转换和用先进先出调度算法(FIFO)处理缺页中断 */
/****************************************************************************/
//源程序:
#include "iostream.h"
#include "math.h"
#include "stdio.h"
//页面表结构
struct Cpageform {
int pagenumber; //页面号
int biaozhi; //标志
int kuaihao; //块号
int xgbz; //修改标志
int cpwz; //磁盘位置
};
//操作结构
struct Cwork {
char caozuo; //操作名
int pagenumber; //页号
int pageaddress; //页面地址
};
//页面表初值
Cpageform pageform[]={ {0,1,5,0,0x11},
{1,1,8,0,0x12},
{2,1,9,0,0x13},
{3,1,1,0,0x21},
{4,0,0,0,0x22},
{5,0,0,0,0x23},
{6,0,0,0,0x12},
};
//操作序列初值共12条操作
Cwork work[]={ {'+',0,0x70},{'+',1,0x50},
{'*',2,0x15},{'s',3,0x21},
{'f',0,0x56},{'-',6,0x40},
{'m',4,0x53},{'+',5,0x23},
{'s',1,0x37},{'f',2,0x78},
{'+',4,0x01},{'s',6,0x84}
};
//已装入主存的页面数
const int m=4;
//页号队列
int p[]={0,1,2,3};
//声明FIFO页面调度函数
void fifo1(int p[],int,int&,int);
//主函数
void main()
{//输出“start”
cout<<endl<<"start"<<endl;
//
int k=0; //要装入新页面是应调出的页的位置,初值为0
int l;
int j=0;
int i;
for( i=0;i<12;i++) //顺序执行操作队列
{ //取指令中访问的页号
l=work[i].pagenumber;
cout<<endl<<"beging page"<<endl;
//查页面表中页号为l的页面
L1: j=0;
while ( l != pageform[j].pagenumber && j<7 )
{j=j+1;}
//如果页面的标志不为1,即页面已修改过则产生缺页中断
if (pageform[j].biaozhi!=1)
{ //输出中断页号
cout<<"interrupt:"<<" * "<<pageform[j].pagenumber<<endl;
//调用FIFO页面调度函数.
fifo1( p,l,k,j);
//重新查询页面表
goto L1;
}
//页面未被修改时进行的操作
long int address; // 绝对地址=页面地址+1024×块号
address=1024*pageform[j].kuaihao;
address=address+work[i].pageaddress;
//如果操作是“保存”,则修改页面修改标志
if (work[i].caozuo=='s')
{pageform[j].biaozhi=1;}
输出页号和绝对地址
cout<<"pagenumber:"<<pageform[j].pagenumber<<" ";
cout<<"absolute address="<<address<<endl;
}
}
//FIFO页面调度函数,int p[] :页面队列,int l:操作页号,int& k:要装入新页面时应调出的页的位置,
//int j:中断页
void fifo1(int p[] ,int l,int& k,int j)
{ int pp;
//获得应调出的页的页号
pp=p[k];
//如果J页已修改,则输出J页
if (pageform[j].xgbz==1)
{cout<<"out:"<<j<<endl;}
//如果未被修改则调入操作页
cout<<"in:"<<l<<endl;
//修改主存中页面指向的页号
p[k]=l;
//修改要装入新页面时应调出的页的位置
k=int(fmod((k+1),m));
//修改页面表
pageform[pp].biaozhi=0;
pageform[l].biaozhi=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -