虚拟机内存工作原理
Windows 环境内存名词释义
Windows 内存管理概述
在现代计算机系统中,内存是指 CPU 可以直接访问的随机存储器。在硬件上,CPU
通过一组地址线连接到内存上,这组地址线称为内存总线。而在软件上,CPU 的许多指令
允许用内存单元地址作为指令的操作数,实现直接操纵这些内存单元。内存地址,在 Intel
x86 体系结构中,内存地址有三种类型:
物理地址即内存存储器的索引,CPU 操纵内存芯片时,通过地址线管脚加上电信号来
读或写相应的内存单元。在 Intel x86 体系结构上,物理地址是一个 32 位或 36 位的无符
号整数。
虚拟地址:在 32 位系统上,虚拟地址空间可以达到 4GB 大小,也就是说,整个空间
可以有 2
32
=4294967296 个字节单元。Intel x86 芯片内有专门的电路负责把一个虚拟
地址转译成物理地址。
逻辑地址。逻辑地址包含两部分:段和偏移。段指定了在整个地址空间中的一个基地
址、段空间的大小、属性。与寻址相关的是段的基址和大小。偏移部分指定了一个逻辑地
址相对于段基址的偏移量。此偏移量不能超过段的边界。因此,逻辑地址的实际地址是段
基址加上偏移量。Intel x86 芯片也有专门的电路把逻辑地址转译成一个虚拟地址或物理
地址。
把一个地址告诉 CPU,让它访问相对应的物理内存单元,这一过程是操作系统和
CPU 相互协作来完成的。CPU 最终需要的是一个物理地址,它必须把软件指令中的地址转
译成物理地址,在转译过程中可能会涉及一些数据结构,甚至涉及 I/O 操作。
从操作系统的角度来看,一方面,它需要有效地管理所有的物理内存,使得当一个进
程需要内存时,能够分配足够的内存单元给这一进程;另一方面,正如上一章所讲,进程
代表一个相对独立的任务,它有一个逻辑上独立的地址空间。不同进程的地址空间应该是
相互隔离的。实现每个进程都有自己的私有地址空间。
当系统中进程数量增加以后,所需内存数量往往超过了总的物理内存,在这种情况下,
操作系统须合理地安排内存的使用,使得内存紧缺时,既不会波及系统本身的稳定性,同
时也不会严重影响系统的性能。当发生这种情况时,一般的做法是把不紧急的进程中的数
据或代码先存放到硬盘(page"le)中,从而把它们占用的物理内存腾出来给紧急的进程使用,
或者交给系统使用。当内存紧缺的状况缓解时,系统再把硬盘(page"le)中的进程数据或
代码装回到已经空闲下来的内存单元中,从而使这些进程有机会继续运行。这两个过程称
为内存换出和换入。几乎所有的多进程操作系统都支持这种内存管理。
内存基本单元总是字节 Bytes。每个内存地址指向一个字节,地址值加 1 以后指向下
一个字节。物理内存的地址是固定的,故让进程使用物理地址来访问内存将使得进程的动
态分配难以有效实施,因为内存单元与进程将通过物理地址紧密地联系在一起了,从而内
存的回收和再分配将受限于特定的进程和物理地址。为打破这种关联关系,思路是让进程
使用虚拟地址,而虚拟地址和物理地址之间通过一个映射表来完成转译。
1.1 pagele:即 windows 安装过程中创建的分页文件,见下图。