虚拟存储器

  一个系统中的进程是与其它进程共享CPU和主存资源的。

一、概述

1. 虚拟存储器的概念

  现代计算机系统提供了一种对主存的抽象概念,叫做虚拟存储器(VM)。

2. 虚拟存储器的定义

  虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。

3. 虚拟存储器的功能

  (1)它将主存看成一个存储在磁盘上的地址空间的高速缓存,在主存中只保留活动区域,并根据需要在磁盘和主存之间来回传送数据;

  (2)他为每个进程提供了一致的地址空间,从而简化了存储器管理;

  (3)它保护了每个进程的地址空间不被其它进程破坏;

4. 虚拟存储器的特点

  虚拟存储器是中心的。虚拟存储器遍及计算机系统的所有层面,在硬件异常、汇编器、链接器、加载器、共享对象、文件和进程的设计中扮演者重要角色。

  虚拟存储器是强大的。虚拟存储器给予应用程序强大的能力,可以创建和销毁存储器片(chunk)、将存储器片映射到磁盘文件的某个部分,以及与其它进程共享存储器。

  虚拟存储器是危险的。应用程序每引用一个变量、间接引用一个指针,或者调用一个动态分配程序时,他就会和虚拟存储器发生交互。

二、物理和虚拟寻址

  计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组,每个字节都有一个唯一的物理地址(PA)。第一个字节的地址为0,依次类推,最后一个为M-1。

1. 什么是物理寻址?

  CPU访问存储器的最自然的方式就是使用物理地址。我们把这种方式称为物理寻址。

2. 物理寻址的方式

  CPU执行指令时,会生成一个有效的物理地址,通过存储器总线,把他传递给主存。主存从给定的地址进行读数,并将它返回给CPU,CPU会把它存放在一个寄存器里。如下图所示:

 3. 什么是虚拟寻址?

  虚拟寻址是现代计算机常用的一种寻址方式。其运行原理如下图所示:

 

   使用虚拟寻址时,CPU通过生成一个虚拟地址(VA)来访问主存,这个虚拟地址在被送到存储器之前先转换成适当的物理地址。将一个虚拟地址转换为物理地址的任务叫做地址翻译。就像异常处理一样,地址翻译需要CPU硬件和OS之间的紧密合作。

  CPU芯片上叫做存储器管理单元(MMU)的专用硬件利用存放在主存中的查询表来动态翻译虚拟地址,该表的内容是由OS管理的。

三、地址空间

  地址空间是一个非负整数地址的有序集合。{ 0, 1, 2, ... }

1. 基本概念

  如果地址空间中的整体是连续的,那么我们说它是一个线性地址空间。

1.1 什么是虚拟地址空间?

  在一个带有虚拟存储器的系统中,CPU从一个有N=2n 个地址的地址空间中生成虚拟地址,这个地址空间称之为虚拟地址空间。

1.2 什么是物理地址空间?

  一个系统还有一个物理地址空间,它与系统中地物理存储器地M个字节相对应。例如:{ 0, 1, 2, ... , M - 1 }

2. 地址空间的大小

  一个地址空间的大小是由表示最大地址所需要的位数来描述的。例如:一个包含N=2n 个地址的虚拟地址空间,就叫做一个n位地址空间。现代系统典型地支持32位或者84位虚拟地址空间。

3. 地址空间的意义’

  地址空间这一概念,清晰的区分了数据对象(字节)和他们的属性(地址)。将其推广,则允许每个对象有多个独立的地址,其中每个地址都选自一个不同的地址空间,这就是虚拟存储器的基本思想。

  主存中的每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。

四、虚拟存储器作为缓存的工具

  概念上,VM被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。每个字节都有一个唯一的虚拟地址。这个唯一的虚拟地址是作为到数组的索引的。磁盘上数组的内容都被缓存在主存中。

  和其它存储器层次结构中其它缓存一样,较低层(磁盘)上的数据被分割成块,这些块作为较低层和较高层(主存)之间的传输单元。

  VM系统通过虚拟存储器分割称为虚拟页(VP)的大小固定的块来处理这个问题。每个虚拟页的大小为P = 2p 字节。类似的,物理存储器被分割为物理页(PP),大小也为P字节。(物理页也称之为页帧)。

  在任意时刻,虚拟页面的集合都分为三个不相交的子集:

    未分配的:VM系统还未分配(或创建)的页。未分配的块没有任何数据和他们相关联;

    缓存的:当前缓存在物理存储器中的已分配页;

    未缓存的:没有缓存在物理存储器中的已分配页。

示例,如下图所示:

 

 1.1 . DRAM缓存的组织结构

  SRAM缓存表示CPU与主存之间的高速缓存;DRAM缓存表示VM系统的缓存,他在主存中缓存虚拟页。

  DRAM缓存不命中要由磁盘来服务,二SRAM缓存不命中通常是基于DRAM的主存来服务的。

  DRAM缓存是全相联的,也就是说任何虚拟也都可以放置在任何的物理页中。不命中的替换策略由操作系统负责。

1.2 页表

  通任何缓存一样,虚拟存储器系统必须有某种方法来判定一个虚拟也是否存放在DRAM中的某个地方。如果是,系统还必须确定这个虚拟页存放在那个物理页中。如果不命中,系统必须判断这个虚拟页存放在磁盘的哪个位置,在物理存储器中选择一个牺牲页,并将虚拟页从磁盘拷贝到DRAM中,替换这个牺牲页。

  这些功能是由许多软硬件联合提供的,包括操作系统软件、MMU中的地址翻译硬件和一个存放在物理存储器中的叫做页表的数据结构,页表将虚拟页映射到物理页。每次地址翻译硬件将一个虚拟地址转换为物理地址时都会读取页表。操作系统负责维护页表的内容,以及在磁盘与DRAM之间来回传送页。

  页表就是要给页表条目(PTE)的数组。虚拟地址空间中的每个页在页表中一个固定偏移量处都有一个PTE。为了我们的目的,我们将假设么个PTE是由一个有效位和一个n位地址字段组成的。其中,有效位表明了该虚拟也当前是否被缓存在DRAM中。如果设置了有效位,那么地址字段就表示DRAM中相应的物理页的起始位置,这个物理页中缓存了该虚拟页。如果没有设置有效位,那么一个空地址表示这个虚拟页还未被分配。否则,这个地址就指向该虚拟页在磁盘上的起始位置。

1.3 页命中

  地址翻译硬件将虚拟地址作为一个索引来定位pte2,并从存储器中读取它。因为设置了有效位,那么地址翻译硬件就知道vp2时缓存在存储器中的了。所以它使用pte中物理存储器地址,构造出这个字的物理地址。

posted @   熊猫怪物  阅读(1829)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示