程序要运行,必须先加载到内存。但在很久以前,准确地说是在操作系统出现以前,程序并不需要加载到内存就能运行。实际上,在那个已经久远的年代里,程序曾经存放在卡片上,计算机每读一张卡片,就运行一条指令。因此,程序是直接从卡片到执行。
但这种从外部存储媒介上直接执行指令的做法效率极低,且灵活性很差。因此,人们发明了内存储器来将需要运行的程序先行加载,再自动执行,从而提高效率和灵活性。这也导致了“存储的程序”概念的出现,而存储的程序概念又导致计算机及软件系统的革命性变化。此后,人们对内存的要求越来越多,越来越高。
理想状态下,程序员或用户对内存的要求是:大容量、高速度和持久性。但程序员面临的物理现实却是一个由缓存、主存、磁盘、磁带等组成的内存架构。在这个内存的现实架构中,缓存的特点是低容量(相对主存来说)、高速度、高价格;主存的特点则是中容量、中速度和中价格;磁盘则属于大容量、低速度、低成本的存储媒介;磁带则通常更持久但速度更慢。图11-2给出的是内存架构的物理现实。
很显然,这样一个存储架构与程序员或用户对内存的要求相差甚远。要以这个存储架构为基础来提供程序员所需的内存抽象,我们需要一个巧妙有效的内存管理机制。
内存管理机制负责对内存架构进行管理,使程序在内存架构的任何一个层次上的存放对于用户来说都是一样的。用户无须担心自己的程序是存储在缓存、主存、磁盘还是磁带上,反正运行、计算、输出的结果都一样。而内存管理实现这种媒介透明的手段就是虚拟内存
。用我们多次讲过的“抽象”来说,虚拟内存就是操作系统提供给用户的另一个“幻象”。这个幻象构建在内存架构的顶端,给用户提供一个比物理主存空间大许多的地址空间。