首页 模拟页式虚拟存储管理中硬件的地址转换和用先进先出调度算法处理缺页中断

模拟页式虚拟存储管理中硬件的地址转换和用先进先出调度算法处理缺页中断

举报
开通vip

模拟页式虚拟存储管理中硬件的地址转换和用先进先出调度算法处理缺页中断实验 模拟页式虚拟存储管理中硬件的地址转换和用 先进先出调度算法处理缺页中断 1、实验目的 1)理解页式虚拟存储管理中的地址转换。 2)理解用先进先出调度算法如何处理缺页中断。 2、实验原理 在页式虚拟存储管理中,如果访问的页面在内存,计算出相应的物理地址,如果访问的页面不在内存,产生缺页中断,将所缺页从外存调入,如果内存没有空间需要将内存的一页淘汰,再将所缺页调入,然后计算出相应的物理地址。 3、实验仪器设备 微型计算机、C或Visual C++开发软件 4、实验内容与步骤 ...

模拟页式虚拟存储管理中硬件的地址转换和用先进先出调度算法处理缺页中断
实验 模拟页式虚拟存储管理中硬件的地址转换和用 先进先出调度算法处理缺页中断 1、实验目的 1)理解页式虚拟存储管理中的地址转换。 2)理解用先进先出调度算法如何处理缺页中断。 2、实验原理 在页式虚拟存储管理中,如果访问的页面在内存,计算出相应的物理地址,如果访问的页面不在内存,产生缺页中断,将所缺页从外存调入,如果内存没有空间需要将内存的一页淘汰,再将所缺页调入,然后计算出相应的物理地址。 3、实验仪器设备 微型计算机、C或Visual C++开发软件 4、实验内容与步骤 编写程序,模拟页式虚拟存储管理中硬件的地址转换和用先进先出调度算法处理缺页中断。 假定主存的每块长度为1024个字节,现有一个共7页的作业,其副本已在磁盘上。系统为该作业分配了4个主存块,且该作业的第0页至第3页已经装入主存,其余3页尚未装入主存,该作业的页表见下表。 页号 标志 主存块号 修改标志 在磁盘上的位置 0 1 5 0 010 1 1 8 0 012 2 1 9 0 013 3 1 1 0 021 4 0 0 022 5 0 0 023 6 0 0 125 实验步骤 1)输入程序 2)如果该作业执行的指令序列如下表所示: 操作 页号 页内地址 操作 页号 页内地址 + 0 072 + 4 056 5+ 1 050 — 5 023 ╳ 2 015 存(save) 1 037 存(save) 3 026 + 2 078 取(load) 0 056 — 4 001 — 6 040 存(save) 6 086 执行上述的指令序列来调试你所 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行) 5、预习及实验 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 要求 预习页式虚拟存储管理中地址转换和页面置换算法的有关内容。实验报告要求写出程序的源代码及运行结果。 分析:主存块有4个,物理地址=块号*块长(这里是1024)+块内地址(块内地址=页内地址),若页号不在主存中,则产生缺页中断,根据先进先出原则,今要执行的页号置换最先进入主存的页号,计算得到如下值: 5192,8242,9231,1050,5176,5160,8248,9239,1061,5198,8193,8278 012306451246 000006666222 111111444446 222222255555 333333331111 英文版 #define size 1024//定义块的大小,本次模拟设为1024个字节。 #include "stdio.h" #include "string.h" #include struct plist { int number; //页号 int flag; //标志,如为1表示该页已调入主存,如为0则还没调入。 int block; //主存块号,表示该页在主存中的位置。 int modify; //修改标志,如在主存中修改过该页的内容则设为1,反之设为0 int location; //在磁盘上的位置 }; //模拟之前初始化一个页表。 struct plist p1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,125}}; //命令结构,包括操作符,页号,页内偏移地址。 struct ilist { char operation[10]; int pagenumber; int address; }; //在模拟之前初始化一个命令表,通过程序可以让其顺序执行。 struct ilist p2[12]={{"+",0,72},{"5+",1,50},{"*",2,15},{"save",3,26}, {"load",0,56},{"-",6,40},{"+",4,56},{"-",5,23}, {"save",1,37},{"+",2,78},{"-",4,1},{"save",6,86}}; main() { printf(" 模拟页式虚拟存储管理中硬件的地址转换和用先进先出调度算法处理缺页中断\n"); int i,lpage,pflage,replacedpage,pmodify; int p[4]={0,1,2,3}; int k=0; int m=4; long memaddress; for(i=0;i<12;i++)//作业执行指令序列,12个 { lpage=p2[i].pagenumber;//获取页号 pflage=p1[lpage].flag;//标志,是否在内存中 printf("%s,%d,%d",p2[i].operation,p2[i].pagenumber,p2[i].address); printf(" in...%d ",lpage); if(pflage==0)//如果页面不在内存中 { printf("replace page %d",lpage);//置换 replacedpage=p[k]; pmodify=p1[replacedpage].modify; if(pmodify==1) printf(" ***out...%d",replacedpage); else printf(" out...%d",replacedpage); p[k]=lpage; k=(k+1)%m; p1[lpage].flag=1;//标志位改为1 p1[lpage].block=p1[replacedpage].block; p1[replacedpage].block=-1; p1[replacedpage].flag=0; p1[replacedpage].modify=0; } memaddress=p1[lpage].block*size+p2[i].address; if(p2[i].operation=="save") p1[lpage].modify=1; printf("\n memaddress is %ld\n",memaddress); } } 中文版 #define size 1024//定义块的大小,本次模拟设为1024个字节。 #include "stdio.h" #include "string.h" #include struct plist { int number; //页号 int flag; //标志,如为1表示该页已调入主存,如为0则还没调入。 int block; //主存块号,表示该页在主存中的位置。 int modify; //修改标志,如在主存中修改过该页的内容则设为1,反之设为0 int location; //在磁盘上的位置 }; //模拟之前初始化一个页表。 struct plist p1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,125}}; //命令结构,包括操作符,页号,页内偏移地址。 struct ilist { char operation[10]; int pagenumber; int address; }; //在模拟之前初始化一个命令表,通过程序可以让其顺序执行。 struct ilist p2[12]={{"+",0,72},{"5+",1,50},{"*",2,15},{"save",3,26}, {"load",0,56},{"-",6,40},{"+",4,56},{"-",5,23}, {"save",1,37},{"+",2,78},{"-",4,1},{"save",6,86}}; main() { printf(" 模拟页式虚拟存储管理中硬件的地址转换和用先进先出调度算法处理缺页中断\n"); int i,lpage,pflage,replacedpage,pmodify; int p[4]={0,1,2,3}; int k=0; int m=4; long memaddress; for(i=0;i<12;i++)//作业执行指令序列,12个 { lpage=p2[i].pagenumber;//获取页号 pflage=p1[lpage].flag;//标志,是否在内存中 printf("%s,%d,%d",p2[i].operation,p2[i].pagenumber,p2[i].address); printf(" 在主存块%d中执行 ",lpage); if(pflage==0)//如果页面不在内存中 { printf("把页号%d",lpage);//置换 replacedpage=p[k]; pmodify=p1[replacedpage].modify; if(pmodify==1) printf("***放在页号%d的位置",replacedpage); else printf("放在页号%d的位置执行",replacedpage); p[k]=lpage; k=(k+1)%m; p1[lpage].flag=1;//标志位改为1 p1[lpage].block=p1[replacedpage].block; p1[replacedpage].block=-1; p1[replacedpage].flag=0; p1[replacedpage].modify=0; } memaddress=p1[lpage].block*size+p2[i].address; if(p2[i].operation=="save") p1[lpage].modify=1; printf("\n 物理地址为 %ld\n",memaddress); } }
本文档为【模拟页式虚拟存储管理中硬件的地址转换和用先进先出调度算法处理缺页中断】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_841918
暂无简介~
格式:doc
大小:165KB
软件:Word
页数:6
分类:工学
上传时间:2012-11-11
浏览量:149