什么是虚拟内存,虚拟内存及其作用详解
前面介绍了计算机系统的各种内存管理策略,例如分页,分段等,所有这些策略都有相同的目标,就是同时将多个进程保存在内存中,以便允许多道程序。然而,这些策略都倾向于要求每个进程在执行之前应完全处于内存中。
即使在需要整个程序的情况下,也可能并不同时需要整个程序。分段能够执行只有部分处于内存的程序,可以带来许多好处:
虚拟内存将用户逻辑内存与物理内存分开。这在现有物理内存有限的情况下,为程序员提供了巨大的虚拟内存(如图 1 所示)。 图 1 虚拟内存大于物理内存的图例 因此,虚拟内存使得编程更加容易,因为程序员不再需要担心有限的物理内存空间,只需要关注所要解决的问题。 进程的虚拟地址空间就是进程如何在内存中存放的逻辑(或虚拟)视图。通常,进程从某一逻辑地址(如地址 0)开始,连续存放,如图 2 所示。 图 2 虚拟地址空间 注意,在图 2 中,随着动态内存的分配,允许堆向上生长。类似地,随着子程序的 不断调用,还允许堆栈向下生长。堆与堆栈之间的巨大空白空间(或空洞)为虚拟地址的一部分,只有在堆与堆栈生长时,才需要实际的物理页。包括空白的虚拟地址空间称为稀疏地址空间。采用稀疏地址空间的优点是随着程序的执行,堆栈或堆会生长或需要加载动态链接库(或共享对象),此时可以填充这些空白。 前面讲过,物理地址可以按帧来组织,并且分配给进程的物理帧也可以不连续。这就需要内存管理单元(MMU)将逻辑页映射到内存的物理页帧。 图 3 采用虚拟内存的共享库 除了将逻辑内存与物理内存分开外,虚拟内存允许文件和内存通过共享页而为多个进程所共享。这带来了以下好处:
(编辑:ASP站长网) |