【传统存储管理的问题】
对于传统存储器的存储管理方式来说,其具有一次性、驻留性两个特点
所谓一次性,是指将一个作业全部装入内存后才能运行,于是会出现下述的两种情况:
- 有的作业很大,其要求的内存空间超过了内存总容量,作业不能全部装入内存,使得该作业无法运行
- 当大量作业要求运行,但由于内存容量不足以容纳所有这些作业,只能将少数作业装入内存先运行,将其他大量的作业留在外存等待
而驻留性,是指一旦一个作业被装入内存,其会一直驻留在内存中,直到作业结束,而一段时间内,仅需访问一小部分的数据即可正常运行,而内存中驻留着大量暂时用不到的数据,十分浪费内存资源
传统存储器的存储管理方式出现的问题,都是由于内存容量不够大,一种解决方案是从物理上扩充内存容量,但这种方法无疑增加了系统成本;另一种解决方法是从逻辑上扩充内存容量,即虚拟存储技术要解决的主要问题
【局部性原理】
由于一次性与驻留性,使得许多在程序运行中不用或暂时不用的程序或数据占据了大量的内存空间,但实际上,程序在执行时呈现局部性规律
- 程序执行时,多数情况下是顺序执行
- 少部分的转移和过程调用指令,会使程序执行由一部分区域转至另一部分区域,但调用深度多数情况下不超过 5 次,这就说明程序会在一定时间内,都局限在这些过程的范围内运行
- 程序中存在许多由少数指令构成的循环结构,循环结构会被执行多次
- 对数据结构的处理往往局限于很小的范围内
上述所有的情况都表现出了程序执行的局部性:
- 时间局限性:被引用过一次的存储器位置很可能在不远的将来再被多次引用,典型情况是程序中存在着大量循环
- 空间局限性:如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置,典型情况是程序的顺序执行
【虚拟存储器】
特征
虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统
对于虚拟存储器来说,其具备以下三个特征:
- 多次性:一个作业被分成多次调入内存运行
- 对换性:允许在作业的运行过程中进行换进、换出
- 虚拟性:能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量
在虚拟存储管理下,内存逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,每位的成本却接近于外存
工作原理
基于局部性原理,程序运行前,不需全部装入内存,仅装入当前要运行的部分页面或段即可,其余部分暂留在外存上
在程序运行时,如果要访问的页或段已调入内存,便可继续执行下去
如果要访问的页或段尚未调入内存(缺页/缺段) ,会发出缺页/缺段中断请求,程序利用 OS 所提供的请求调页/调段功能,将它们调入内存,使程序继续执行
在调入需要的页或段时,如果内存已满,无法再装入新页/新段,那么会通过置换功能将内存中暂时不用的页或段调至外存,腾出足够的内存空间
实现
虚拟存储管理允许将一个作业分多次调入内存,离散分配方式是其基础,目前所有的虚拟存储器都是采用下述两种方法之一实现的:
- 请求分页系统:在分页系统的基础上,增加了请求调页功能和页面置换功能
- 请求分段系统:在分段系统的基础上,增加了请求调段功能和分段置换功能