欢迎来到天天文库
浏览记录
ID:56158016
大小:122.50 KB
页数:10页
时间:2020-03-17
《虚拟存储器管理实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、防灾科技学院实验报告系别灾害信息工程系专业班级0950412学号095041219学生姓名郑平贞实验日期2011-12-8成绩课程名称计算机操作系统实验题目虚拟存储器管理实验记录实验目的:1理解虚拟存储器的概念2掌握分页式存储管理地址转换和缺页中断实验环境:WindowsXPVC++6.0实验内容:1模拟分页式存储管理中硬件的地址转换和产生缺页中断2用先进先出页面调度算法处理缺页中断实验过程:1.实验设计(1)模拟分页式存储管理中硬件的地址转换和产生缺页中断。分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。为此,在
2、为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存。作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式“绝对地址=块号×块长+单元号”计算出欲访问的主存单元地址。如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。设计一个“地址转换”程序来模拟硬件的地址转换工作。
3、当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。当访问的页不在主存时,则输出“*该页页号”,表示产生了一次缺页中断。(2)用先进先出(FIFO)页面调度算法处理缺页中断。FIFO页面调度算法总是淘汰该作业中最先进入主存的那一页,因此可以用一个数组来表示该作业已在主存的页面。假定作业被选中时,把开始的m个页面装入主存,则数组的元素可定为m个。2.程序代码:(1)模拟分页式存储管理中硬件的地址转换和产生缺页中断。#include#include#defineSizeOfPage100#def
4、ineSizeOfBlock128#defineM4structinfo//页表{boolflag;//标志longblock;//块号longdisk;//在磁盘上的位置booldirty;//修改标志}pagelist[SizeOfPage];longpo;//队列标记longP[M];voidinit_ex1(){memset(pagelist,0,sizeof(pagelist));pagelist[0].flag=1;pagelist[0].block=5;pagelist[0].disk=011;pagelist[1].flag=1;pagelist[1].b
5、lock=8;pagelist[1].disk=012;pagelist[2].flag=1;pagelist[2].block=9;pagelist[2].disk=013;pagelist[3].flag=1;pagelist[3].block=1;pagelist[3].disk=021;}voidwork_ex1(){boolstop=0;longp,q;chars[128];do{printf("请输入指令的页号和单元号:");if(scanf("%ld%ld",&p,&q)!=2){scanf("%s",s);if(strcmp(s,"exit")==0)
6、{stop=1;}}else{if(pagelist[p].flag){printf("绝对地址=%ld",pagelist[p].block*SizeOfBlock+q);}else{printf("*%ld",p);}}}while(!stop);}voidinit_ex2(){po=0;P[0]=0;P[1]=1;P[2]=2;P[3]=3;memset(pagelist,0,sizeof(pagelist));pagelist[0].flag=1;pagelist[0].block=5;pagelist[0].disk=011;pagelist[1].fl
7、ag=1;pagelist[1].block=8;pagelist[1].disk=012;pagelist[2].flag=1;pagelist[2].block=9;pagelist[2].disk=013;pagelist[3].flag=1;pagelist[3].block=1;pagelist[3].disk=021;}voidwork_ex2(){longp,q,i;chars[100];boolstop=0;do{printf("请输入指令的页号、单元号,以及是否为存指令:");if(scanf("%ld%
此文档下载收益归作者所有