一级存贮器
虚存管理系统把大容量的外存作为内存的直接延伸,对内存和外存实施统一的管理,使这两级存贮器变成面向用户的、逻辑上可统 一编址的虚拟内存空间。因此,用户作业的大小可不受实际内存容量的严格限制。从用户角度,系统提供了一个使用方便的、海量的一级存贮器。
作业地址空间概念
一个作业的地址空间就是一个虚拟存贮器,每个作业都处于各自的虚存中,虚存中统一编址。一个虚地址可能被映射成内存地址 ,也可能被映射成外存地址,即一个作业虚存可能被装配成内存空间和外存空间两部分。但这对用户是透明的,用户亦不必关心虚、实地址之间的实际映射。
虚拟并不是无限的,它主要取决于具体机器的CPU地址结构。例如,若CPU的地址结构长度为16位,则虚存空间中可寻址的范围从0到65535,即虚存最大容量为216=64 K;若CPU地址为24位,则虚存最大容量为224=16 M。当然,虚存是不能大于外存容量的。
虚拟存贮管理策略考虑的出发点是基于程序局部性原理——在一段时间内,一 个程序的执行往往呈现出高度的局部性,它对内存的访问是很不均匀的。局部性又表现为时间局部性和空间局部性。
时间局部性
是指一旦某个位置被访问了,那么它往往很快要再次被访问。我们在程序设计中经常使用的循环、子程序、堆栈、计数或累积变量等程序结构都反映了这个特性。
空间局部性
是指一旦某个位置被访问了,那么它附近的位置很可能也要立即被访问。程序代码的顺序执行,对线性数据结构的访问或处理,以及程序中往往把常用变量存放在一起等都反映出该特性。
(1)作业中的某些程序段在作业的整个运行过程中可能根本就不用它。例如出错处理程序仅当数据或计算处理出错时才会用到,而在作业的正常运行情况下,没有必要把它调入内存。
(2)许多表格占用固定数量的内存空间,而事实上只用到其中一部分。
(3)许多程序段是顺序执行的,还有一些程序段是互斥执行的,在一些运行活动中只可能用到其中之一,它们没有必要同时驻留在内存。
(4)在作业的一次运行中,有些程序段执行之后,从某个时刻起不再用到。
一个作业进程在某段时间内只需当前需要的局部实体存在内存便可执行——局部性;
在进程运行过程中,当前暂不使用的或今后不再使用的那部分实体可以换出内存, 若以后需要时再换进内存——交换性;
作业进程所占据的内存空间可不必完全连续,只需局部的或分段连续——离散性。
可见,这是对整体性、驻留性及连续性的否定。需要指出的是,这里的交换性显然是指部分交换,而非整体交换。
局部性、交换性和离散性是虚拟存贮器管理的基本思想,下面是基于这三种思想而提出的三种虚存管理策略:
(1)调入策略
(2)分配策略
(3)淘汰策略
引入虚拟存储技术的好处
可在较小的可用内存中执行较大的用户程序;
可在内存中容纳更多程序并发执行;
不必影响编程时的程序结构(与覆盖技术比较).
提供给用户可用的虚拟内存空间通常大于物理内存(real memory).
虚拟存储技术的特征
物理内存分配的不连续,虚拟地址空间使用的不连续(数据段和栈段之间的空闲空间,共享段和动态链接库占用的空间)
与交换的比较:调入和调出是对部分虚拟地址空间进行
通过物理内存和快速外存相结合,提供大范围的虚拟地址空间
范围大,但占用容量不超过物理内存和外存交换区容量之和
占用容量包括:进程地址空间中的各个段,操作系统代码