页式虚拟存储管理中地址转换和页式中断 实验报告.docx

上传人:lao****ou 文档编号:870272 上传时间:2024-07-02 格式:DOCX 页数:12 大小:22.19KB
下载 相关 举报
页式虚拟存储管理中地址转换和页式中断 实验报告.docx_第1页
第1页 / 共12页
页式虚拟存储管理中地址转换和页式中断 实验报告.docx_第2页
第2页 / 共12页
页式虚拟存储管理中地址转换和页式中断 实验报告.docx_第3页
第3页 / 共12页
页式虚拟存储管理中地址转换和页式中断 实验报告.docx_第4页
第4页 / 共12页
页式虚拟存储管理中地址转换和页式中断 实验报告.docx_第5页
第5页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《页式虚拟存储管理中地址转换和页式中断 实验报告.docx》由会员分享,可在线阅读,更多相关《页式虚拟存储管理中地址转换和页式中断 实验报告.docx(12页珍藏版)》请在第一文库网上搜索。

1、页式虚拟存储管理中地址转换和页式中断班级实验五页式虚拟存储管理中地址转换和页式中断一、实验目的深入了解页式存储管理如何实现地址转换;进一步认识页式虚拟存储管理中如何处理缺页中断以及页面置换算法。二、实验主要内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。实验具体内容包括:首先对给定的地址进行转换工作,若发现缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。假定主存64KB,每个主存块1024字节,作业最大支持到64KB,系统中每个作业分得主存块4块。三、实验原理1)地址转换过程:首先从逻辑地址中的高位取得页号,然后根据页号查页表,得到块号;然后

2、从逻辑地址中的低位取得页内地址,将块号和页内地址合并即得到物理地址。2)缺页中断处理根据页号查找页表,判断该页是否在主存储器中,若该页标志位“0”,形成缺页中断。操作系统让调出中断处理程序处理中断。四、实验方法与步骤实现地址转换与缺页中断处理,主要考虑三个问题:第一,设计页式虚拟存储管理方式中页表的数据结构;第二,地址转换算法的实现;第三,缺页中断处理算法的实现。1)设计页表的数据结构页式虚拟存储管理方式中页表除了页号和该页对应的主存块号外,至少还要包括存在标志(该页是否在主存),磁盘位置(该页的副本在磁盘上的位置)和修改标志(该页是否修改过)。在实验中页表用数组模拟,其数据结构定义如下:st

3、ructint!number;页号intf1ag;表示页是否在主存中,“1”表示在,“0”表示不在intpnumber;/该页所在主存块的块号intwrite;该页是否被修改过1”表示修改过,“0”表示没有修改过intdnumber;该页存放在磁盘上的位置,即磁盘块pagen;页表定义2)地址转换算法的实现地址转换是由硬件完成的,实验中使用软件程序模拟地址转换过程。在实验中,每个主存块1024字节,则块内地址占10位;主存64KB,则主存共64块,即块号占6位;物理地址共占16位;作业最大64KB,则作业最大占64块,即页号占6位,逻辑地址共占16位。(用主存的大小计算物理地址位数,用最大作业

4、大小计算逻辑地址位数)。在页式虚拟存储管理方式中,作业信息作为副本放在磁盘上,作业执行时仅把作业信息的部分页面装入主存储器,作业执行时若访问的页面在主存中,则进行地址转换,若访问的页面不在主存中,则产生一个“缺页中断”,由操作系统把当前所需要的页面装入主存储器后,再次执行时才可以按上述方法进行地址转换。模拟地址转换流程度3)缺页中断处理算法的实现缺页处理过程简单阐述如下:a)根据当前执行指令中逻辑地址的页号查找页表,判断该页是否在主存储器中,若该页标志为“0”,形成缺页中断。中断装置通过交换PSW让操作系统的中断处理程序占用处理器。b)操作系统处理缺页中断的方法及时查主存分配表,找一个空闲主存

5、块;若无空闲块,查页表,选择一个已在主存的页面,把它暂时调出主存。若在执行过程中该页被修改过,则需将该页信息写回磁盘,否则不比写回;c)找出该页的位置,启动磁盘读出该页的信息,把磁盘上读出的信息装入第2不找到的主存块,修改页表中该页的标志为“1”;d)由于产生缺页中断的那条指令还没有执行完,所以页面装入后应该重新执行被中断的指令。当重新执行该指令时,由于要访问的页面已在主存中,所以可以正常执行。关于第二步的查找装入新页面的主存块处理方式,不同系统采用的策略可能有所不同,这里采用局部置换算法,就是每个作业分得一定的主存块,只能在分得的主存块内查找空闲块,若无空闲主存块,则从该作业中选择一个页面淘

6、汰出主存。实验中采用局部置换算法。使用局部置换算法时,存在这样一个问题:就是在分配给作业主存空间时,装入哪些页?有的系统采取不装入任何一页,当执行过程中需要时才将其调入。有点系统采用页面预置的方法,事先估计可能某些页面会先用到,在分配主存块后将这些页面装入。在本实验中采用第二种方法,分配主存空间时将前几页调入主存,假定系统中每个作业分得主存块m块,则将第04-1页装入主存。因为是模拟硬件工作,所有在实验中如果访问的页不再主存中时,则输入该页页号,表示硬件产生缺页中断,然后直接转去缺页中断处理;由于采用页面预置方法,在给定的主存块中一定无空闲块,只能淘汰已在主存的一页;没有启动磁盘的工作,淘汰的

7、页面需要写回磁盘时,用输入页号表示,调入新的一页时,将该页在页表中的存在标志置为“1”,输出页号表示将该页调入主存。当主存中无空闲块时,为装入一个页面,必须按照某种算法从已在主存的页中选择一页,将它暂时调出主存,让出主存空间,用来存放装入的页面,这个工作称为“页面调度”。常用的页面调度算法有:先进现出、最近最少用算法、和最近最不常用算法。在本实验中采用先进现出调度算法。先进现出算法总是选择驻留在主存时间最长的一页调出。实验中把主存储器的页的页号按照进入主存的先后次序拍成队列,每次总是调出对首的页,当装入一个新页后,把新页的页号排入对尾。实验中,用一个数组存放页号的队列。假定分配给作业的主存块数

8、为b数组可由m个元素组成,p0,p1,p2pmT;对首指针head;采用页面预置的方法,页号队列的长度总是btai1等于(head+1)n0因此可以使用一个指针,只用head即可。在装入一个新的页时,装入页和淘汰页同时执行,当装入一个新的页时,将其页号存入数组:淘汰页的页号=phead;phead=新装入页的页号;head=(head+1)%m;实验执行一条指令时,不模拟指令的执行,只是考虑指令执行是否修改页面,若修改页面,则将该页的页表中的修改标志位置“1”,然后输出转换后的物理地址,并输出物理地址来表示一条指令执行完成;如果访问的页不在主存时,则产生缺页中断,然后直接转去缺页中断处理,最后

9、模拟中断返回,就是返回冲进进行地址转换。因为没有实际主存,所有在模拟程序中首先手工输入页表信息,创建该作业的页表;然后循环执行假定的指令,观察地址转换情况。五、源代码ftinc1udeftdefinen64页表的最大长度define1ength4系统为每个作业分配的主存块数structint!number;页号intf1ag;表示页是否在主存中,“1”表示在,“0”表示不在intpnumber;/该页所在主存块的块号itwrite;该页是否被修改过,“1”表示修改过,“0”表示没有修改过intdnumber;该页存放在磁盘上的位置,即磁盘块号pagen;页表定义intm;intpage_1en

10、gth;页表的实际长度intp1ength;用向量模拟主存inthead;voidpage_interrupt(int);缺页中断处理函数voidcommand(unsigned,int);命令处理函数voidmainOint!number,pnumber,write,dnumber;unsigned!address;inti;CoUt输入页表的信息,创建页表(页号从0开始,若页号为一1,则结束输入)n;COUt1numberdnumber;cin.ignore();i=0;whi1e(InumberI=-I)pagei.Inumber=Inumber;pagei.f1ag=O;pagei.w

11、rite=0;pagei.dnumber=dnumber;i+;COU请输入页号和辅存地址:;cin1numberdnumber;)预先将输入的页调入主存块中page_1ength=i;Ce)Ut输入主存块号(输入少于或者等于ipnumber;cin.ignore();m=0;head=O;whi1e(m1ength&pnumber!=-1)if(mi)pagem.pnumber=pnumber;pagem.fIag=I;调入主存后,标志为置1Pm=m;/记录主存中的页号m+;)COU输入主存块号(输入少于或者等于ipnumber;cin.ignore();)whi1eCoUt输入指令性质(1

12、修改,0不需要,其他一结束程序运行)和逻辑地址nwrite;cin.ignore();Ce)Ut1address;cin.ignore();whi1e(write=Owrite=1)command(!address,write);将输入的逻辑地址转换成物理地址CoUtwrite;cin.ignore();if(write!=0&write!=1)break;CoUt输入逻辑地址:;cin1address;cin.ignore();/whi1e/main*中断处理函数,采用先进先出的页面调度算法*/voidpage_interrupt(int!number)(itj;COUt发生缺页中断1num

13、berend1;j=phead;phead=Inumber;head=(head+1)%m;if(pagej.write=1)CoUt将页6j写回磁盘第,pagej.dnumberz,块!n”;page1j.f1ag=O;page!number,pnumber=pagej.pnumber;page!number.fIag=I;page!number.write=O;COUtX淘汰主存块,zpagej.pnumber,z中的页j,从磁盘第page!number.dnumber,z块中调入页/z1number10;取逻辑地址高6位,页号ad=1address0x3ff;页内地址CoUt该逻辑地址的页号为:1number”页内地址为:z,ad=page_1ength)(页号大于页表的长度,则无效页号CoUt该页不存在!n;return;if(page!number,f1ag=1)页号为InUnIber在内存当中pnumber=page!number.pnumber;paddress=pnumber10ad;COUt/逻辑地址是:1addressX”对应物理地址是:,zpaddressend1;if(write=1)该页被修改过

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 工作总结

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服