资源隔离:虚拟内存
前面描述的所有操作系统基础知识都是进程和CPU资源相关的内容,另一个操作系统中和进程相关的比较重要的话题是内存资源。
操作系统主要目的是执行程序,而程序在执行时,程序自身以及程序所访问的数据、所产生的数据都在内存里(至少所有数据的流向都会经过内存)。此外,现代操作系统可以同时运行多个进程,而每个进程都有属于自己的一部分内存。
操作系统必须负责管理这些同时运行的这些进程的内存,并且还要保证进程A不会访问到进程B的内存,从而实现进程的隔离。
操作系统使用了一个称为虚拟内存(Virtual Memory,VM)的概念来实现进程的内存管理,虚拟内存也称为地址空间或虚拟地址空间,和物理内存的称呼相对应。
每个进程都拥有一个属于自己的虚拟内存。进程在使用自己的虚拟地址空间时,任何虚拟地址都必须翻译成对应的物理内存地址才能使用到物理内存。
虚拟内存是操作系统对进程营造的另一个假象:让进程以为自己占有了所有的物理内存。但实际上,它只使用了物理内存的一部分,每个进程所实际使用的那部分物理内存由操作系统进行分配和回收,从而实现内存的管理。
虚拟内存的主要目标之一是对进程透明,进程不应该感知到内存被虚拟的这个事实,相反,还要让进程以为自己拥有所有的物理内存,想怎么使用就怎么使用,而不应该收到限制。
虚拟内存另一个目标是保护进程,进程A不允许访问到进程B的虚拟内存时,在进程A崩溃时也不应该让它影响到进程B,更不能让用户进程影响到操作系统本身。所以,每个进程都是完全隔离的,互不影响。