页式虚拟存储器管理中地址转换和缺页中断Word下载.docx

上传人:b****4 文档编号:7115007 上传时间:2023-05-07 格式:DOCX 页数:6 大小:88.58KB
下载 相关 举报
页式虚拟存储器管理中地址转换和缺页中断Word下载.docx_第1页
第1页 / 共6页
页式虚拟存储器管理中地址转换和缺页中断Word下载.docx_第2页
第2页 / 共6页
页式虚拟存储器管理中地址转换和缺页中断Word下载.docx_第3页
第3页 / 共6页
页式虚拟存储器管理中地址转换和缺页中断Word下载.docx_第4页
第4页 / 共6页
页式虚拟存储器管理中地址转换和缺页中断Word下载.docx_第5页
第5页 / 共6页
页式虚拟存储器管理中地址转换和缺页中断Word下载.docx_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

页式虚拟存储器管理中地址转换和缺页中断Word下载.docx

《页式虚拟存储器管理中地址转换和缺页中断Word下载.docx》由会员分享,可在线阅读,更多相关《页式虚拟存储器管理中地址转换和缺页中断Word下载.docx(6页珍藏版)》请在冰点文库上搜索。

页式虚拟存储器管理中地址转换和缺页中断Word下载.docx

假设内存块的大小为2n字节,内存大小为2m字节和逻辑地址m位,则进行地址转换时,首先从逻辑地址中的高m-n位中取得页号,然后根据页号查页表,得到块

intlnumber;

 

//页号

intflag;

//表示页是否在主存中,“1”表示在,“0”表示不在

intpnumber;

//该页所在主存块的块号

intwrite;

//该页是否被修改过,“1”表示修改过,“0“表示没有修改过

intdnumber;

//该页存放在磁盘上的位置,即磁盘块号

}page[n];

//页表定义

intm;

intpage_length;

//页表的实际长度

intp[length];

//用向量模拟主存

inthead;

voidpage_interrupt(int);

//缺页中断处理函数

voidcommand(unsigned,int);

//命令处理函数

voidmain(){

intlnumber,pnumber,write,dnumber;

unsignedladdress;

inti;

cout<

<

"

输入页表的信息,创建页表(页号从0开始,若页号为-1,则结束输入)"

;

请输入页号和辅存地址:

cin>

>

lnumber>

dnumber;

cin.ignore();

i=0;

while(lnumber!

=-1){

page[i].lnumber=lnumber;

page[i].flag=0;

page[i].write=0;

page[i].dnumber=dnumber;

i++;

请输入页号和辅存地址:

}

//预先将输入的页调入主存块中

page_length=i;

输入主存块号(输入少于或者等于"

i<

个数据,若块号数为-1,则结束输入):

pnumber;

m=0;

head=0;

while(m<

LENGTH&

&

PNUMBER!

if(m<

I){

page[m].pnumber=pnumber;

page[m].flag=1;

//调入主存后,标志为置1

p[m]=m;

//记录主存中的页号

m++;

}//while

输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址"

逻辑地址最大能支持2的16次方-1=65535。

输入指令性质:

write;

输入逻辑地址:

laddress;

while(write=0||write=1){

command(laddress,write);

//将输入的逻辑地址转换成物理地址

if(write!

=0&

write!

=1)break;

}//main

//中断处理函数,采用先进现出的页面调度算法//

voidpage_interrupt(intlnumber){

intj;

发生缺页中断"

LNUMBER<

ENDL;

j=p[head];

p[head]=lnumber;

head=(head+1)%m;

if(page[j].write==1)

将页"

J<

写回磁盘第?

page[j].dnumber<

page[j].flag=0;

page[lnumber].pnumber=page[j].pnumber;

page[lnumber].flag=1;

page[lnumber].write=0;

淘汰主存块"

PAGE[J].PNUMBER<

中的页?

j<

PAGE[LNUMBER].DNUMBER<

块中调入页?

lnumber<

endl;

//地址转换函数,将逻辑地址转换成物理地址,如果要查找的页不在主存当中则产生缺页中断//

voidcommand(unsignedladdress,intwrite){

unsignedpaddress,ad,pnumber;

kk:

lnumber=laddress>

10;

//取逻辑地址高6位,页号

ad=laddress&

0x3ff;

//页内地址

该逻辑地址的页号为:

页内地址为:

?

ad<

if(lnumber>

=page_length){ 

//页号大于页表的长度,则无效页号

该页不存在!

return;

if(page[lnumber].flag==1){ 

//页号为lnumber在内存当中

pnumber=page[lnumber].pnumber;

paddress=pnumber<

10|ad;

逻辑地址是:

LADDRESS<

对应物理地址是:

paddress<

if(write==1) 

//该页被修改过

page[lnumber].write=1;

else{ 

//页号为lnumber不在内存当中,则产生缺页中断

page_interrupt(lnumber);

gotokk;

}//command

/i<

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

当前位置:首页 > 表格模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2