虚拟内存

虚拟内存

3.1 简介

在没有虚存机制的计算机中,程序指令所访问的内存地址就是物理内存地址。而在有虚存机制并且打开的情况下,程序指令所访问的内存地址都是虚拟内存地址。某个虚拟内存的地址可以通过设置被映射到任何物理内存地址,如同3-1所示。

程序运行时,虚存地址到物理地址的转换工作是由专门的硬件完成的,它叫做内存管理单元(Memory Management UnitMMU)。转换过程如图3-2所示。

从图3-2中可以看出,当CPU访问某虚存地址时,不管是读指令或读写数据,该地址首先会被发送给内存管理单元进行转换。在获得转换后的物理地址后,CPU再对该物理地址进行读写操作。

为什么要单独增加一个MMU单元来处理虚拟地址向物理地址的转换呢?好处是显而易见的:在流水线中,中央处理器对指令的译码和内存管理单元的地址转换工作可以同步进行,从而提高系统的性能。比如下面两条指令:

Mov  1000,(R0)                                ;r0所指向的内存空间赋值1000

Inc     (R0)                                           ;自增r0所指向的内存空间内容

当中央处理器在对Mov  1000,(R0)译码并把r0指向的虚拟内存地址交给内存管理单元转换后,它可以同时取出下一条inc (R0)进行译码。这样中央处理器和内存管理单元可以并行工作,提高了系统效率。

3.2 虚拟内存的优点

 

3.2.1 安全性

虚拟内存是保证系统安全的一个重要机制。它使得各个进程在物理空间上实现隔离,程序只能访问本进程的虚存空间。通过把不同的进程映射到不同的物理内存空间,使得一个进程无法访问另一个进程空间的数据(进程间自愿共享的内存和其他有意的通信方式除外),如图3-3所示。

而且,通过虚存机制,操作系统可以使用两套不同的映射寄存器将用户空间和内核空间分布映射到不同的物理空间,从而杜绝了用户程序直接访问内核空间的可能。位于用户模式下用户程序只能通过系统调用来访问内核空间,而这是处于可信软件—操作系统的控制下,所以这样的访问是安全的。

另外,利用虚存机制可以设定某些页面的访问权限,如只读、读写等,从而保护页内数据不受破坏。比如,代码为了防止在运行时被程序不小心修改,其一般设为只读。对进程空间的不同段设置不同的访问权限的情况如图3-4所示。

 

3.2.2 提高空间利用率

利用虚存机制还可以充分利用物理内存空间。比如PDP 11/40总线实际上支持18位地址模式,最大物理空间可达256k。但程序指令只能访问1664k地址空间,如果没有虚存机制那么物理内存只有064k可以被指令访问,而其他空间由于CPU位数限制而无法被访问,有了虚存机制,这256k内存空间都可被使用,通过虚拟内存,程序指令可以访问比CPU位数高内存地址的情况如图3-6所示。

3.2.3 多进程的支持

利用虚存机制,每个进程可以单独编译,独立分配地址空间。也就是说,对于一个16位的进程,编译器可以在其64k地址空间内随意分配代码区和数据区,而不用担心和其他进程空间冲突,因为这64k空间完全属于该进程。而且,操作系统可以把多个进程同时载入内存运行,因为它们可以被映射到不同的物理内存。如果没有虚拟内存,则没法实现这一点,这时两个进程都要求使用064k的物理空间,这样同一时刻只能哟一个进程在内存中运行。

而且虚拟内存使得进程交换成为可能。出于内存分配的需求,内核经常根据一些策略把某些进程换出到磁盘上,以腾出空间供其他进程使用。而过一段时间后,这些进程还会被换回内存中继续运行,但它们被换人后所分配的物理地址并不要求和换出前一样,可以是任意地址。

对于现代操作系统,虚存机制的另一个主要作用就是实现动态链接。

 

 

 

 





posted on 2013-05-09 01:02  成心以此  阅读(264)  评论(0编辑  收藏  举报

导航