收藏 分享(赏)

操作系统课程设计之请求式面页管理.doc

上传人:cjc2202537 文档编号:220211 上传时间:2018-03-24 格式:DOC 页数:21 大小:167KB
下载 相关 举报
操作系统课程设计之请求式面页管理.doc_第1页
第1页 / 共21页
操作系统课程设计之请求式面页管理.doc_第2页
第2页 / 共21页
操作系统课程设计之请求式面页管理.doc_第3页
第3页 / 共21页
操作系统课程设计之请求式面页管理.doc_第4页
第4页 / 共21页
操作系统课程设计之请求式面页管理.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、一、目的与要求1、目的近年来,由于大规模集成电路(LSI)和超大规模集成电路(VLSI)技术的发展,使存储器的容量不断扩大,价格大幅度下降。但从使用角度看,存储器的容量和成本总受到一定的限制。所以,提高存储器的效率始终是操作系统研究的重要课题之一。虚拟存储技术是用来扩大内存容量的一种重要方法。学生应独立地用高级语言编写几个常用的存储分配算法,并设计一个存储管理的模拟程序,对各种算法进行分析比较,评测其性能优劣,从而加深对这些算法的了解。任务三采用最佳淘汰算法(OPT)实现,任务四采用最近最少使用页淘汰算法 (LRU)实现。2、 要求为了比较真实地模拟存储管理,可预先生成一个大致符合实际情况的指

2、令地址流。然后模拟这样一种指令序列的执行来计算和分析各种算法的访问命中率。二、示例1、题目 本示例是采用页式分配存储管理方案,并通过分析计算不同页面淘汰算法情况下的访问命中率来比较各种算法的优劣。另外也考虑到改变页面大小和实际存储器容量对计算结果的影响,从而可为算则好的算法、合适的页面尺寸和实存容量提供依据。本程序是按下述原则生成指令序列的:(1) 50%的指令是顺序执行的。(2) 25%的指令均匀散布在前地址部分。(3) 25%的指令均匀散布在后地址部分。示例中选用最佳淘汰算法(OPT)和最近最少使用页面淘汰算法(LRU)计算页面命中率。公式为 页 地 址 流 长 度页 面 失 效 次 数命

3、 中 率 1假定虚存容量为 32K,页面尺寸从 1K 至 8K,实存容量从 4 页至 32 页。2、 算法与框图(1) 最佳淘汰算法(OPT)。这是一种理想的算法,可用来作为衡量其他算法优劣的依据,在实际系统中是难以实现的,因为它必须先知道指令的全部地址流。由于本示例中已预先生成了全部的指令地址流,故可计算出最佳命中率。该算法的准则是淘汰已满页表中不再访问或是最迟访问的的页。这就要求将页表中的页逐个与后继指令访问的所有页比较,如后继指令不在访问该页,则把此页淘汰,不然得找出后继指令中最迟访问的页面淘汰。可见最佳淘汰算法要花费较长的运算时间。(2) 最近最少使用页淘汰算法(LRU)。这是一种经常

4、使用的方法,有各种不同的实施方案,这里采用的是不断调整页表链的方法,即总是淘汰页表链链首的页,而把新访问的页插入链尾。如果当前调用页已在页表内,则把它再次调整到链尾。这样就能保证最近使用的页,总是处于靠近链尾部分,而不常使用的页就移到链首,逐个被淘汰,在页表较大时,调整页表链的代价也是不小的。(3) 程序框图如下图 2 所示。产生给定长度符合某种假定的指令地址流开始为每一指令地址形成对应的访问页号置初值 : s i z e = 1a s s i g n e d = 4输入淘汰算法 A l gA l g = O P T / L R U ?用最佳淘汰算法计算命中率最近最少使用页面淘汰算法计算命中率

5、输出完整结果O P TL R U结束图 2 计算页面命中率框图3、程序运行结果格式(1) 程序运行结果格式THE VIRTUAL ADDRESS STREAM AS FOLLOWS:a0 =16895 a1=16896 a2=16897 a3=16302a4=25403 a5=13941 a6=13942 a7=8767A252=23583 a253=20265 a254=20266 a255=20267= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =The algorithm

6、 is:optPAGE NUMBER WITH SIZE 1k FOR EACH ADDRESS IS:pageno0=17 pageno1=17 pageno2=17 pageno3=16pageno4=25 pageno5=14 pageno6=14 pageno7=9pageno252=24 pageno253=20 pageno254=20 pageno255=20vmsize=32k pagesize=1k- -page assigned pages_in/total references4 7.031250000000000E-16 7.578125000000000E-18 8.

7、085937500000000E-110 8.554687500000000E-112 8.945312500000000E-114 9.140625000000000E-116 9.140625000000000E-118 9.140625000000000E-120 9.140625000000000E-122 9.140625000000000E-124 9.140625000000000E-126 9.140625000000000E-128 9.140625000000000E-130 9.140625000000000E-132 9.140625000000000E-1PAGE N

8、UMBER WITH SIZE 2k EACH ADDRESS IS:PAGE NUMBER WITH SIZE 4k EACH ADDRESS IS:PAGE NUMBER WITH SIZE 8k EACH ADDRESS IS:End the result for opt* *the algorithm is lru同上End the result for lru*(2)示例中使用的有关数据结构、常量和变量说明如下:length 被调试的指令地址流长度,可作为一个常量设定。called 当前请求的页面号。pagefault 页面失效标志,如当前请求页 called 已在页表内,则置 pa

9、gefault=false,否则为 true。table 页表。tablei=j,表示虚存的第 j 页在实存的第 i 页中。used 当前被占用的实存页面数,可用来判断当前实存中是否有空闲页。(3)本程序启动后,屏幕上显示“the algorithm is:” ,用户可选择最佳淘汰算法(打入“OPT” )或者最近最少使用淘汰算法(打入“LRU”) 计算页面命中率。当然还可以加入各种其他的算法。三、实习题(1) 编制和调试示例给出的请求页式存储管理程序,并使其投入运行。(2) 增加 12 种已学过的淘汰算法,计算它们的页面访问命中率。试用各种算法的命中率加以比较分析。提示:可选用 FIFO 方法

10、,即先访问的页先淘汰,也可选用 LRU 方法中的其他方案。如在页表中设置标志位,按标志位值得变化来淘汰。也可用 LFU 方法,为页表中各页面设置访问计数器,淘汰访问频率最低的页(注意:当前访问的页不能淘汰)等等。实验步骤与源程序#include “iostream“#include “stdio.h“#include “stdlib.h“using namespace std;#define Max 30 /某进程调入内存中的最大页面数#define Size 10 /系统为某进程分配的最大物理块数void Init(int Block,int m)/初始化物理块 int i;for(i=0;

11、iPagei;void Init1(int Block1,int m1) int i;for(i=0;imax_stay) max_stay=timej;block_num=j; /block_num 标记当前序号物理块中页面驻留时间最久if(flag=-1) /不存在相同页面 if(get!=-1) /物理块即将(/等待)驻入新页面Block1get=Pagei; /存入页面timeget=0; /当前物理块重新计时for(j=0;jm1)count=count+m1;coutmax_stay)max_stay=timej;block_num=j;if(flag=-1) if(get!=-1

12、)Blockget=Pagei;timeget=0;for(j=0;jm)count=count+m;coutm;m1=m;Init(Block,m);Init1(Block1,m1);coutn;n1=n;coutt;switch(t)case 1:LRU(Page,Block1,n1,m1); continue;case 2:FIFO(Page,Block,n,m);continue;case 3:exit(0);测试数据与实验结果图 1 输入要分配的物理块数、页面总数、页面序列号图 2 LRU 算法的实现图 3 FIFO 算法的实现4、小结(1) 编制评测各种算法性能的模拟程序是研制系统

13、程序,尤其是操作系统所必须的。模拟的环境愈是真实,其结果愈是可靠,也就更有利于选择合适的方案。本实习虽属简单,但可作为一个尝试。(2) 注意正整数的范围只能从 032767,限制程序中的虚存尺寸为 32K,实际如采用更大的虚存实存,更能说明问题。页面置换算法理解比较容易,这次根据学号要求实现的是 LRU 和 FIFO 算法的实现。其实这两种算法的程序编写比较容易,虽然不全是自己编写的,一部分是参考的网上的例题,但是通过对每一语句的理解,自己弄懂了整个程序的执行原理。但是,在编写过程中自己还是遇到了一些问题。最大的一个问题就是两个算法的正确实现,在程序的编写时,两个程序是分开进行编写的,分别执行

14、起来没有什么问题,但是把两个程序融合在一起后,却出现了问题,即在执行完成一个算法后再执行另外一个算法时,开始的数据是紧接着上次算法结果的数据进行实验的。这个问题困扰了我好长时间,直到现在还没有很好的解决掉,程序只能分别执行一次,如果再进行执行的话,就会出现问题。自己的编程技术不好,程序编的也很繁琐,但是基本的要求已经实现了,希望这次的实验是自己动手的一个开始,自己应该更加努力,再接再厉。四、思考题(1)设计一个界地址存储管理的模拟系统,模拟界地址方式下存储区的分配和回收过程。提示:必须设置一个内存分配表,按照分配表中有关信息实施存储区的分配,并不断根据存储区的分配和回收修改该表。算法有首次匹配

15、法,循环首次匹配法和最佳匹配法等。可用各种方法的比较来充实实习内容。可使用碎片收集和复盖等技术。对分区的管理法可以是下面三种算法之一:首次适应算法循环首次适应算法最佳适应算法#include#include #include#include#include#define n 10 /*假定系统允许的最大作业数为 n,假定模拟实验中 n 值为10*/#define m 10 /*假定系统允许的空闲区表最大为 m,假定模拟实验中 m 值为10*/#define minisize 100 /*空闲分区被分配时,如果分配后剩余的空间小于 minisize,则将该空闲分区全部分配,若大于 minisiz

16、e,则切割分配*/structfloat address; /*已分配分区起始地址*/float length; /*已分配分区长度,单位为字节*/int flag; /*已分配区表登记栏标志,用“0“表示空栏目*/used_tablen; /*已分配区表*/structfloat address; /*空闲区起始地址*/float length; /*空闲区长度,单位为字节*/int flag; /*空闲区表登记栏标志,用“0“表示空栏目,用“1“表示未分配*/free_tablem; /*空闲区表*/void allocate(char J,float xk) /*给 J 作业,采用最佳分

17、配算法分配 xk 大小的空间*/int i,k;float ad;k=-1;for(i=0;i=xkif(k=-1)/*未找到可用空闲区,返回*/printf(“无可用空闲区n“);return;/*找到可用空闲区,开始分配:若空闲区大小与要求分配的空间差小于 minisize 大小,则空闲区全部分配;若空闲区大小与要求分配的空间差大于 minisize 大小,则从空闲区划出一部分分配*/if(free_tablek.length-xk=minisize)free_tablek.flag=0;ad=free_tablek.address;xk=free_tablek.length;elsefree_tablek.length=free_tablek.length-xk;ad=free_tablek.address+free_tablek.length;/*修改已分配区表*/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报