跳至主要內容

6.虚拟存储器


概念

  • 虛拟存储器將主存或辅存的地址空间统一编址,形成一个庞大的地址空间,在这个空间内, 用户可以自由编程,而不必在乎实际的主存容量和程序在主存中实际的存放位置。
  • CPU 使用虛地址时,由辅助硬件找出虚地址和实地址之问的对应关系,并判断这个虛地址对应的存储单元内容是否己装入主存
  • 缺页(或段)而访问辅存的代价很大,提高命中率是关键,因此虚拟存储机制采用全相联映射
  • 当进行写操作时,不能每次写操作都同时写回磁盘,因而,在处理一致性问题时,采用回写法

页式虚拟存储器

  • 主存的页称为实页、页框,虚存的页称为虛页
  • 虚拟地址分为两个字段:虚页号和页内地址
  • 页表一般长久地保存在内存中。

页表

  • 有效位也称装入位,用来表示对应页面是否在主存
  • 脏位也称修改位,用来表示页面是否被修改过
  • 引用位也称使用位,用来配合替换策略进行设置,例如是否实现最先调入(FIFO 位)或最近最少用(LRU位)策略等
主存中的页表示例
主存中的页表示例

相关信息

  1. CPU 执行指令时,需要先将虚拟地址转换为主存物理地址。
  2. 页表基址寄存器存放进程的页表首地址,然后根据虚拟地址高位部分的虚拟页号找到对应的页表项,若装入位为 1,则取出物理页号,和虚拟地址低位部分的页内地址拼接,形成实际物理地址;若装入位为 0,则说明缺页, 需要操作系统进行缺页处理。

地址变换的过程如图
image.png

快表(TLB)

  • 依据程序访问的局部性原理,在一段时间内总是经常访问某些页时,若把这些页对应的页表项存放在高速缓冲器组成的快表(TLB) 中,则可以明显提高效率。相应地把放在主存中的页表称为慢表(Page)在地址转换时,首先查找快表,若命中,则无须访问主存中的页表
  • 快表通常采用全相联或组相联方式。
  • TLB 标记的内容在全相联方式下就是该页表项对应的虛页号;组相联方式下则是对应虚页号的高位部分,而虚页号的低位部分用于选择 TLB 组的组索引

具有TLB和Cache 的多级存储系统

相关信息

TLB 和 Cache 的访问过程
如图是一个具有TLB 和Cache 的多级存储系统,其中 Cache 采用二路组相联方式。CPU 给出一个 32位的虚拟地址,TLB 采用全相联方式,每一项都有一个比较器

  1. 查找时将虚页号与每个 TLB 标记字段同时进行比较,若有某一项相等且对应有效位为 1,则 TLB 命中,此时可直接通过 TLB 进行地址转换;若未命中,则TLB 缺失,需要访问主存去查页表。
  2. 图中所示的是两级页表方式,虚页号被分成页目录索引和页表索引两部分,由这两部分得到对应的页表项,从而进行地址转换,并将相应表项调入 TLB,若 TLB 已满,则还需要采用替换策略。
  3. 完成由虚拟地址到物理地址的转换后,Cache 机构根据映射方式将物理地址划分成多个字段,然后根据映射规则找到对应的 Cache 行或组,将对应 Cache 行中的标记与物理地址中的高位部分进行比较,若相等且对应有效位为 1,则 Cache 命中,此时根据块内地址取出对应的字送 CPU。

在一个具有 Cache 和TLB 的虛拟存储系统中,CPU一次访存操作可能涉及TLB、页表、Cache、主存和磁盘的访问

带TLB 虚拟存储器的 CPU 访存过程
带TLB 虚拟存储器的 CPU 访存过程

提示

TLB、 Page、 Cache 三种缺失的可能组合情况
TLB、 Page、 Cache 三种缺失的可能组合情况
  1. 最好的情况是第 1种组合,此时无须访问主存;
  2. 第2种和第3 种组合都需要访问一次主存
  3. 第 4 种组合需要访问两次主存;
  4. 第5 种组合发生 “缺页异常”,需要访问磁盘,并且至少访问两次主存。
  5. Cache 缺失处理由硬件完成:缺页处理由软件完成,操作系统通过 “缺页异常处理程序”来实现;而TLB缺失既可以用硬件又可以用软件来处理。

段式虚拟存储器

  • 虚拟地址分为两部分:段号和段内地址
  • 优点:段的分界与程序的自然分界相对应,因而具有逻辑独立性, 使得它易于编译、管理、修改和保护,也便于多道程序的共享;
  • 缺点是因为段长度可变,分配空间不便,容易在段间留下碎片,不好利用, 造成浪费。
image.png
image.png

段页式虛拟存储器

把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位,这样的虚拟存储器称为段页式虚拟存储器。

在段页式虚拟存储器中,每个程序对应一个段表,每段对应一个页表,段的长度必须是页长的整数倍, 段的起点必须是某一页的起点。

虚地址分为段号、段内页号、页内地址三部分

虚拟存储器与 Cache 的比较

1.相同之处

  1. 最终目标都是为了提高系统性能,两者都有容量、速度、价格的梯度。
  2. 都把数据划分为小信息块,并作为基本的传递单位,虚存系统的信息块更大。
  3. 都有地址的映射、替换算法、更新策略等问题。
  4. 依据程序的局部性原理应用“快速缓存的思想”,将活跃的数据放在相对高速的部件中。

2.不同之处

  1. Cache 主要解决系统速度,而虛拟存储器却是为了解决主存容量
  2. Cache 全由硬件实现,是硬件存储器,对所有程序员透明;而虚拟存储器由 OS和硬件共同实现,是逻辑上的存储器,对系统程序员不透明,但对应用程序员透明
  3. 对于不命中性能影响,因为 CPU 的速度约为 Cache 的10倍,主存的速度为硬盘的 100 倍以上,因此虚拟存储器系统不命中时对系统性能影响更大
  4. CPU 与Cache 和主存都建立了直接访问的通路,而辅存与 CPU 没有直接通路。也就是说在 Cache 不命中时主存能和 CPU 直接通信,同时将数据调入 Cache,而虛拟存储器系统不命中时,只能先由硬盘调入主存,而不能直接和 CPU 通信