目录
4.6.1 虚拟存储器的引入
1、常规存储器管理方式的特征
2、内存的扩充方法
4.6.2 局部性原理
4.6.3 虚拟存储器的定义
1、虚拟存储器的基本工作情况
2、虚拟存储器的定义
3、虚拟存储器的实现方法
4.6.4 虚拟存储器的特征
基本分页和基本分段不能解决的问题:
- 一个程序要求的存储容量可能超过整个内存空间
- 有大量的作业需要装入内存运行而内存空间不足
解决方案:
- 从物理上增加内存容量:但这会增加系统成本,并且增加是有限的
- 从逻辑上增加内存容量:这正是虚拟存储技术所要解决的主要问题
4.6.1 虚拟存储器的引入
1、常规存储器管理方式的特征
(1) 一次性:要求将一个作业全部装入内存才能运行。
- 无法运行大作业
- 限制了作业并发执行的程度
(2) 驻留性:作业装入后一直驻留内存直到作业完成。
- 导致内存中存在已无用的或暂时不用的程序或数据,浪费内存空间
一次性和驻留性严重降低了内存利用率和系统吞吐量。
2、内存的扩充方法
(1) 物理扩充:增加硬件投入,受机器自身和成本的限制。
(2) 逻辑扩充:
- 覆盖 (overlay):应用程序手动把需要的指令和数据保存在内存中
- 对换 (swapping):操作系统自动把暂时不能执行的程序保存到外存中
- 虚拟存储:在有限容量的内存中,自动装入更多的或更大的程序
覆盖解决了一次性问题,对换解决了驻留性问题。
4.6.2 局部性原理
程序执行的局部性原理:在一较短的时间内,程序的执行仅局限于某个部分,相应地,它所访问的存储空间也局限于某个区域。
只要保证进程执行所需的部分程序和数据驻留在内存,一段时间内进程都能顺利执行。
局限性又表现在下述两个方面:
(1) 时间局限性
如果程序中的某条指令一旦执行,则不久以后该指令可能再次执行;如果某数据被访问过, 则不久以后该数据可能再次被访问。产生时间局限性的典型原因是在程序中存在着大量的循环操作。
(2) 空间局限性
一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问。即程序在一段时间内所访问的地址可能集中在一定的范围之内,其典型情况便是程序的顺序执行。
不同程序编写方法的局部性特征
例:页面大小为 4K,分配给每个进程的物理页面数为 1 。在一个进程中,定义了如下的二维数组int A[1024][1024],该数组按行存放在内存中,每一行存放在一个页面中。
// 程序编写方法1
for (j = 0; j < 1024; j++)
for (i = 0; i < 1024; i++)
A[i][j] = 0;
// 程序编写方法2
for (i = 0; i < 1024; i++)
for (j = 0; j < 1024; j++)
A[i][j] = 0;
程序编写方法 1 以列为单位扫描数组,将会频繁发出缺页中断,共 1024×1024 次;程序编写方法 2 以行为单位扫描数组,将会发出缺页中断,共 1024 次。
4.6.3 虚拟存储器的定义
- 当进程运行时,先将当前要运行的部分程序装入内存,其它部分暂留外存;
- 当要执行的指令不在内存时,处理器发出中断,通知操作系统将所缺部分从外存调入内存,保证程序继续执行;
- 当内存不足时,允许程序部分换入、换出。
1、虚拟存储器的基本工作情况
(1) 基于程序执行的局部性原理。一个作业运行前,仅将那些当前要运行的页面(段)装入内存启动运行,其它部分暂留外存。
(2) 若运行所需的页面(段)不在内存,则利用 请求调页(段)功能将其调入内存。
(3) 若此时内存满,则利用置换功能,将内存中暂时不用的部分页面(段)调至外存,再将所需页面(段)调入。
(4) 这样,可实现大程序在小内存中运行,也可实现内存中同时装入更多的进程并发执行。
典型过程:
2、虚拟存储器的定义
虚拟存储器:具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
- 其逻辑容量由内存容量和外存容量之和所决定
- 其运行速度接近于内存速度,而成本却又接近于外存
虚拟存储器容量的讨论
虚拟存储器虽然给用户提供了特大地址空间,但其容量不是无限大,主要受两个方面的限制:
- 外存对换区的容量
- 指令中表示地址的字长
如:若 CPU 的有效地址长度为 32 位,则可以表示的地址最大空间为 2^32,逻辑空间大小为 4G,即虚存容量为 4GB 。与物理空间的大小无直接关系。
3、虚拟存储器的实现方法
(1) 请求分页系统
它是在纯分页系统的基础上增加了 请求调页、页面置换 两大功能所形成的页式虚拟存储系统。
为了实现请求调页、页面置换两大功能,系统必须提供如下的硬件支持:
- 请求分页的页表机制
- 缺页中断机构
- 地址变换机构
除了硬件之外,请求调页、页面置换两大功能还需得到 OS 的支持。
(2) 请求分段系统
它是在纯分段系统的基础上增加了 请求调段、分段置换 两大功能所形成的段式虚拟存储系统。
为了实现请求调段、分段置换两大功能,系统必须提供如下的硬件支持:
- 请求分段的段表机制
- 缺段中断机构
- 地址变换机构
除了硬件之外,请求调段、分段置换两大功能还需得到 OS 的支持。
(3) 段页式虚拟系统
它是在段页式系统的基础上增加了 请求调页、页面置换 两大功能所形成的段页式虚拟存储系统。
如:Intel 80386 处理机便支持段页式虚拟存储系统。
4.6.4 虚拟存储器的特征
虚拟存储器具有以下主要特征:
- 多次性:是指一个作业被分成多次调入内存运行。
- 对换性:是指在作业运行过程中进行换进、换出,从而有效提高内存利用率。
- 虚拟性:是指能够从逻辑上扩充内存容量,使用户所见内存容量远大于实际内存容量。
虚拟性是以多次性和对换性为基础的,而多次性和对换性又必须建立在离散分配的基础上。
虚拟存储的典型问题:抖动(thrashing)
当进程要求装入新的页面或段时,如果当前内存没有足够的空闲空间,则需要交换一些页面或段到外存去。如果被交换出去的页面或段很快将被进程使用,则又需要将其换入内存。
抖动:系统花费大量的时间把程序和数据频繁地换入和换出内存而不是执行用户指令。
出现抖动现象时,系统显得非常繁忙,但是吞吐量很低,甚至产出为零。
根本原因:选择的页面或段不恰当。