《模拟分页式存储管理中硬件的地址转换和缺页中断2》由会员分享,可在线阅读,更多相关《模拟分页式存储管理中硬件的地址转换和缺页中断2(5页珍藏版)》请在金锄头文库上搜索。
1、模拟分页式存储管理中硬件的地址转换和产生缺页中断分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存。作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式“绝对地址块号X块长单元号”计算出欲访问的主存单元地址。如果块长为的幕次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号
2、,有操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。设计一个“地址转换”程序来模拟硬件的地址转换工作。当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。当访问的页不在主存时,则输出“*该页页号”,表示产生了一次缺页中断。 定义相关数据结构如下typedefstructintaddress;/进程的逻辑地址intmeaddress;/进程的物理地址intpage;/进程所在页号intadd;/进程的位移量arccell,AdjMatrixMAX;typedefstructcharvexMAX;/进程名AdjMatr
3、ixarcs;/指向进程地址的数组intvexnum;/进程总数Pro;typedefstructintpage;/页号intblock;/块号intstatus;/该页是否在内存的状态位pa_cell,pa_matrixMAX;typedefstructpa_matrixptab;/指向页表相关信息的数组pa_tab; 定义必要函数:voidcreate_ptable(pa_tab&pa)/创建页表voidexchange(Pro&P,pa_tab&pa)/地址转换函数 具体实验代码:#include#defineMAX64#defineeachpage1024/eachpage为每页(每块
4、大小)intm;m为简化后的页表行数typedefstructintaddress;/进程的逻辑地址intmeaddress;/进程的物理地址intpage;/进程所在页号intadd;/进程的位移量arccell,AdjMatrixMAX;typedefstructcharvexMAX;/进程名AdjMatrixarcs;/指向进程地址的数组intvexnum;/进程总数Pro;voidCreate_pro(Pro&P)/创建进程inti;coutvv请输入进程总数:;cinP.vexnum;coutvv请输入各进程名:;for(i=0;iP.vexi;coutvv请输入各进程地址:;for
5、(i=0;ivP.vexnum;i+)cinP.arcsi.address;for(i=0;ivP.vexnum;i+)P.arcsi.page=P.arcsi.address/eachpage;P.arcsi.add=P.arcsi.address%eachpage;/逻辑地址=页号*页大小+位移量voidprint(Pro&P)/输出进程的相关信息coutvv各进程的页号页内地址为:vvendl;for(inti=0;im;/输入页表行数coutvv请输入页表相关信息:vvendl;for(inti=0;ivm;i+)cinabc;pa.ptabi.page=a;pa.ptabi.bloc
6、k=b;pa.ptabi.status=c;/依次输入每行的页表信息/地址转换函数voidexchange(Pro&P,pa_tab&pa)for(inti=0;ivP.vexnum;i+)for(intj=0;jvm;j+)if(pa.ptabj.page=P.arcsi.page)/查询到页表里相对应的页号if(pa.ptabj.status=1)/若进程访问的页状态位为1,输出该进程物理地址P.arcsi.meaddress=pa.ptabj.block*eachpage+P.arcsi.address;/物理地址=块号*块大小+位移量cout第i+1个进程物理地址为:P.arcsi.m
7、eaddressendl;else/若访问的页状态位为0,表示该页不在主存,发生“缺页中断”信号cout第i+1个进程地址转换发生缺页中断!endl;voidmain()ProP;Create_pro(P);/创建进程coutendl;print(P);pa_tabpa;coutvv由于页表信息太大,为了简化运算,请输入想输入的页表行数:;create_ptable(pa);/创建页表exchange(P,pa);/调度地址转换函数C:Wind0wssy5t?mS2Debug123,exe址总餐程进进进各各AAA-.二刖=刖+.牛4-.#4-.牛请-820攀燈忤地址0诜程名d页号-838860页内地址申于页表信息太大,为了简化运算,请输入想输入的页表行数:请输入页表相关信息:PressanykeytocontinLie