页式存储管理模拟.docx
- 文档编号:1254627
- 上传时间:2022-10-19
- 格式:DOCX
- 页数:11
- 大小:74.42KB
页式存储管理模拟.docx
《页式存储管理模拟.docx》由会员分享,可在线阅读,更多相关《页式存储管理模拟.docx(11页珍藏版)》请在冰豆网上搜索。
页式存储管理模拟
学 号
2016143222
姓名
王娟
实验日期
2018.
实验名称
页式存储管理模拟
实验目的:
本实验通过模拟页式虚拟存储管理中硬件的地址转换,和采用先进先出算法(FIFO)的缺页中断处理的
实现过程,来进一步加深对虚拟存储的理解。
实验内容:
此实验模拟页式虚拟存储管理中硬件的地址转换和采用先进先出算法(FIFO)的缺页中断处理。
地址转换是由硬件完成的,实验中使用软件程序模拟地址转换过程,模拟地址转换的流程图如图1所示(模拟实验中假定主存64KB,每个主存块1024字节,即n=10,m=16,物理地址中块号6位,块内地址10位;作业最大64KB,即m=16,逻辑地址中页号6位,页内地址10位)。
在模拟实验中页表格式如图2所示。
实验原理:
页表用数组模拟,在模拟实验中,页表数据结构定义为:
definen32/*模拟实验中假定的页表长度*/
struct
{intlnumber;/*页号*/
intflag;/*表示该页是否在主存,“1”表示在主存,“0”表示不在主存*/
intpnumber;/*该页所在主存块的块号*/
intwrite;/*该页是否被修改过,“1”表示修改过,“0”表示没有修改过*/
intdnumber/*该页存放在磁盘上的位置,即磁盘快号*/
}page[n];/*页表定义*/
本实验系统采用页面预置的方法分配主存空间时将前几页调入主存,假定系统中每个作业分得主存块m(m=4)块,则将第0~m-1页装入主存。
因为是模拟硬件工作,所以模拟实验中如果访问的页不在主存时,则输出该页页号,表示硬件产生缺页中断,然后直接转去缺页中断处理。
模拟实验中,由于采用页面预置方法,在给定的主存块中一定无空闲块,只能淘汰已在主存的一页。
模拟实验中,没有启动磁盘的工作,淘汰的页需要写回磁盘时,用输出页号表示,调入新的一页时,将该页在页表中的存在标志置为“1”,输出页号表示将该页调入主存。
模拟实验中使用先进先出调度算法。
可以把在主存储器的页的页号按进入主存的先后次序排成队列,每次总是调出队首的页,当装入一个新页后,把新页的页号排入队尾。
模拟实验中,用一个数组存放页号的队列。
假定分配给作业的主存块数为m,数组可由m个元素组成,p[0],p[1]…….p[m-1],队首指针head和队尾指针tail,当装入一个新的页时,将其页号存入数组:
tail=(tail+1)%m;
p[tail]=新装入页的页号;
当选择淘汰的页时,
淘汰页的页号=p[head];
head=(head+1)%m;
模拟实验中,采用页面预置的方法,页号队列的长度总是m,tail等于(head+1)%m。
因此可以使用一个指针,只用head即可。
在装入一个新的页时,装入页和淘汰页同时执行,语句改为:
淘汰页的页号=p[head];
p[head]=新装入页的页号;
head=(head+1)%m;
模拟实验中,采用先进先出页面置换算法的缺页中断流程图如图3所示。
模拟实验执行一条指令时,不模拟指令的执行,只是考虑执行是否修改页面,若修该页面,则将页面的页表中修改标志置为“1”,然后输出转换后的物理地址,并输出物理地址来表示一条指令的完成;如果访问的页不存在时,则产生缺页中断,往后直接转去缺页中断处理,最后模拟中断返回,就是返回重新进行地址转换。
一条指令执行的模拟流程图如图4所示。
模拟程序中首先手工输入页表信息,创建该作业的页表;然后循环执行假定的指令,观察地址转换情况。
模拟程序的完整流程图如图5所示。
实验过程与结果:
#definen64/*模拟实验中假定的页表长度*/
#definelength10
Struct
{intlnumber;/*页号*/
intflag;/*表示页是否在主存,“1”表示在,“0”表示不在*/
intpnumber;/*该页所在主存块的块号*/
intwrite;/*该页是否被修改过,“1”表示修改过,“0”表示没有修改过*/
intdnumber;/*该页存放在磁盘上的位置,即磁盘块号*/
}page[n];/*页表定义*/
intm;/*m为作业在主存中的主存块块数*/
intpage_length;/*页表实际长度*/
intp[length];/*存放在主存中页的页号*/
inthead;/*主存中页号队列头指针*/
page_interrupt(lnumber)
intlnumber;
{intj;
Printf(“发生缺页中断*%d\n”,lnumber);
/*淘汰页*/
j=p[head];
p[head]=lnumber;
head=(head+1)%m;
if(page[j].write==1)
printf(“将页%d写回磁盘第%d块\n”,j,page[j].dnumber);
page[j].flag=0;/*第j页存在标志改为“0”*/
page[lnumber].pnumber=page[j].pnumber;
page[lnumber].flag=1;/*第lnumber页存在标志改为“0”*/
page[lnumber].write=0;/*第lunmber页修改标志改为“1”*/
printf(“淘汰主存块%2d中的页%2d,从磁盘第%d块中调入页%2d\n”,page[j].pnumber,j,page[lnumber].dnumber,umber);
}/*缺页中断处理函数结束*/
Command(laddress,write)
unsignedladdress;
intwrite;
{unsignedpaddress,ad,pnumber,lnumber;
kk:
/*取出逻辑地址laddress的页号lnumber(高6位)和页内地址ad*/
lnumber=laddress>>10;
ad=laddress&0x33ff;
if(lnumber>=page_length)
{printf(“不存在该页\n”);
return;
}
if(page[lnumber].flag==1)/*页在主存*/
{pnumber=page[lnumber].pnumber;/*从页表中取得块号*/
paddress=pnumber<<10/ad;/*合并块号和块内地址,形成物理地址padress*/
Printf(“逻辑地址是:
%x对应的物理地址是:
%x\n”,laddress,paddress);
If(write==1)/*如果需要写,修改页的修改标志位*/
Page[lnumber]write=1;
}
else
{page_interrupt(lnumber);
-gotokk;
}
}/*命令处理函数结束*/
main()
{intlnumber,flag,pnumber,write,dnumber;
unsignedladdress;
intI;
/*输入页表信息,创建页表page*/
printf(“输入页表信息,创建页表(若页号为-1,则结束输入)\n”);
printf(“输入页号和辅存地址:
”);
scanf(%d%d,&lnumber,&dnumber);
I=0;
While(lnumber!
=-1)
{page[I].lnumber=lnumber;
page[I].flag=0;
page[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)
{if(m<=i)
{page[m].pnumber=pnumber;
page[m]=m;
m++;
}
scanf(“%d”,&pnumber);
}
printf(“输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:
”);
scanf(“%d%x”,&write,&laddress);
while(write==0//write==1)
{command(laddress,write);/*执行指令*/
printf(“输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:
”);
scanf(“%d%x”,&write,&laddress);
}
}/*main()结束*/
3.测试(运行时屏幕显示)
输入页表信息,创建页表(若页号为-1,则结束输入)
输入页号和辅存地址:
011
输入页号和辅存地址:
112
输入页号和辅存地址:
213
输入页号和辅存地址:
321
输入页号和辅存地址:
422
输入页号和辅存地址:
523
输入页号和辅存地址:
6121
输入页号和辅存地址:
-11
输入主存块号,主存块号要小于7,(以-1结束):
5891–1
输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:
046
逻辑地址是:
46对应的物理地址是:
1446
输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:
0432
逻辑地址是:
432对应的物理地址是:
2032
输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:
080f
逻辑地址是:
80f对应的物理地址是:
240f
输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:
0c15
逻辑地址是:
c15对应的物理地址是:
415
输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:
038
逻辑地址是:
38对应的物理地址是:
1438
输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:
01828
发生缺页中断*6
淘汰主存块5中的页0,从磁盘121块中调入页6
逻辑地址是:
1828对应的物理地址是:
1428
输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:
01035
发生缺页中断*4
淘汰主存块8中的页1,从磁盘22块中调入页4
逻辑地址是:
1035对应的物理地址是:
2035
输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:
01417
发生缺页中断*5
淘汰主存块9中的页2,从磁盘23块中调入页5
逻辑地址是:
1417对应的物理地址是:
2417
输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:
1425
发生缺页中断*1
将页3写回磁盘第21块
淘汰主存块1中的页3,从磁盘第12块中调入页1
逻辑地址是:
425对应物理地址是:
425
输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:
084e
发生缺页终端*2
淘汰主存块5中的页6,从磁盘第13块中调入页2
逻辑地址是:
84e对应物理地址是:
144e
输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:
01001
逻辑地址是:
1001对应物理地址是:
2001
输入指令性
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储 管理 模拟
![提示](https://static.bdocx.com/images/bang_tan.gif)