现代需要运行的程序往往大到内存无法容纳,而且必须能够支持多个程序同时运行,及时内存可以满足其中一个单独的程序的要求,但总体来看仍然超出了内存大小。而交换技术由于磁盘速度的限制,也不是一个非常好的方法。
在早起计算时代(20世纪60年代)采用的方法:把程序分割成许多片段,称为覆盖。程序开始时,将覆盖管理模块装入内存,该模块负责在运行时动态地调入覆盖0、1、2……并决定是获取空闲区还是占用已使用的区域放置要调入的覆盖n。一般由操作系统动态地换入换出覆盖,但是程序员必须把程序分割成段。这是一项非常费时且易出错的操作。因此有人找到把全部工作交给计算机去做的办法----虚拟内存。
虚拟内存的基本思想是:每个进程拥有自己的地址空间,这个空间被分割成多个块,每一块被称作一页或页面。每一页有连续的地址范围,这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行进程。当进程需要用到不再物理内存的地址空间时,操作系统负责将缺失的部分装入物理内存。
分页
大部分虚拟内存系统中都使用一种称为分页的技术。形如进程执行指令:MOV REG,1000。这些由进程产生的地址称为虚拟地址,他们构成了一个虚拟地址空间。在没有虚拟内存的计算机上,系统直接将虚拟地址送到内存总线,读写操作使用具有同样地址的物理内存;在使用虚拟内存的情况下,虚拟地址先被送到MMU(内存管理单元),MMU把虚拟地址映射为物理内存地址。
虚拟地址空间按照固定大小划分成称为页面的若干单元,在物理内存中对应的单元称为页框。现有系统中页大小一般为512字节到