1--背景概念
在计算机系统中,当多道程序同时运行时可能会出现内存不足的情况,一般可通过以下技术进行解决:
覆盖技术:
当程序太大超出内存容量时,可以采用手动覆盖的技术,只把需要的指令和数据保存在内存当中;
交换技术:
当程序太大超出内存容量时,可以采用自动交换的技术,把暂时不能执行的程序送到外存中;
虚拟存储技术:
采用自动的虚拟存储技术可以实现在有限容量的内存中,以更小的页粒度为单位来装入更大更多的程序;
2--覆盖和交换技术的缺陷
覆盖技术:
需要程序员自己把整个程序划分为若干个小的功能模块,并确定各个模块之间的覆盖关系,增加了程序员的负担;
交换技术:
以进程作为交换的单位,需要把进程的整个地址空间都换进换出,增加了处理器的开销;
3--虚存技术
虚存技术兼顾覆盖技术和交换技术的特点,即虚存技术不把程序的所有内容都放在内存中,同时虚存技术可以实现进程的部分内容在内存和外存之间进行交换,这一过程由操作系统自动完成,无需程序员的干涉;
虚存技术的实现基于程序的局部性原理:即程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域,具体表现为:
时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短的时期内;
空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近访问的几个数据都集中在一个较小的区域内;
实例说明:
程序 1 将按一列一列的形式进行访问,但由于C语言的数组在实际存储中是按行进行存储的,所以程序 1 这种访问方式在访问每一个数据时,操作系统都会把整行(页)的数据加载到内存中,导致内存负担的加重;
而程序 2 将按一行一行的形式进行访问,访问当个数据时,操作系统只需将本行数据加载到内存即可,待访问下一行的数据时再把下一行的数据加载到内存当中;
因此,程序 2 的设计满足程序的局部性原理,显然对于虚拟内存管理来说是更优的设计;