虚拟内存基本概念与原理

1. 虚拟内存概述

        一个系统中进程是与其他进程共享CPU和主存资源的。如果像早起PC或嵌入式单片机那样程序直接运行在物理内存上,进程一旦多起来,将消耗太多内存,很容易出现一些程序根本无法运行。此外,某个进程可能会修改另一个进程的内存。 为了更加有效管理内存并且少出错,现代系统提供了一种主存抽象——虚拟内存。有了虚拟内存,即可实现硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互。虚拟内存提供了三个重要能力:

  1. 将主存看成是一个存储在磁盘上的地址空间的高速缓存,主存中值保存活动的区域,按需在磁盘和主存之间来回传送数据(或按需调度),如此就可高效利用主存;
  2. 为每个进程提供了一个一致的和私有的4GB地址空间,简化了内存管理;
  3. 提供了保护机制,确保每个进程的地址空间不被其他进程破环。

1.1 基本概念

1.1.1计算机主存及寻址方式

        计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每个字节都有一个唯一的物理地址,从0开始到最大物理地址。CPU访问内存的方式有两种:物理寻址和虚拟寻址。

        早起的PC使用物理寻址,如CPU执行一条加载指令时(从某个地址读取数据),就会生成一个有效的物理地址,通过内存总线,把它传递给主存。主存从该物理地址取出数据并将其返回给CPU。现代处理器都是使用虚拟寻址的方式,基本方式如下图所示:

         虚拟寻址时,CPU加载一条指令时,目标数据的虚拟地址先经过内存管理单元(Memory Management Unit, MMU)进行地址翻译得到物理地址,再通过内存总线传递给主存,主存从物理地址取出数据并返回给CPU。

1.1.2 地址空间

        地址空间是一个非负整数地址,连续、有序的线性地址空间。虚拟地址空间的大小为2^{n},一般叫n位地址空间,如现在的系统一般有32位和64位,我们称系统支持32位或64位地址空间。物理地址空间一般是指物理内存的地址大小,如物理内存的大小为M,则物理地址空间范围为0-M-1。

2. 虚拟内存基本原理

2.1 虚拟内存作为缓存的工具

        虚拟内存可看作是一个存放在磁盘上的N个连续的字节大小的单元组成的数组。每个字节都有一个虚拟地址,作为到数组的索引。磁盘上数组的内容被缓存在主存中。和存储器层次结构中其他缓存一样,磁盘(较低层)上的数据被分割成块,作为磁盘和主存(较高层)之间的传输单元。虚拟内存管理通过将虚拟内存分割成固定大小的页块(称为虚拟页(VP))来进行磁盘和主存之间的传输。类似地,物理内存也被分割为物理页(PP),大小为P字节(物理页也称为页帧)。

任意时刻,虚拟页面都有以下三种不相交的共同构成:

  • 未分配的:虚拟内存管理系统还未分配(或创建)的页。未分配的块没有任何数据和他们相关联,因此这种虚拟页不占用磁盘空间。
  • 未缓存的:已分配的页,但未缓存到主存。
  • 缓存的:当前已缓存在物理内存中的已分配页。

 虚拟管理系统如何使用虚拟作为缓存

如上图所示,虚拟页0和3是未分配的页,在磁盘上还不存在,虚拟页1、4和6被缓存在物理内存中,页2、5和7已经被分配但并未缓存到主存。

2.1.1 DRAM和SRAM缓存对比

        存储层次结构中有两种不同的缓存概念:DRAM和SRAM。SRAM缓存可看作位于CPU和主存之间的L1、L2和L3 cache,而DRAM缓存则是主存中缓存虚拟页的缓存。在存储层次结构中,DRAM比SRAM要慢大约10倍,而磁盘要比DRAM慢大约100000多倍。因此,DRAM缓存中不命中比SRAM不命中的代价高的多。

2.1.2 页表

        前面讲到虚拟页可能会处于三种状态:未分配、分配未缓存和分配已缓存。虚拟内存系统必须可通过某种方法来区分这三种状态——页表项(有效位标记+物理页号或磁盘地址)。对于已分配的虚拟页,有效位为1,系统必须确定该虚拟页时存放在物理页中还是磁盘中。如果不在物理页中,虚拟内存管理系统还需在物理内存中选择一个牺牲页,并将虚拟页从磁盘复制到DRAM中,替换这个虚拟页并更新该页表项。

        这写功能是由软硬件联合提供的,包括操作系统软件、MMU中的地址翻译和一个存放在物理内存中叫做页表的数据结构,页表将虚拟页映射到物理页。每次地址翻译硬件将一个虚拟地址转换为物理地址时,都会读取页表。操作系统负责维护页表的内容,以及在磁盘与DRAM之间来回传页。页表就是一个页表条目(Page table entry, PTE)的数组。虚拟地址空间中每个页在页表中的一个固定偏移量处都有一个PTE。下图展示了一个页表的基本组织结构:

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值