内存管理笔记四、虚拟内存概念的引入
引言:虚拟内存是实际存储架构与程序员对内存要求之间的一座桥梁,是操作系统为用户提供的一种“幻象”,其构建在内存架构的顶端,给用户提供一个比物理主存空间大许多的地址空间。
一、产生背景
1.1、程序员对内存的要求
计算机的一个基本功能是计算,其计算除了需要硬件之外,还需要两种信息:数据和代码。它们是计算机硬件CPU的输入,没有这些,CPU也是“巧妇难为无米之炊” ——无法进行计算。那么,这些信息存放在哪里呢?显然存放这些东西的地方需要能够很快地将数据读出写入,以便能够与CPU合作完成计算机赋予的功能。这个地方就是计算机的主存储器,简称为主存。
理想状态下,程序员或用户对内存的要求是:“大容量、高速度和持久性”。
1.2、计算机硬件物理现状
但程序员面临的物理现实却是一个由缓存、主存、磁盘等组成的内存架构。这这个内存的现实架构中,缓存的特点是低容量(相对于主存来说)、高速度、高价格;主存的特点是中容量、中速度、中价格;磁盘则属于大容量、低速度、低成本的存储媒介;其存储容量与读取速度简化图如下:
1.3、桥梁嫁接
显然,这样一个存储架构与程序猿或者用户对内存的要求相差甚远。要以这个存储架构为基础来提供程序员所需的内存抽象,我们需要一个巧妙有效的内存管理机制。
内存管理负责对内存架构进行管理,使程序在内存架构的任何一个层次还是那个的存放对于用户来说都是一样的。用户无需担心自己的程序是存储在缓存、主存还是磁盘上,其运行、计算、输出结果一致。内存管理实现这种透明介质的手段就是虚拟内存,其是操作系统为用户提供的一个“幻象”。这个幻象构建在内存架构的顶端,给用户提供一个比物理主存空间大许多的地址空间。
二、中心思想
虚拟内存的中心思想是:将物理主存扩大到便宜、大容量的磁盘上,即将磁盘空间看成是主存空间中的一部分。用户程序存放在磁盘上就相当于放在主存内。当程序执行时,操作系统的内存管理模块负责判断程序发出的地址到底是在主存还是在磁盘,并到相应的位置进行读写操作。
事实上,也可以将缓存包括进来,构成一个效率、价格、容量错落有致的存储架构。即虚拟内存要提供一个空间像磁盘那么大、速度像缓存那么高的主存储系统。而对程序地址所在位置(缓存、主存、磁盘)的判断是内存管理系统的一个中心功能。
三、承载作用
简单讲,虚拟内存除了让程序员感觉到内存容量大大增加以外,还让程序员感到内存速度也加快了。这是因为虚拟内存将尽可能从缓存满足用户访问请求。从这个角度讲,虚拟内存就是实际存储架构与程序员对内存的要求之间的一座桥梁。
四、实现机制
虚拟内存中,允许将一个作业多次调入内存。采用连续分配方式时,会使相当一部分内存空间都处于暂时或“永久”的空闲状态,造成内存资源的严重浪费。因此,虚拟内存的实现需要建立在离散分配的基础上,其实现由以下三种主要的方式:
1)、 分页存储管理
2) 、分段存储管理
3)、段页式存储管理
不管哪种方式,都需要有一定的硬件支持。一般需要的支持有以下几个方面:
1)、一定容量的内存和外存。
2)、页表机制(或段表机制),作为主要的数据结构。
3)、中断机构,当用户程序要访问的部分尚未调入内存,则产生中断。
4)、地址变换机构,逻辑地址到物理地址的变换。
参考资料:
《操作系统之哲学原理》 邹恒明著
虚拟内存的概念及技术实现:
http://blog.csdn.net/chengonghao/article/details/51174071
纠错与建议
邮箱:[email protected]