资源描述:
《实验存储管理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验存储管理一、实验目的在计算机系统屮,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。用这种办法扩充的主存储器称为虚拟存储器。通过本实验帮助同学理解在分页式存储管理屮怎样实现虚拟存储器。二、实验要求及实验环境第一题:模拟分页式存储管理中硬件的地址转换和产生缺页中断。分页式虚拟存储系统是把作业信息的副木存放在磁盘上,当作业被选屮吋,可把作业的开始儿页先装入主存口启动执行。为此,在为作业建立页表时,应说明哪些贝己在主存,哪些页尚
2、未装入主存。作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这吋根据关系式“绝对地址二块号X块长+单元号”计算出欲访问的主存单元地址。如果块长为2的幕次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上的位置,把该页信息从磁盘读岀装入主存后再重新执行这条指令。设计一个“地址转换”程序来模拟硬件
3、的地址转换工作。当访问的页在主存吋,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。当访问的页不在主存时,则输出“*该页页号”,表示产生了一次缺页中断。第二题:用先进先出(FIFO)页面调度算法处理缺页中断。在分页式虚拟存储系统中,当駛件发出“缺页中断”后,引出操作系统来处理这个中断事件。如果主存屮已经没有空闲块,则可用FIFO页面调度算法把该作业屮最先进入主存的一页调出,存放到磁盘上,然后再把当前要访问的页装入该块。调出和装入后都耍修改页表页表屮对应页的标志。FIFO页面调度
4、算法总是淘汰该作业中最先进入主存的那一页,因此可以用一个数组来表示该作业已在主存的页而。假定作业被选中时,把开始的m个页面装入主存,则数组的元素可定为m个。编制一个FIFO页面调度程序,为了提高系统效率,如果应淘汰的页在执行屮没有修改过,则可不必把该页调出(因在磁盘上已有副木)而直接装入一个新页将其覆盖。由于是模拟调度算法,所以,不实际启动输出一页和装入一贝的程序,而用输岀调岀的页号和装入的页号来代替一次调出和装入的过程。三、设计思想(木程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关
5、系)1.程序流程图结束以下为FIFO算法流程2.逻辑设计使用线性表保存页表。每个节点信息包括调入主存的标志,主存块号,在磁盘上的位置,修改标志等。使用线性表保存FIFO算法使用的对应关系数组P,用数组模拟实现调度的队列。该队列需支持查找,插入和删除操作(即替换操作)3.物理设计全局定义如下:structinfo//页表{boolflag;〃标志longblock;//块号longdisk;//在磁盘上的位置booldirty;//修改标志}pagelist[SizeOfPage];longpo;〃队列标记lo
6、ngP[M];使用函数init()进行初始化,使用循环结构读入各条指令。源码:#inckide#include#defineSzeOfPage100#defineSizeOfBlock128#defineM4structinfo//页表{boolflag;//标志longblock;//块号longdisk;//在磁盘上的位置booldirty;//修改标志}pagelist
7、SizeOfPage];longpo;〃队列标记longP[M];voidinit_exl(){me
8、mset(pagelist,0,sizeof(pagelist));pagelist
9、O].flag=l;pagelist[0].block=5;pagelist[()].disk=011;pagelist[l].flag=l;pagelist[l].block=8;pagelist
10、1].disk=012;pagelist
11、2].flag=l;pagelist[2].block=9;pagelist[2].disk=()l3;pagelist[3].flag=l;pagelist[3].block=l;pa
12、gelist[3].disk=021;voidwork_ex1(){boolstop=0;longp,q;chars[128];do{printf(“请输入指令的页号和单元号:2);if(scanf(”%ld%ld”,&p,&q)!=2){scanf(”%s”,s);if(strcmp(s»,,exit,')==O){stop=1;}}else{if(pagelist[p].flag){printf