前言
以下内容源自计算机操作系统(第四版)
关于操作系统,
CSDN有很多的优秀博客。
在这里,
本文摘取其他博客内容,
并附上相关链接,
如有侵权,
联系删除,
仅供学习交流使用
推荐
第五章 虚拟存储器
5.1 虚拟存储器概述
虚拟存储器实现了内存扩充功能。但该功能并非是从物理上实际地扩大内存的容量,而是从逻辑上实现对内存容量的扩充。
第四章所介绍的各种存储器管理方式有一个共同的特点,即它们都要求将一个作业全部装入内存后方能运行。于是,出现了下面这样两种情况:
1)有的作业很大,其所要求的内存空间超过了内存总容量。
2)有大量作业要求运行,但由于内存容量不足以容纳所有这些作业。
都是由于内存容量不够大导致的,一种解决方法是从逻辑上扩充内存容量,这正是虚拟存储技术所要解决的主要问题。
5.1.1 常规存储管理方式的特征和局部性原理
1.常规存储器管理方式的特征
1)一次性。指作业必须一次性地全部装入内存后方能开始运行。
2)驻留性。作业装入内存后,整个作业会一直驻留在内存中,其中任何部分都不会被换出,直至作业运行结束。
一次性及驻留性特征,使许多在程序运行中不用或暂不用的程序(数据)占据了大量的内存空间,使得一些需要运行的作业无法装入运行。
2.局部性原理
程序在执行时将呈现出局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分,相应地,它所访问的存储空间也局限于某个区域。 论点如下:
1)程序执行时,除了少部分的转移和过程调用指令外,在大多数情况下是顺序执行的。
2)过程调用将会使程序的执行轨迹由一部分区域转至另一部分区域。
3)程序中存在许多循环结构,这些虽然只由少数指令构成,但是它们将多次执行。
4)程序中还包括许多对数据结构的处理,如对数组进行操作,它们往往都局限于很小的范围内。
局限性还表现在下述两个方面:
1)时间局限性。如果程序中的某条指令(或数据)一旦被执行(或被访问),则不久以后该指令(或数据)可能再次被执行(或被访问)。产生时间局限性的典型原因是由于在程序中存在着大量的循环操作。
2)空间局限性。程序在一段时间内所访问的地址,可能集中在一定的范围之内,其典型情况便是程序的顺序执行。
3.虚拟存储器的基本工作情况
基于局部性原理可知,应用程序在运行之前,没有必要全部装入内存,仅须将那些当前要运行的少数页面或段先装入内存便可运行,其余部分暂留在盘上。程序在运行时,如果它所要访问的页(段)已调入内存,便可继续执行下去;但如果程序所要访问的页(段)尚未调入
内存(称为缺页或缺段),此时程序应利用 OS 所提供的请求调页(段)功能,将它们调入内存,以使进程能继续执行下去。如果此时内存已满,无法再装入新的页(段),则还须再利用页(段)的置换功能,将内存中暂时不用的页(段)调至盘上,腾出足够的内存空间后,再将要访问的页(段)调入内存,使程序继续执行下去。这样,便可使一个大的用户程序能在较小的内存空间中运行;也可在内存中同时装入更多的进程使它们并发执行。
5.1.2虚拟存储器的定义和特征
1.虚拟存储器的定义
所谓虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本却又接近于外存。
2.虚拟存储器的特征
1)多次性。是指一个作业中的程序和数据无需在作业运行时一次性地全部装入内存,而是允许被分成多次调入内存运行,即只需将当前要运行的那部分程序和数据装入内存即可开始运行。
2)对换性。是指一个作业中的程序和数据,无须在运行时一直常驻内存,而是允许在作业的运行过程中进行换进、换出。
3)虚拟性。是指能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。就可以在小的内存中运行大的作业,或者能提高多道程序度。
虚拟性是以多次性和对换性为基础的,而多次性和对换性是必须建立在离散分配的基础上。
5.1.3虚拟存储器的实现方法
1.分页请求系统
这是在分页系统的基础上,增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统。置换时以页面为单位。
1)硬件支持。
①请求分页的页表机制。
②缺页中断机构。
③地址变换机构。
2)实现请求分页的软件。
包括有用于实现请求调页的软件和实现页面置换的软件。
2.分段请求系统
这是在分段系统的基础上,增加了请求调段及分段置换功能后所形成的段式虚拟存储系统。置换时以段为单位。
1)硬件支持。
①请求分段的段表机制。
②缺段中断机构。
③地址变换机构。
2)实现请求分段的软件。
包括有用于实现请求调段的软件和实现段置换的软件。
因为请求分页系统换进和换出的基本单位都是固定大小的页面,所以在实现上要容易些。而请求分段系统换进换出的基本单位是段,其长度是可变的,分段的分配类似于动态分区方式,它在内存分配和回收上都比较复杂。
段页式虚拟存储器系统。
在段页式系统基础上,增加请求调页和页面置换功能形成段页式虚拟存储器系统。
5.2 请求分页存储管理方式
5.2.1 请求分页中的硬件支持
1.请求页表机制
在请求页表中增加了四个字段:
1)状态位(存在位) P:指示该页是否已调入内存。
2)访问字段A:记录该页在一段时间内的访问次数,或者最近多久未被访问,为置换算法选择置换页提供参考;
3)修改位M:指示该页在调入内存后是否被修改过。
4)外存地址:指示该页在外存的地址,通常是物理块号。
2.缺页中断机构
在请求分页系统中,每当所要访问的页面不在内存时,便产生一缺页中断,请求 OS 将所缺之页调入内存。缺页中断作为中断,它们同样需要经历诸如保护 CPU 环境、分析中断原因、转入缺页中断处理程序进行处理、恢复 CPU 环境等几个步骤。但缺页中断又是一种特殊的中断,它与一般的中断相比,有着明显的区别,主要表现在下面两个方面:
1)在指令执行期间产生和处理中断信号。即在指令执行期间,发现所要访问的指令或数据不在内存时所产生和处理的。
2)一条指令在执行期间,可能产生多次缺页中断。并保证最后能返回到中断前产生缺页中断的指令处继续执行。
3.地址变换机构

