《请求页式存储管理程序说明》由会员分享,可在线阅读,更多相关《请求页式存储管理程序说明(6页珍藏版)》请在金锄头文库上搜索。
1、By 张焕人请求页式存储管理 1. 设计要求设计一个请求页式存储管理方案。并编写模拟程序实现之。页面淘汰算法采用 FIFO 页面淘汰算法,并且在淘汰一页时,只将该页在页表中抹去。而不再判断它是否被改写过,也不将它写回到辅存。方案提示: 1、产生一个需要访问的指令地址流,它是一系列需要访问的指令的地址。为不失一般性,你可以适当地(用人工指定地方法或用随机数产生器)生成这个序列,使得 50的指令是顺序执行的。25的指令均匀地散布在前地址部分,25的地址是均匀地散布在后地址部分。2、指定合适的页面尺寸(例如以 1K 或 2K 为 1 页); 3、指定内存页表的最大长度,并对页表进行初始化; 4、每访
2、问一个地址时,首先要计算该地址所在的页的页号,然后查页表,判断该页是否在主存如果该页已在主存,则打印页表情况;如果该页不在主存且页表未满,则调入一页并打印页表情况;如果该页不足主存且页表已满,则按 FIFO 页面淘汰算法淘汰一页后调入所需的页,打印页表情况; 逐个地址访问,直到所有地址访问完毕。2. 问题分析分页存储管理,是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号。相应地,也把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框(frame),在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中系统为每个进程建立一
3、个页表,页表给出逻辑页号和具体内存块号相应的关系。一个页表中包含若干个表目,表目的自然序号对应于用户程序中的页号,表目中的块号是该页对应的物理块号。请求页式存储管理方式是一种实现虚拟存储器的方式,是指在进程开始运行之前,不是装入全部页面,而是装入一个或零个页面,之后根据进程运行的需要,动态装入其它页面。当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。请求页式存储管理主要需要解决以下问题:系统如何获知进程当前所需页面不在主存;当发现缺页时,如何把所缺页面调入主存;当主存中没有空闲的页框时,为了要接受一个新页,需要把老的一页淘汰出去,根据什么策略选择欲淘汰的页
4、面。本程序中采用先来先服务的淘汰方式。By 张焕人3. 算法与数据结构请求分页存储管理方式当中用到的主要数据结构就是页表项。与普通分页管理存储方式当中的页表项相比,请求分页存储管理方式的页表项要进行相应的补充,共程序在换进、换出内存时参考。具体而言,请求分页存储管理方式的页表项一般包括以下几项:页号、驻留位、内存块号、外存地址、访问位、修改位、(存取控制、辅存地址)。其中,中断位表示该页是在内存还是在外存;访问位表示该页最近被访问过,根据访问位来决定淘汰哪页;修改位用于查看此页是否在内存中被修改过。本程序中采用的页表项数据结构如下(由于以上所述的有些域在程序中用不到,因此进行了相应的简化):t
5、ypedef struct pa /页表项的数据结构int pn; /页号int bn; /物理块号bool s; /状态位int ad; /外存地址 pageitem;另外,为了使用先进先出的页面置换方法,还需要定义一个 FIFO 链表。具体数据结构如下:typedef struct p /页标置换的 FIFO 链表int num; /记录页号struct p *next; flink;By 张焕人4. 程序流程图5. 运行结果演示本程序利用 VC 编写,在 Visual Studio 环境中调试通过。运行程序,将会提示输入指令的逻辑地址,输入之后,程序将按照请求分页存储管理方式来管理内存中
6、的物理块。程序的运行过程及运行结果如下:欢迎使用请求分页存储管理方式模拟程序请输入一个指令地址(00006144): By 张焕人此指令页号为0 此页面已调入内存当前内存中物理块的情况页号 物理块号 状态位 外存地址0 0 1 20000请输入一个指令地址(00006144): 1240此指令页号为1 此页面已调入内存当前内存中物理块的情况页号 物理块号 状态位 外存地址0 0 1 200001 47 1 21024请输入一个指令地址(00006144): 0333此指令页号为0 此页面已在内存中当前内存中物理块的情况页号 物理块号 状态位 外存地址0 0 1 200001 47 1 2102
7、4请输入一个指令地址(00006144): 0431此指令页号为0 此页面已在内存中当前内存中物理块的情况页号 物理块号 状态位 外存地址0 0 1 200001 47 1 21024请输入一个指令地址(00006144): 5146此指令页号为5 此页面已调入内存当前内存中物理块的情况页号 物理块号 状态位 外存地址0 0 1 200001 47 1 210245 235 1 By 张焕人请输入一个指令地址(00006144): 6487请输入一个指令地址(00006144): 5478此指令页号为5 此页面已在内存中当前内存中物理块的情况页号 物理块号 状态位 外存地址0 0 1 2000
8、01 47 1 210245 235 1 25120请输入一个指令地址(00006144): 4234此指令页号为4 此页面已调入内存,页号为0的页面被置换出来当前内存中物理块的情况页号 物理块号 状态位 外存地址1 47 1 210244 188 1 240965 235 1 25120请输入一个指令地址(00006144): 2014此指令页号为1 此页面已在内存中当前内存中物理块的情况页号 物理块号 状态位 外存地址1 47 1 210244 188 1 240965 235 1 25120请输入一个指令地址(00006144): 2654此指令页号为2 此页面已调入内存,页号为1的页面被置换出来当前内存中物理块的情况页号 物理块号 状态位 外存地址2 94 1 220484 188 1 240965 235 1 25120请输入一个指令地址(00006144): By 张焕人此指令页号为3 此页面已调入内存,页号为5的页面被置换出来当前内存中物理块的情况页号 物理块号 状态位 外存地址2 94 1 220483 141 1 230724 188 1 24096请输入一个指令地址(00006144):