文档详情

《操作系统》实验三 存储管理.doc

发布:2019-09-06约2.98千字共6页下载文档
文本预览下载声明
实验三 存贮器管理 一、实验目的 本课题实习的目的用高级语言编写一个程序,模拟实现分页式虚拟存储管理,并对几种常用的页面调度算法(、LRU、FIFO OPT等)进行分析比较,评测其性能优劣,从而加深对虚拟存储管理以及各种调度算法的了解。 二、实验要求 采用一些常用的存贮器分配算法,设计一个存贮器管理模拟系统并调试运行。模拟环境应尽量接近真实。 三、实验内容 问题描述 ⑴通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成: ①一半的指令是顺序执行的; ②四分之一的指令是均匀分布在前地址部分; ③四分之一的指令是均匀分布在后地址部分。 具体的实施办法是: ①在[0,319]之间选一起点m; ②顺序执行一条指令,即m+1条; ③向前地址[0,m—1]中执行一条指令m′; ④顺序执行一条指令,即m′+1条; ⑤向后地址(m′+2,319)执行一条指令m’’ ⑵将指令序列变换成为页地址流。 假设: ①页面大小为1KB; ②用户实存容量为4页到32页; ③用户虚存容量为32KB。 用户虚存容量32KB,每1KB中放10条指令,共320条指令(0∽319)。其中0∽9为0页,10∽19为1页…310∽319为31页。 ⑶使用不同的页面调度算法处理缺页中断,并计算不同实存容量下(4∽32KB)的命中率。 ①先进先出算法(FIFO); ②最近最少使用算法(LRU); ③最佳淘汰算法(OPT);先淘汰最不常用的页地址; ④最少访问页面算法(LFU)。 命中率的算法为: 命中率=缺页中断次数/页地址流长度 2、数据结构 int vmsize /*虚存容量,为32k*/ int pagesize /*页面尺寸,大小为1k到32k*/ int pageassigned /*实存容量,大小从4页到32页*/ 3、思路 关于随机数的产生办法。首先要初始化设置随机数,产生序列的开始点,例如,通过下列语句实现: rand(400) ⑴计算随机数,产生320条指令序列 m=160 for(i=0;i80;i++) { j=i*4; a[j]=m; a[j+1]=m+1; a[j+2]=a[j]*1.0*rand( )/32767; a[j+3]=a[j+2]+1; m=a[j+3]+(319-a[j+3]*1.0*rand( )/32767; } ⑵将指令序列变换成为页地址流 for (k=0;k320;k++) {pt=a[k]/10; … } ⑶计算不同算法的命中率 rate=1—1.0*U/320; 其中U为缺页中断次数,320是页地址流长度。 ⑷输出格式 k fifo lru 4 0.23 0.25 … … … 32 1.0 1.0 4、算法及框图 (1)先进先出算法(FIFO) 先进先出算法的出发点是先进内存者先被淘汰,即选择在内存中驻留时间最长的一页淘汰之。理由是,最早调入的页在近期不再被使用的可能性要大于最近调入的页。实现这种算法的基本方法是,为调入的每一页以递增方式标明调入次序,淘汰时选择次序值最小的那一页,或者建立一个先进先出队列,总是淘汰队首的那一页。 (2)最近最久未使用淘汰算法(Least Recently Used) 这是一种经常使用的有效算法,淘汰最近一段对间内最久未被访问的页面。它是根据程序执行时所具有局部属性(时间局部性属性)来考虑的,其思想是刚被访问过的页面,常常马上又要被访问,而那些在较长时间里未被使用的页面,一般来说可能不会马上被访问。 这种算法实现起来较困难,实际应用中往往采用LRU近似算法。如采用不断调整页表链的方法,即总是淘汰页表链链首的页,而把新访问的页插入链尾。若当前调用页已在页表内,则把它再次调整到链尾。这样就能保证最近使用的页总是靠近链尾部分,而不常使用的页就移到链尾,逐个被淘汰,页表较大时,调整页表链的代价也是不小的。 (3)算法总体框图(见后图3.1) 图3.2 FIFO与LRU算法框图 图3.2 FIFO与LRU算法框图 (4)FIFO算法与LRU算法框图 四、存储管理示例 1.问题描述 该模拟系统的外部特性与真实系统基本一样。存贮分配算法采用首次适应法。用拼接和搬家技术来处理存贮器碎片。 2.数据结构 (1)自由链与区头。内存空区采用自由链结构。链首由指针freep指向,链中各空区按地址递增次序排列。初启时整个用户内存区为一个大空区。在每个空区首部设置一个区头(freearea)结构。区头信息包括: size 空区大小(以字节计),包括区头所占空间 next 前向链指针,指向下一个空区 back 反向链指针,指向上一个空区 address 本空区首地址。 (2)内存分配表MAT。 系统设置一个MAT,每个运行作业都在MAT中
显示全部
相似文档