对内存管理来说,我们要问的第一个问题当然是内存管理要达到的目标或目的。
我们说过,内存管理就是要提供一个虚幻的景象,就像钱,虚的东西,实际上一文不名,但是大家认为它有这个价值。比如游戏“第二生命”(second life),很多人在玩这个游戏。该游戏的核心是给你机会让你将生命重新来过,等于给了你第二次生命。比如你后悔考上海交通大学,或者你怀疑到上海交通大学是个错误。可是你又不敢在真实生活里退学。于是,你到这个游戏来重新尝试一次不同的选择,一次不同的生命。在游戏里面你可以上其他的大学,或者不上大学,直接去做成功人士。也许你觉得游戏里面的生命太虚了,可是玩家不这么认为。对于某些玩家来说,他的一切需求,金钱、地位、声望等皆可以在游戏中得到满足。而现实中,他们的渴望得不到满足,反而觉得空虚。
由此可见**,一个东西的价值在于能否满足我们的渴望和需要**。如果能,这个东西就有价值。那么内存管理就是要提供一个有价值的虚幻。用术语来说就是抽象。那么内存管理要提供哪些抽象呢?或者说,内存管理要达到什么目标呢?
首先,由于多道程序同时存放在内存中,操作系统要保证它们之间互不干扰。所谓的互不干扰就是一个进程不能随便访问另一个进程的地址空间。这是内存管理要达到的第一个目标。
那还有没有别的目标呢?我们看一下程序指令执行的过程。程序指令在执行前加载到内存,然后从内存中一条条指令读出,然后执行(从硬件层来看,指令的“读取-执行”循环是计算机的基本操作)。每条指令在执行时需要读取操作数和写入运算结果,要读取操作数,就需要给出操作数所在的内存地址,这个地址不能是物理主存地址。这是因为该程序在何种硬件配置的机器上运行并不能事先确定,操作系统自然不可能对症下药地发出对应于某台机器的物理主存地址。因此,指令里面的地址是程序空间(虚拟空间)的虚拟地址(程序地址)。即程序发出的地址与具体机器的物理主存地址是独立的。这是内存管理要达到的另外一个目标。
综上所述,内存管理要达到如下两个目标:
地址保护:一个程序不能访问另一个程序地址空间。
地址独立:程序发出的地址应与物理主存地址无关。
这两个目标就是衡量一个内存管理系统是否完善的标准。它是所有内存管理系统必须提供的基本抽象。当然,不同的内存管理系统在此二者之上还提供了许多其他抽象。