虚拟内存技术相当于给每个进程分配一块独占且连续的内存,只不过这个内存是虚拟的。虚拟内存的简化模型如图1-1所示,从简化的模型可以看到,每个进程都独享一块唯一的虚拟内存,由内核空间和用户空间组成。其中内核空间存放的是操作系统的数据,这部分数据在所有进程中都是同一份,都映射到同一段物理内存;用户空间存放的是应用程序的数据,当某个应用程序向其对应的虚拟内存地址中写入数据时,操作系统会将该虚拟内存地址映射到真正的物理内存地址中,映射之后就能写入数据了。
图1-1 虚拟内存的简化模型
虚拟内存的大小在32位操作系统下是2 32 B,即4GB;在64位操作系统下是2 48 B,即16TB。之所以不是2 64 B,是因为2 48 B已经足够大了,2 64 B的空间只会导致系统损耗更多的资源来维护和管理这些空间。虚拟内存到物理内存是按照页来进行管理和映射的,一页的大小为4KB。
假设有一个32位操作系统,其物理内存只有2GB,下面以这个系统的虚拟内存和物理内存的映射模型为例来帮助读者加强对虚拟内存的理解,该场景如图1-2所示。4GB大小的虚拟内存被分成1 048 576个大小为4KB的页,当虚拟内存的某一页需要写入数据时,系统便会映射一块4KB大小的物理内存,如果虚拟内存中的页没有写入数据,系统则不会进行映射。虚拟内存到物理内存的地址映射由计算机的内存管理单元(MMU)完成,它属于硬件而不是系统软件,所以映射速度很快。
图1-2 32位操作系统下虚拟内存和物理内存的映射模型