模拟分页式存储管理中硬件的地址转换和产生缺页中断.docx
- 文档编号:15397292
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:9
- 大小:50.56KB
模拟分页式存储管理中硬件的地址转换和产生缺页中断.docx
《模拟分页式存储管理中硬件的地址转换和产生缺页中断.docx》由会员分享,可在线阅读,更多相关《模拟分页式存储管理中硬件的地址转换和产生缺页中断.docx(9页珍藏版)》请在冰点文库上搜索。
模拟分页式存储管理中硬件的地址转换和产生缺页中断
合肥学院
计算机科学与技术系
实验报告
2011~2012学年第一学期
课程
操作系统原理
课程设计名称
模拟分页式存储管理中硬件的地址转换和产生缺页中断
学生姓名
学号
专业班级
10计本
(2)班
指导教师
2011年11月
1.实验目的:
通过实验模拟分页式存储管理中硬件的地址转换和产生缺页中断帮助理解在分页式存储管理中怎样虚拟存储器。
2.实验内容:
分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。
作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式:
绝对地址=块号×块长+单元号
计算出欲访问的主存单元地址。
如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。
若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,由操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。
3.实验步骤:
任务分析:
(1)分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。
为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表的格式为:
页号
标志
主存块号
在磁盘上的位置
其中,标志----用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存,标志位=0,则表示该页尚未装入主存。
主存块号----用来表示已经装入主存的页所占的块号。
在磁盘上的位置----用来指出作业副本的每一页被存放在磁盘上的位置。
(2)作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式:
绝对地址=块号×块长+单元号
计算出欲访问的主存单元地址。
如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。
若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,由操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。
(30设计一个“地址转换”程序来模拟硬件的地址转换工作。
当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。
当访问的页不在主存时,则输出“*该页页号”,表示产生了一次缺页中断。
(4)假定主存的每块长度为128个字节;现有一个共七页的作业,其中第0页至第3页已经装入主存,其余三页尚未装入主存;该作业的页表为:
(1)概要设计:
定义页表结构体typedefstruct
{页号、标志、主存块号、在磁盘存储位置
}table用以存放页表的数据结构信息,
定义一个操作表数据结构typedefstruct{
操作、页号、单元号
}list;
用以存放输入的操作指令,当输入操作指令时,通过操作表中的页号访问页表,查看页表的标志位flag是否为1,若flag=1,则表示在内存通过绝对地址=块号×块长+单元号模拟出硬件的地址转换工作,若flag=0,则表示不再内存,产生一次缺页中断输出“*该页页号”,表示产生了一次缺页中断。
主函数main()用以实现指令的输出和地址的转换工作。
(2)流程图如下:
(3)详细设计:
typedefstruct//页表定义
{
intpagenum;//页号
intflag;//标志
intblock;//主存块号
intlocation;磁盘上的位置
}table;存储页表信息
typedefstruct//操作表定义
{
charope[10];//操作
intpagenum;//页号
intaddress;//单元号
}list;
tablep1[7]=
{
{0,1,5,11},{1,1,8,12},{2,1,9,13},
{3,1,1,21},{4,0,NULL,22},{5,0,NULL,23},{6,0,NULL,121}
};模拟输入页表信息,期中0,1,2,3,表示存入内存,4,5,6,表示未装入内存。
Main主函数的实现如下
{
定义一个数组p2[N]用以存储输入的指令
用for(i=0;i {、、、、、、 page=p2[i].pagenum; flag=p1[page].flag;//通过页号访问页表的标志位 if(flag==0&&p2[i].pagenum<7)//不在主存 { 输出缺页中断 } elseif(页面数<7) { 绝对地址=块号×块长+单元号; 输出模拟转换的地址; } else 页面超出; } } (4)调试分析: 程序只是实现简单的模拟地址转换工作,当缺页时也不做任何处理功能简单 (5)测试结果: 在内存输出模拟的地址: 不在内存 (1)使用说明: 当输入页号为0、1、2、3时,访问标志位为1,表示在主存,此时输出存储物理地址menaddress=block*size+address,当输入页号为4、5、6时,访问标志位为0,表示不在主存,输出*pagename=4Pagefaultgenerated表示缺页中断, (6)实验总结: 本次的实验花费了我们整个小组不少的精力,虽然每个人的分工不同,有轻有重,但我们每一个人都还是尽心尽力去完成自己的任务,实验的过程中,让我们深刻体会到即使是再怎么简单的原理,要想写出一个完整且完美的程序也还是很困难的。 我们都只能力所能及的去做到最好。 7.附录: #include"stdio.h" #include"string.h" #definesize128//块长 #defineN12 typedefstruct { intpagenum; intflag; intblock; intlocation;//页表定义 }table; typedefstruct//操作表定义 { charope[10]; intpagenum; intaddress; }list; tablep1[7]= { {0,1,5,11},{1,1,8,12},{2,1,9,13}, {3,1,1,21},{4,0,NULL,22},{5,0,NULL,23},{6,0,NULL,121} }; voidmain() { listp2[N]; inti,page,flag,memaddress; printf("theOperatingcommandhas(+,-,*,int,out,displace)\n"); for(i=0;i { printf("Enterthecommand: \nope="); scanf("%s",&p2[i].ope); printf("pagename="); scanf("%d",&p2[i].pagenum); printf("Unitnum="); scanf("%d",&p2[i].address); page=p2[i].pagenum; flag=p1[page].flag; if(flag==0&&p2[i].pagenum<7)//不在主存 { printf("*pagenum=%dPagefaultgenerated\n\n",p2[i].pagenum); } elseif(p2[i].pagenum<7) { memaddress=p1[page].block*size+p2[i].address; printf("memaddress=block(%d)*size(%d)+address(%d);\nmemaddress=%ld\n\n", p1[page].block,size,p2[i].address,memaddress); } else printf("pageover! again\n"); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟 分页 存储 管理 硬件 地址 转换 产生 中断