存储管理
存储管理指的是对内存储器的管理,负责对内存的分配和回收、内存的保护和扩充等,目的是尽量提高内存的使用效率。
文章脉络:
分类
实存:真正的内存空间;虚存:外存中的虚拟内存
重定位
重定位是指,装入程序时,将程序中的逻辑地址转换为物理地址的过程。安装方式,可以分为静态重定位和动态重定位。为什么要重定位?因为程序的逻辑地址一般从0开始,而内存中前面的空间留给系统或其他程序使用,导致了逻辑地址和物理地址不对应的问题,所以进行转换。
静态重定位:虚空间程序执行之前,装配程序完成的地址转换工作。如下,程序转移时,把其中涉及到的逻辑地址全部转换为物理地址,如下所示:
动态重定位:程序装入内存,CPU访问内存之前,进行的地址转换。如下:
因为动态重定位实在CPU访问之前才进行地址转换,所以在内存中2500仍为2500,当CPU提取时,才会进行地址转换。
实存分配
分为以下几种方式
单一连续分配:把整个用户可用内存区当做一个块使用,很明显,这样只能执行单用户单程序模式。
固定分区分配:把用户可用内存区分成几个不等的块,一旦分配即固定不变。
可变分区分配:分成几个大小不等的块,但是可以随着程序执行完毕对内存进行回收和合并。可变分区有四种算法:
首次适应法:从主存地址值开始查找,找到第一块可用的自由区,并把剩余的部分进行合并。这种方法的优点是可以快速分配,缩小查找时间。
最佳适应法:选择内存中等于或最接近需求大小的内存自由区。这种方法的优点是可以减少内存碎片,但是由于最接近需求所用的内存区域,容易剩余小得无法再用的碎片。
最差适应法:选择内存中最大的自由区使用。
循环首次适应算法:是首次适应法的变型,它的特点是每次都是向下查找,而不是从头开始。
随着进程的执行,剩余的区域变得越来越小,怎么解决?可以用合并自由区域和存储拼接技术。合并自由区指的是,将相邻自由存储区合并为单一自由区的方法;存储拼接技术也叫碎片收集,包括移动存储器等,把所有占用的区域放到主存的一端,依此来解决碎片浪费问题。
每种算法都有各自的优缺点,根据实际情况选择使用。
虚存管理
为什么会有虚存?因为虚存可以扩大内存的使用范围,让原本内存不可运行的大程序,经过虚存管理变成可行。虚存管理方式分为以下三种方式:
页式存储组织
这种方式是将用户程序分为若干个大小相等的页,将内存分为若干个段,让后把这些也和段分别对应起来,盛放对应关系的容器,称之为页表,如下所示:
段式存储组织
从用户的角度出发,何为从用户的角度出发?即按照意义将程序分段,比如按主程序、子程序、逻辑分段,段的大小不等,且段的大小大于页的大小。
段页式存储
结合了页式存储组织和段式存储组织的优势,根据程序模块分段,段内再分页,内存被分为定长的页,段也是存储虽然提高了内存空间的利用率,但是增加了段表和页表的开销:
页面置换算法
如果页面被频繁地装入和调出,成为“抖动”,应尽量减少抖动,常用的算法有以下几种:
- 最优算法:选择不再使用或很久以后才使用的页。的确最优,但是难以实现。
- 随机算法:随机选择被淘汰的页,开销小,但是可能刚选中就要访问。
- 先进先出算法:选择在内存驻留时间最长的页,但也可能淘汰掉频繁使用的页。
- 最近最少使用算法:选择离当前时间使用最少的页。
还有其它算法,不管算法是什么,都围绕这一个主题:合理减少页面的淘汰和调入。
存储管理的对象是内存,围绕着内存管理、分配、优化等中心,让尽量少的资源完成尽量多的任务,存储管理先说到这里。