页式虚拟存储器管理中地址转换和缺页中断_第1页
页式虚拟存储器管理中地址转换和缺页中断_第2页
页式虚拟存储器管理中地址转换和缺页中断_第3页
页式虚拟存储器管理中地址转换和缺页中断_第4页
页式虚拟存储器管理中地址转换和缺页中断_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验题目:页式虚拟存储器管理中地址转换和缺页中断一、 实验目的1、 深入了解页式存储管理如何实现地址转换;2、 进一步认识页式虚拟存储管理中如何实现缺页中断。二、 实验预备知识1、 页式存储管理中地址转换的方法;2、 页式虚拟存储的缺页中断处理方法。三、 实验内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。假定内存64KB,每个内存块1K(1024字节),作业最大支持到64KB,系统中每个作业分得内存块4块。提示1、页式存储管理中地址转换过程:假设内存块的大小为2n字节,内存大小为2m字节和逻辑地址m位,则进行地址转换时,首先从逻辑地址中的高m-n位中取得页号,然后根据页号查页表,得到块号,并将块号放入物理地址的高m-n位,最后从逻辑地址中取得低n位放入物理地址的低n位就得到了物理地址,实验中使用软件模拟地址的转换过程,模拟地址转换的流程如下:2、缺页处理过程(1)根据当前执行指令中逻辑地址的页号查页表,判断该页是否在主存储器中,若该页标志为“0”,形成缺页中断。中断装置通过交换PSW让操作系统的中断处理程序占用处理机;(2)操作系统处理缺页中断的方法就是查内存分配表,找一个空闲内存块;若无空闲块,查找表,选择一个已在内存的页面,把它暂时调出内存。若在执行过程中该页被修改过,则需将该页信息写回磁盘,否则不必写回;(3)找出该页的磁盘位置,启动磁盘读出该页信息,把磁盘上读出的信息装入到第2步找到内存块,修改页表中该页的标志为“1”;(4)由于产生缺页中断的那条指令没有执行完,所以页面装入后应重新执行被中断的指令。当重新执行该指令时,由于要访问的页面已在内存中,所以可正常执行。程序代码ia #include#define n 64 /页表的最大长度#define length 4 /系统为每个作业分配的主存块数structint lnumber; /页号int flag; /表示页是否在主存中,“1”表示在,“0”表示不在int pnumber; /该页所在主存块的块号int write; /该页是否被修改过,“1”表示修改过,“0“表示没有修改过int dnumber; /该页存放在磁盘上的位置,即磁盘块号pagen; /页表定义int m;int page_length; /页表的实际长度int plength; /用向量模拟主存int head;void page_interrupt(int); /缺页中断处理函数void command(unsigned, int); /命令处理函数void main()int lnumber,pnumber,write,dnumber;unsigned laddress;int i;cout输入页表的信息,创建页表(页号从0开始,若页号为1,则结束输入) ;coutlnumberdnumber;cin.ignore ();i=0;while(lnumber!=-1)pagei.lnumber=lnumber;pagei.flag=0;pagei.write=0;pagei.dnumber=dnumber;i+;coutlnumberdnumber;/预先将输入的页调入主存块中page_length=i;cout输入主存块号(输入少于或者等于ipnumber; cin.ignore ();m=0;head=0;while(mLENGTH&PNUMBER!=-1)if(mI)pagem.pnumber=pnumber;pagem.flag=1;/调入主存后,标志为置1pm=m; /记录主存中的页号m+;cout输入主存块号(输入少于或者等于ipnumber; cin.ignore ();/whilecout输入指令性质(1修改,0不需要,其他结束程序运行)和逻辑地址 逻辑地址最大能支持2的16次方165535。;coutwrite;cin.ignore ();coutladdress;cin.ignore ();while(write=0|write=1)command(laddress,write); /将输入的逻辑地址转换成物理地址cout输入指令性质:;cin.ignore ();if(write!=0&write!=1) break;coutladdress;cin.ignore ();/while/main/中断处理函数,采用先进现出的页面调度算法/void page_interrupt(int lnumber)int j;cout发生缺页中断LNUMBERENDL;j=phead;phead=lnumber;head=(head+1)%m;if(pagej.write=1)cout将页 J 写回磁盘第 ?pagej.dnumberpagej.flag=0;pagelnumber.pnumber=pagej.pnumber;pagelnumber.flag=1;pagelnumber.write=0;cout淘汰主存块 PAGEJ.PNUMBER 中的页 ?jPAGELNUMBER.DNUMBER 块中调入页 ?lnumber10; /取逻辑地址高6位,页号ad=laddress&0x3ff; /页内地址cout该逻辑地址的页号为:LNUMBER 页内地址为:?ad=page_length) /页号大于页表的长度,则无效页号cout该页不存在!;return;if(pagelnumber.flag=1) /页号为lnumber 在内存当中 pnumber=pagelnumber.pnumber;paddress=pnumber10|ad;cout逻辑地址是:LADDRESS 对应物理地址是:?paddressendl;if(write=1) /该页被修改过pag

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论