1、实 验 报 告模拟请求分页虚拟存储管理中的硬件地址变换过程【实验目的】1. 通过实验加深对请求分页虚拟存储器管理中的地址变换加深理解。2. 熟练使用所学知识完成地址转换过程。【实验原理】1. 请求分页虚拟存储管理技术是把作业地址空间的全部信息存放在磁盘上。当作业被选中运行时,先把作业的开始几页装入主存并启动运行。为此在为作业建立页表时,应说明哪些页已在主存,哪些页不在主存。页表的格式如表 1-1 所示,其中,”标志”表示对应页是否已经装入主存 :“1”表示对应页已经装入主存 ;“0”表示对应页未装入主存 ;“主存快号”表示该页对应的主存快号 ;“修改位”指示该页调入主存后是否修改过的标志。“外
2、存地址”指示该页所在的外存地址。自己设计一个主存分块表。2. 作业业执行时,指令中的逻辑地址指出参加运算的操作数 (或指令)地址中的页号和页内偏移量。硬件地址转换机构按页号查页表。若该页的标志为 1 ,则表示该页已在主存,从而找到该页对应的主存块号。根据关系式:绝对地址=块号 *块的长度+ 页内偏移量计算出欲访问的主存地址。由于页号为 2 的整次幂,所以只要将块号与页内偏移量相拼接,放入主存地址寄存器即可。按照该地址取指令或取操作数,完成指定的操作。3. 设计一个”地址变换”程序,模拟硬件地址变化过程。当访问的页在主存时,则形成绝对地址后,不去模拟指令的执行,而是输出被转换的地址。当访问的页不
3、在主存时,输出” 该页不在主存 ,产生缺页中断”, 以表示产生一次缺页中断。4. 进行缺页中断处理。中断返回后,重新执行该指令。假定主存的每块长度为 64 个字节,现有一个具有 8 页的作业,系统为其分配了 4个主存块(即 m=4),且最多分 4 块。其中第 0 页至第 3 页已经装入主存 。该作业的页表如表 102 所示。地址变换算法框图如图 101 所示。运行设计的地址变换程序 ,显示或打印运行结果。 。因为只是模拟地址变换,并不模拟指令的执行,故不考虑上述指令的操作结果。页号 标志 主存号 修改位 外存地址表 10-1 页表 页号 标志 主存号 外存地址 修改位0 1 5 011 11
4、1 8 012 12 1 9 013 03 1 10 015 04 0 0175 0 0256 0 2127 0 213表 10-2 页表 1【实验源码】#includeusing namespace std;struct Pageint pno;/页号int flag;/标志位int cno;/主存号int modf;/修改位int addr;/外存地址Page;void changeaddr(struct Page p,int logaddr)/地址变换int j=logaddr/64;/对应的块号int k=logaddr%64;/对应的偏移量int flag=0;int addr;fo
5、r(int i=0;imenu;while(menu)switch(menu)case 1:coutins;changeaddr(p,ins);break;case 2:coutmenu;【实验截图】【实验小结】1. 通过对实验要求的解读,能够理解题目提出的要求,并能够按照要求进行页表的初始化以及相关主存的分配工作。2. 实验中使用的地址变换机构可通过逻辑地址与主存块长度作取整运算获得逻辑地址对应的页面号,再通过求余运算获得页内偏移地址。3. 实验的不足与可改进之处:当逻辑地址对应的页面在主存中时,地址变换完全正确,符合要求。当页面不在主存中时,仅输出“页面中断” ,没有进行页面替换算法的操作,与真实情况相差较大。由于实验中仅有 4 块主存空间可用,也并未要求页面进行替换,所以我在做实验的时候没有把缺页的指令再次执行,仅仅是输出中断提示。再次部分,日后若有更高要求,可以做出改进。