高级C/C++编译技术(典藏版)
上QQ阅读APP看书,第一时间看更新

1.3 虚拟内存

存储器缓存的通用方法在下一个体系结构层次中得到了具体实现,我们在这一架构层中用名为“进程”的抽象概念来表示正在运行的程序。

现代多任务操作系统的设计允许一个或多个用户并发地运行多个程序。对一个普通用户来说,同时运行多个应用程序(比如Web浏览器、编辑器、音乐播放器和日历)再正常不过了。

通过虚拟内存的概念,可以很好地解决内存需求与有限的内存容量之间的矛盾,我们可以把这个概念概括为以下几条原则:

● 所有程序的内存配额是固定、均等和显式的。

通常来说,操作系统会允许程序(进程)使用的内存容量大小为2N字节,其中N就目前来说是32或者64。该值是固定的,而且与系统中的物理内存大小无关。

● 物理内存的数量可能会发生变化。通常来说,可用内存的数量会比声明的进程地址空间小很多。而供运行中程序使用的物理内存数量通常也各不相同。

● 运行时的物理内存会被划分成数个小的分段(页),而每一个页都可用来同步执行程序。

● 正在运行的程序的完整内存布局会被保存在低速存储器(硬盘)中。只有那些当前即将被执行的一部分内存(代码和数据)才会被加载到物理内存的页中。

要实现真正的虚拟内存概念,我们需要借助多个系统资源,比如硬件资源(硬件异常、硬件地址翻译)、硬盘(交换文件)以及最底层的操作系统软件(内核)。虚拟内存的概念如图1-3所示。

图1-3 虚拟内存概念的实现