虚拟内存的基本概念
前面已经介绍过内存管理相关的重点,传统存储管理方式、覆盖与交换技术、地址转换和存储保护在之前都有介绍过,本节重点介绍虚拟存储技术
传统存储管理方式的特征&缺点
-
一次性:作业必须一次性全部装入内存后才能开始运行
这会造成两个问题:
① 作业很大时,不能全部装入内存,导致大作业无法运行
② 当大量作业要求运行时,由于内存无法容纳所有作业,因此只有少量作业能运行,导致多道程序并发度下降 -
驻留性:一旦作业被装入内存,作业就会一直驻留在内存中,直至作业运行结束
事实上,在一个时间段内,只需要访问作业的一小部分数据即可正常运行,这就导致了内存中会驻留大量的、暂时用不到的数据,浪费了宝贵的内存资源
以上问题都可以使用虚拟存储技术来解决
局部性原理
要真正理解虚拟内存技术的思想,首先须了解著名的局部性原理
从广义上讲,快表、页高速缓存及虚拟内存技术都属于高速缓存技术,这个技术所依赖的原理就是局部性原理
局部性原理表现在以下两个方面:
-
时间局部性
程序中的某条指令一旦执行,不久后该指令可能再次执行
某数据被访问过,不久后该数据可能再次被访问
产生的原因是程序中存在着大量的循环操作 -
空间局部性
一旦程序访问了某个存储单元,在不久后,其附近的存储单元也将被访问即程序在一段时间内所访问的地址,可能集中在一定的范围之内(因为指令通常是顺序存放、顺序执行的,数据也一般是以向量、数组、表等形式簇聚存储的)
时间局部性通过将近来使用的指令和数据保存到高速缓存中,并使用高速缓存的层次结构实现
空间局部性通常使用较大的高速缓存,并将预取机制集成到高速缓存控制逻辑中实现
虚拟内存技术实际上建立了 “内存 —— 外存” 的两级存储器结构,利用局部性原理实现高速缓存
虚拟内存的定义和特征
虚拟内存的定义
基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存就可以让程序开始执行
在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序
若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存
在操作系统的管理下,在用户看来似乎有一个比实际内存大得多的内存,这就是虚拟内存(操作系统虚拟性的一个体现,实际的物理内存大小没有变,只是在逻辑上进行了扩充)
虚拟内存的特征
- 多次性:无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存
- 对换性:在作业运行时无需一直常驻内存,而是允许在作业运行过程中,将作业换入、换出
- 虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于实际的容量
虚拟内存技术的实现
虚拟内存技术允许将一个作业分多次调入内存。采用连续分配方式时,会使相当一部分内存空间都处于暂时或 "永久” 的空闲状态,造成内存资源的严重浪费,而且也无法从逻辑上扩大内存容量,因此虚拟内存的实现需要建立在离散分配(非连续分配)的内存管理方式的基础上
虚拟内存的实现有以下三种方式:
- 请求分页存储管理
- 请求分段存储管理
- 请求段页式存储管理
传统的非连续性分配存储管理方式和虚拟内存的存储管理方式的主要区别如下:
在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序(操作系统要提供请求调页 (或请求调段) 功能)
若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存 (操作系统要提供页面置换(或段置换)的功能)
【计算机操作系统】 专栏的文章 均有参考 《王道计算机考研 操作系统》 课程视频