模拟分页式存储管理中硬件的地址转换和产生缺页中断
分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业
的开始几页先装入主存且启动执行。为此,在为作业建立页表时,应说明哪些页已在主存
哪些页尚未装入主存。
作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地
址转换机构按页号查页表,若该页对应标志为 “1”,则表示该页已在主存,这时根据关系
式“绝对地址=块号×块长+单元号”计算出欲访问的主存单元地址。如果块长为 2 的幂次,
则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。若访问
的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该
页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。设计一个“地
址转换”程序来模拟硬件的地址转换工作。当访问的页在主存时,则形成绝对地址,但不去
模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。当访问的页不在主存时
则输出“* 该页页号”,表示产生了一次缺页中断。
①定义相关数据结构如下
typedef struct
{
int address; //进程的逻辑地址
int meaddress; //进程的物理地址
int page; //进程所在页号
int add; //进程的位移量
}arccell,AdjMatrix[MAX];
typedef struct
{
char vex[MAX]; //进程名
AdjMatrix arcs; //指向进程地址的数组
int vexnum; //进程总数
}Pro;
typedef struct
{
int page; //页号
int block; //块号
int status; //该页是否在内存的状态位
}pa_cell,pa_matrix[MAX];
typedef struct
{
pa_matrix ptab; //指向页表相关信息的数组
}pa_tab;
②定义必要函数:
void create_ptable(pa_tab & pa) //创建页表
void exchange(Pro & P,pa_tab & pa) //地址转换函数
③具体实验代码:
评论10