存储管理的主要对象是内存,是除处理器外操作系统管理的最重要的资源,也是历年考核的重点。存储管理部分偏重于虚拟存储、分区存储、地址转换及交换技术等知识。
存储管理主要是指对内存储器的管理,负责对内存的分配和回收、内存的保护和内存的扩充。存储管理的目的是尽量提高内存的使用效率。
在单道程序系统中,内存区域的用户空间全部为一个作业或进程占用。单一连续分配方法主要用于早期单道批处理系统。单一连续分配方法主要采用静态分配方法,为降低成本和减少复杂度,通常不对内存进行保护,因而会引起冲突使系统瘫痪。
分区存储管理包括固定分区、可变分区,其基本思想是把内存划分成若干个连续区域,每个分区装入一个作业运行。要求作业一次性装入内存,且分区内部地址必须连续。
固定分区分配方法是把内存空间固定地划分为若干个大小不等的区域,划分的原则由系统决定。系统使用分区表描述分区情况。分区一旦划分结束,在整个执行过程中每个分区的长度和内存的总分区个数保持不变。
可变分区分配方法是把内存空间按用户要求动态地划分成若干个分区。随着进程的执行,剩余的自由区域会变得更小,这时需要合并自由区和存储拼接技术。合并自由区是将相邻自由存储区合并为单一自由区的方法;存储拼接技术也称碎片收集,包括移动存储器的所有被占用区域到主存的某一端。可变分区克服了固定分区分配方法中的小作业占据大分区后产生碎片的浪费问题。
常使用的4种存储分配算法介绍如下。
● 首次适应算法:把内存中的可用分区单独组成可用分区表或可用分区自由链,按起始地址递增的次序排列。每次按递增次序向后找,一旦找到大于或等于所要求内存长度的分区,则结束探索,从找到的分区中找出所要求的内存长度分配给用户,并把剩余的部分进行合并。
● 循环适应算法:上述首次适应法经常利用的是低地址空间,后面经常是较大的空白区,为使内存所有线性地址空间尽可能轮流使用到,每重新分配一次,都在当前之后寻找。
● 最佳适应算法:最佳适应算法是将输入作业放入主存中与它所需大小最接近的空白区中,使剩下的未用空间最小,该法要求空白区大小按从小到大次序组成空白区可用表或自由链。在进行分配时总是从最小的一个开始查询,因而找到的一个能满足要求的空白区便是最佳的一个。
● 最差适应算法:分配时把一个作业程序放入主存中最不适合它的空白区,即最大的空白区(空闲区)内。
覆盖与交换技术是在多道程序环境下用来扩充内存的两种方法。覆盖技术主要用在早期的操作系统中,而交换技术则在现代操作系统中得到了进一步发展。
覆盖技术是一种解决小内存运行大作业的方法。—个作业中若干程序段和数据段可以不同时使用,这样它们就可以共享内存的某个区域,再根据需要分别调入该区域,这个区域就称为覆盖区。将程序执行时并不要求同时装入主存的覆盖组成一组,并称其为覆盖段,这个覆盖段分配到同一个覆盖区。
交换技术可以将暂不需要的作业移到外存,让出内存空间以调入其他作业,交换到外存的作业也可以被再次调入。交换技术与覆盖技术相比不要求给出程序段之间的覆盖结构。交换主要是在作业之间进行的,而覆盖则主要是在同一个作业内进行的。
分页的基本思想是把程序的逻辑空间和内存的物理空间按照同样的大小划分成若干页面,以页面为单位进行分配。在页式存储管理中,系统中虚地址是一个有序对(页号,位移)。系统为每一个进程建立一个页表,其内容包括进程的逻辑页号与物理页号的对应关系、状态等。
段式存储管理与页式存储管理相似。分段的基本思想是把用户作业按逻辑意义上有完整意义的段来划分,以段为单位作为内、外存交换的空间尺度。一个作业是由若干个具有逻辑意义的段(如主程序、子程序、数据段等)组成的。在分段系统中,容许程序(作业)占据内存中许多分离的分区。每个分区存储一个程序分段。这样,每个作业需要几对界限地址寄存器,判定访问地址是否越界也困难了。在分段存储系统中常常利用存储保护键实现存储保护。分段系统中虚地址是一个有序对(段号,位移)。系统为每个作业建立一个段表,其内容包括段号、段长、内存起始地址和状态等。状态指出这个段是否已调入内存,即内存起始地址指出这个段,状态指出这个段的访问权限。
段页式管理是段式和页式两种管理方法结合的产物,综合了段式组织与页式组织的特点,根据程序模块分段,段内再分页,内存被划分成定长的页。段页式系统中虚地址形式是(段号、页号、位移)。系统为每个进程建立一个段,为每个段建立一个页表。段页式管理采用段式分配、页式使用的方法,便于动态连接和存储的动态分配。这种存储管理能提高内存空间的利用率。段页式虚拟存储管理结合了段式和页式的优点,但增加了设置表格(段表、页表)和查表等开销,段页式虚拟存储器一般只在大型计算机系统中使用。
如果选择的页面被频繁地装入和调出,这种现象称为“抖动”,应减少和避免抖动现象。常用的页面调度算法有以下几种。
● 最优(OPT)算法。选择不再使用或最远的将来才被使用的页,难以实现,常用于淘汰算法的比较。
● 随机(RAND)算法。随机地选择被淘汰的页,开销小,但是可以选中立即就要访问的页。
● 先进先出(First in First out,FIFO)算法,又称轮转法(RR)。选择在内存驻留时间最长的页,似乎合理,但可能淘汰掉频繁使用的页。另外,使用FIFO算法时,在未给予进程分配足够的页面数时,有时会出现给予进程的页面数增多,缺页次数反而增加的异常现象。FIFO算法简单,可采用队列实现。
● 最近最少使用(Least Recently Used缩写为LRU)算法。选择离当前时间最近的一段时间内使用得最少的页。这个算法的主要出发点是,如果某个页被访问了,则它可能马上就要被访问;反之,如果某个页长时间未被访问,则它在最近一段时间也不会被访问。
另外,还有最不经常使用的页面先淘汰(Least Frequent Used,LFU)、最近没有使用的页面先淘汰(NUR)、最优淘汰算法(Optimal Replacement Algorithm,OPT)等。
存储管理方式的比较如表3-1所示。
表3-1 存储管理方式比较表