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

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

ID:6802636

大小:166.50 KB

页数:8页

时间:2018-01-26

页式虚拟存储管理中地址转换和缺页中断实验报告_第1页
页式虚拟存储管理中地址转换和缺页中断实验报告_第2页
页式虚拟存储管理中地址转换和缺页中断实验报告_第3页
页式虚拟存储管理中地址转换和缺页中断实验报告_第4页
页式虚拟存储管理中地址转换和缺页中断实验报告_第5页
资源描述:

《页式虚拟存储管理中地址转换和缺页中断实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、页式虚拟存储管理中地址转换和缺页中断实验报告一.实验目的1.深入了解页式存储管理如何实现地址转换;2.进一步认识页式虚拟存储管理中如何处理缺页中断。二.实验仪器PC、windows操作系统、VisualC++6.0三.实验原理编写程序完成页式存储管理中地址转换过程和模拟缺页中断的处理。实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。四.实验步骤代码一#include#include

2、g.h>#definen64//模拟实验中假定的页表长度#definelength10struct{intlnumber;//页号intflag;//表示页是否在主存,"1"表示在,"0"表示不在intpnumber;//该页所在主存块的块号intwrite;//该页是否被修改过,"1"表示修改过,"0"表示没有被修改过intdnumber;//该页存放在磁盘上的位置,即磁盘块号}page[n];//页表定义intm;//作业在主存中的主存块块数intpage_length;//页表实际长度in

3、tp[length];//存放在主存中页的页号inthead;//主存中页号队列头指针page_interrupt(lnumber)//缺页中断intlnumber;{intj;printf("发生缺页中断*%d",lnumber);j=p[head];//淘汰页的页号p[head]=lnumber;//新装入的页号head=(head+1)%m;if(page[j].write==1)//如果该页被修改过printf("将页%d写回磁盘第%d块",j,page[j].dnumber);

4、//输出页号page[j].flag=0;//该页不在主存,执行缺页中断,将标志改为不在主存page[lnumber].pnumber=page[j].pnumber;//使j转去执行缺页中断page[lnumber].flag=1;//将所需页重新调入内存page[lnumber].write=0;//将标志改为未被修改过printf("淘汰主存%2d中的页数%2d,从磁盘第%d块中调入页%2d",page[j].pnumber,j,page[lnumber].dnumber,lnumbe

5、r);}command(laddress,write)unsignedladdress;intwrite;{unsignedpaddress,ad,pnumber,lnumber;kk:lnumber=laddress>>10;ad=laddress&0x3ff;if(lnumber>=page_length)//如果页号大于页表长度,则该页不存在{printf("不存在该页");return;}if(page[lnumber].flag==1)//如果页表在主存内{pnumber=page

6、[lnumber].pnumber;//从页表中取得块号paddress=pnumber<<10

7、ad;//合并块号和块内地址形成物理地址paddress;printf("逻辑地址是:%x对应物理地址是:%x",laddress,paddress);if(write==1)//如果需要写,修改页的修改标志位page[lnumber].write=1;}else{page_interrupt(lnumber);//执行缺页中断gotokk;}}//命令处理函数结束voidmain(){intl

8、number,flag,pnumber,write,dnumber;unsignedladdress;inti;printf("输入页表的信息,创建页表(若页号为-1,则结束输入)");printf("输入页号和辅存地址:");scanf("%d%d",&lnumber,&dnumber);//读入页号和辅存地址i=0;while(lnumber!=-1)//当页号不存在时,修改页表的信息,将各种标志位置0{page[i].lnumber=lnumber;page[i].flag=0;pag

9、e[i].write=0;page[i].dnumber=dnumber;i++;printf("输入页号和辅存地址:");scanf("%d%d",&lnumber,&dnumber);//重新读入新的页号和辅存地址}page_length=i;//页表的长度为页面的数量printf("输入主存块号,主存块数要小于%d,(以-1结束):",i);scanf("%d",&pnumber);m=0;//作业在主存中的主存块块数head=0;//主存中页号队列头指针while(pnumber!=-1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。