1、第 3 章 存储管理3.1 存储管理的功能及目的是什么?答:在多道程序环境中,存储管理的主要目的有两个:一是提高资源的利用率,尽量满足多个用户对内存的要求;二是能方便用户使用内存,使用户不必考虑作业具体放在内存哪块区域,是如何实现正确运行等复杂问题。为此,存储管理一般应能实现如下所述的基本功能: 按作业要求进行内存分配并进行适时回收。 实现程序中的逻辑地址到物理地址的转换。 对操作系统及用户信息提供存储保护。 实现内存的逻辑扩充,提供给用户更大的存储空间。3.2 什么是物理地址?什么是逻辑地址?答:内存是由若干个存储单元组成的,每个存储单元有一个编号,这种编号可惟一标识一个存储单元,称为内存地
2、址(或物理地址) 。源程序经过汇编或编译后,形成目标程序,每个目标程序都是以 0 为基址顺序进行编址的,原来用符号名访问的单元用具体的数据单元号取代。这样生成的目标程序占据一定的地址空间,称为作业的逻辑地址空间,简称逻辑空间。在逻辑空间中每条指令的地址和指令中要访问的操作数地址统称为逻辑地址。3.3 什么是地址重定位?为什么要进行地址重定位?答:为了实现静态或动态存储分配策略,必须考虑地址的重定位问题。我们把用户程序装入内存时,对有关指令的逻辑地址部分的修改称为地址重定位,即地址重定位是建立用户程序的逻辑地址与物理地址之间的对应关系。按实现地址重定位的时机不同,地址重定位又分为两种:静态地址重
3、定位和动态地址重定位。3.4 什么是动态地址重定位?试举例说明实现动态地址重定位的过程。答:动态地址重定位是在程序执行期间进行的。一般说来,这种转换由专门的硬件机构来完成,通常采用一个重定位寄存器,在每次进行存储访问时,对取出的逻辑地址加上重定位寄存器的内容,形成正确的物理地址,重定位寄存器的内容是程序装入内存的起始地址。举例说明略。3.5 什么是存储保护?举例说明常用的硬件存储保护措施是如何实现的?答:在多道程序设计环境中,要保证各道程序只能在自己的存储区中活动,不能对别的程序产生干扰和破坏,尤其是不能破坏操作系统的内存区。因此,必须对存储信息采取各种保护措施,这也是存储管理的一个重要功能。
4、存储信息的保护体现在不能越界访问,破坏操作系统或其他用户的程序。实现这种存储保护,可以采用硬件的方法,也可采用软、硬件结合的方法。举例说明略。3.6 实存管理和虚拟存储器管理方案的区别在哪里?常用的实存管理方案有哪些?答:虚拟存储技术的基本思想是把有限的内存空间与大容量的外存统一管理起来,构成一个远大于实际内存的、虚拟的存储器。此时,外存是作为内存的逻辑延伸,用户并不会感觉到内、外存的区别,即把两级存储器当作一级存储器来看待。一个作业运行时,其全部信息装入虚存,实际上可能只有当前运行所必需的一部分信息存入内存,其它则存于外存,当所访问的信息不在内存时,系统自动将其从外存调入内存。当然,内存中暂
5、时不用的信息也可调至外存,以腾出内存空间供其它作业使用。这些操作都由存储管理系统自动实现,不需用户干预。对用户而言,只感觉到系统提供了一个大容量的内存,但这样大容量的内存实际上并不存在,是一种虚拟的存储器,因此把具有这种功能的存储管理技术称为虚拟存储管理。实现虚拟存储管理的方法有请求页式存储管理和请求段式存储管理。常用的实存管理方案有连续存储管理、分页式存储管理、分段式存储管理、段页式存储管理。3.7 可变式分区存储管理常用的分配算法有哪几种?比较它们的优缺点。答:可变式分区存储管理,可采用最佳适应算法、首次适应算法和最差适应算法。最佳适应算法,理论上看起来比较完美,但每次分配时总产生极小的空
6、闲分区,经过一段时间运行,内存中可能有多个这样的小分区,因太小而无法分配给其它作业使用。这些无法使用的小分区,我们称之为外部碎片,外部碎片的增多会降低空闲区链表的查找速度。为此,人们又在此算法中设定一个参数 G,当从一个分区中,分配 Xk 给某作业后,剩余部分小于 G 时,就把整个分区分配给该作业,不再划分成两部分。采用最佳适应法的另一个问题是,回收一个分区时,为了把它插入到空闲区链表的合适位置,也是比较费时的。最差适应算法的优点是查询简单,而且每次分配的总是最大的空闲区,除用户使用的外,剩余的空闲区还可能相当大,还能装入较大的程序,但缺点也在于此,每次总从最大的空闲分区分配,当有大的作业到来
7、时,其存储分配申请往往得不到满足。首次适应算法的优点是分配和回收算法都比较简单,查找速度快,因这个算法总是从低地址开始查找,因此留在高地址部分的大空闲区被划分机会少,在大作业到来时容易满足。这三种算法,各有利弊。到底哪一种好,不能一概而论,应针对具体的作业序列来分析。如果对于某一作业序列来说,某种算法能将该作业序列中的所有作业安置完毕,那么我们就认为该算法对这一作业序列而言是合适的。3.8 假设某系统内存共 256kb,其中操作系统占用低址 20 kb ,有这样一个作业序列:作业 1(80kb) ,作业 2(16kb) ,作业 3(140kb) ,连续进入系统,经过一段时间运行,作业 1、3
8、先后完成。此时,作业 4(120kb) ,作业 5(80kb)要求进入系统,分别采用首次适应算法和最佳适应算法,处理上述作业序列,完成下列要求: 画出作业 1、2、3 进入内存后,内存的分配情况。 画出作业 1、3 完成后,内存分配情况。 画出两种算法中空白区的链接情况。 哪种算法该对作业序列而言是合适的?答:(1)操作系统(20K)作业 1(80K)作业 2(16K)作业3(140K)(2)操作系统(20K)作业 1(80K)作业 2(16K)作业3(140K)(3) 画出两种算法的空闲区链接情况首次适应算法(FF):最佳适应算法(BF):(4) 首次适应算法(FF)更好3.9 什么是内部碎
9、片?什么是外部碎片?如何克服外部碎片问题?假设某作业为 3.5k 大小,在逻辑地址 1000 号单元处有指令 Mov R1,3000,3000 号单元有数据 5678。采用分页式存储管理,页面大小为 1k 字节,该作业进入内存后,其页面0,1,2,3 被分配到内存的 2、4、6、7 块中,完成下列要求: 画出该作业的页表 画出当执行指令 Mov R1,3000时,如何进行地址重定位,将逻辑地址 3000号单元处数据 5678 送入 R1 寄存器。答:(1)画出该作业的页表页面号 块号0 21 42 63 7(2)画出当执行指令 MOV R1,3000 时,如何进行地址重地位,将逻辑地址 300
10、0 号单元处数据 5678 送入 R1 寄存器。法 1:000010 1110111000 内存作业 2Mov R1,3000 P=21BB8H 56785678页号 块号分页式存储管理地址重定位实现过程(3000)D=( 00010 1110111000)B所以:页号=(00010)B=(2)D 查页表得 :块号=(6)D=(000110)B页内地址=(1110111000)B=块内地址所以:内存地址为:(000110 1110111000)B=( 1 B B 8 )H法 2:3000/1024=2所以:页号=2 查页表得 :块号=6页内地址=3000-1024*2=952所以:内存地址为:
11、(7096)D 3.10 什么是联想存储器?为什么用联想存储器可有效提高动态地址转换速度?答:为了提高查表的速度,人们在分页地址变换机构中,加入一组高速缓冲存储器,用来存放当前作业的最常用的页号和与之相应的物理块号。一般称这样的寄存器组为快表或联想存储器。当处理机给出逻辑地址(p,w )时,分页机构一方面取出页号 p,并根据p 从页表中查找相应的内存块号 b;另一方面自动把页号 p 送入联想存储器,并和联想存储器各单元进行比 较 , 如 与 某 单 元 页 号 相 符 , 则 输 出 对 应 块 号 b, 并 与 页 内 地 址 w 形 成 物 理 地址 进 行 访 问 , 同 时 停 止 前
12、 面 查 找 页 表 的 工 作 。 由 于 联 想 存 储 器 采 用 的 是 高 速 缓 存 , 其 访 问 速度 比 访 问 页 表 要 快 得 多 。 如 果 在 联 想 存 储 器 中 查 不 到 , 仍 继 续 在 页 表 中 查 找 , 并 把 查 找 到 的页 号 p 和 块 号 b 放 到 联 想 存 储 器 的 空 闲 单 元 中 , 以 备 下 次 使 用 。 如 无 空 闲 单 元 , 则 通 常 把 最先 装 入 的 那 个 页 号 淘 汰 , 以 腾 出 位 置 。 应 用 联 想 存 储 器 和 页 表 相 结 合 的 方 式 , 可 有 效 地 提 高系 统 动
13、 态 地 址 转 换 的 速 度 , 是 一 种 行 之 有 效 的 方 法 。3.11 什么是虚拟存储器?使用虚拟存储器有什么好处?答 : 虚拟存储技术的基本思想是把有限的内存空间与大容量的外存统一管理起来,构1k2k3k4k-10 21 42 6001010 1110111000W=3B8H页表始址寄存器页号 p 页内地址 wa 块号 b 块内地址 w成一个远大于实际内存的、虚拟的存储器。此时,外存是作为内存的逻辑延伸,用户并不会感觉到内、外存的区别,即把两级存储器当作一级存储器来看待。一个作业运行时,其全部信息装入虚存,实际上可能只有当前运行所必需的一部分信息存入内存,其它则存于外存,当
14、所访问的信息不在内存时,系统自动将其从外存调入内存。当然,内存中暂时不用的信息也可调至外存,以腾出内存空间供其它作业使用。这些操作都由存储管理系统自动实现,不需用户干预。对用户而言,只感觉到系统提供了一个大容量的内存,但这样大容量的内存实际上并不存在,是一种虚拟的存储器,因此把具有这种功能的存储管理技术称为虚拟存储管理。实现虚拟存储管理的方法有请求页式存储管理和请求段式存储管理。3.12 画图说明请求页式存储管理系统中动态地址重定位及缺页中断的处理过程。答 : 处 理 过 程 如 下 图 所 示3.13 请求页式存储管理系统中有哪几种常见的页面置换算法?答 : 最优算法(OPT 算法) 、先进
15、先出算法( FIFO 算法) 、最近最久未使用算法(LRU算法) 、LRU 近似算法。3.14 在一个请求页式存储管理系统中,一个程序的页面走向是:6,5,4,3,2,1,5,4,3,6,5,4,3,2,1,6,5请分别采用 FIFO 算法和 LRU 算法,求出在作业分得的内存块数分别为 M=4 和 M=5 时,缺页中断次数和缺页率各为多少?答:调整页表及其相应链表N启动一条指令由硬件把逻辑地址分成页号 p 和页内地址 w该页在主存吗?保留现场有空白存储块吗?由辅存地址读入所需页面调整页表及其相应链表恢复现场访问存储器完成该指令取下一条指令选择一页置换掉该页修改过吗?把该页写回辅存YN (引起
16、缺页中断)YYN硬件软件请求式分页存储管理缺页中断处理过程示意图M=4 FIFO缺页中断次数:9缺页中断率:9/17M=4 LRU6 5 4 3 2 1 5 4 3 6 5,4,3,2 1 6 56 6 6 6 2 2 2 2 3 3 3 3 3 55 5 5 5 1 1 1 1 6 2 2 2 24 4 4 4 5 5 5 5 4 4 6 63 3 3 3 4 4 4 5 1 1 1缺页中断次数:10缺页中断率:10/17M=5 FIFO6 5 4 3 2 1 5,4,3,6 5 4 3 2 1 6 56 6 6 6 6 1 1 1 1 1 2 2 2 25 5 5 5 5 6 6 6 6
17、6 1 1 14 4 4 4 4 5 5 5 5 5 6 63 3 3 3 3 4 4 4 4 4 52 2 2 2 2 3 3 3 3 3缺页中断次数:9缺页中断率:9/17M=5 LRU6 5 4 3 2 1 5,4,3,6 5,4,3,2 1 6 56 6 6 6 6 1 1 2 2 2 25 5 5 5 5 5 5 5 6 64 4 4 4 4 4 4 4 53 3 3 3 3 3 3 32 2 6 6 1 1 1缺页中断次数:6缺页中断率:6/173.15 请求页式和请求段式存储管理的地址变换过程有什么区别?答:请求页式和请求段式存储管理的动态地址变换过程有许多相似之处,但两者有着本
18、质上的区别。主要表现在以下几点:6 5 4 3 2 1 5 4 3 6 5,4,3,2 1 6,56 6 6 6 2 2 2 2 3 3 3 3 55 5 5 5 1 1 1 1 6 6 6 64 4 4 4 5 5 5 5 2 2 23 3 3 3 4 4 4 4 1 1 请求分页存储管理的作业地址空间是一个单一的线性地址空间;而分段存储管理的作业地址空间是二维的地址空间。 请求分页存储管理中,页的大小是固定的,对于分页活动,用户是不可见的;分段存储管理中,段的大小是不定的,是信息的逻辑单位,用户是可见的。 请求分页存储管理中,把程序地址分成页号 p 和页内位移量 w 是硬件完成的功能;分段
19、存储管理中,把程序地址分成段号 s 和段内偏移量 d 是软件的功能。3.16 请求段式存储管理有哪些优点?答:请求段式存储管理有如下优点: 可提供大容量的虚存:这与请求页式存储管理类似。一个作业运行时,内存只存放较少的段。在作业执行过程中,需要使用某段时再从外存调入;若此时内存无空间,则需进行段的紧凑或是移出某些段。 允许动态增加段的长度:对于一个较大的段,开始可以装入其中的一部分。当程序员企图向段中增加新的内容或扩大段的长度时,可以动态增加段的长度。因为段表中有一个增补位,当访问的地址大于段长时便产生越界中断,此时检查增补位,若为 1,则可增加段长度,可通过紧凑或移去一些段的办法来实现。 利
20、用允许动态增长段的特性,容易处理变化的数据结构,比如表格和数据段等。 便于段的动态链接:一个作业可能由若干个程序段组成,在采用单一线性地址空间时,这些程序段要在执行之前完成链接和装配工作,产生出一个完整的连续空间。 这称之为静态链接。这种工作不仅费时,有时甚至是徒劳的,因为在作业运行过程中,有的程序模块根本未被调用和执行过。为此,最好是在需要调用某程序段时,再把它链接到作业空间中,这就是所谓动态链接。 由于请求段式存储管理为用户提供的是二维地址空间,每个程序模块构成独立的分段,有自己的名字,这为实现动态链接提供了基础。 便于实现程序段的共享:进入内存中的程序段占据内存中的一个连续存储区。若多个
21、作业要共享它,只需在它们各自的段表中填入该段的起始地址,设置上适当的存取权限即可。 便于实现存储保护:在段表中规定了段的存取权限和段的长度,超出段长引起越界中断,违反存取权限引起存储保护中断,通过这种方法能防止一个用户作业侵犯另一用户作业,也可以防止对共享程序的破坏。3.17 什么是抖动现象?它有什么危害?答:当发生缺页中断时,如果内存已无空闲块,就要把已在内存的一些页面置换出去。所谓页面置换算法,就是采取什么办法淘汰掉内存中的某些页为必须进入内存的页面腾出空间的策略。这一直是人们十分重视的一个问题,因为页面置换算法的优劣直接影响到系统效率。如果置换算法不当,就有可能出现某些页刚被置换出去又要
22、马上访问的情况,因而又要将其调回,而调回后不久又要被置换出去,这样不断反复,以致使处理机的大部分时间都消耗在频繁的页面置换上,结果使系统性能急剧下降。我们把这种现象称为系统抖动。尽量减少和排除抖动现象的发生,是人们一直追求的目标。3.18 什么是程序的局部性原理?答:所谓程序的局部性原理,是指在一段时间内,程序执行过程中往往是集中地访问某一部分内存区域中的指令或数据。3.19 什么是工作集?答:所谓工作集,就是程序在某一小段时间内所访问的不同页面的集合。如果用W(t,t)表示从(t- t)开始到 t 之间所访问的页面集合,那么 W 就是作业在时间 t 上的工作集。工作集是对程序局部的一个近似模拟,如果我们能找出一个作业的各个工作集,并求出其页面数最大者,就可确定该作业所需内存量,