- 主存和联机工作的辅存构成了虚拟存储器,二者在硬件和软件的共同管理下工作;虚拟存储器具有主存的速度和辅存的容量,提高了存储系统的性价比。
一、基本概念
- 虚拟存储器将
主存和辅存的地址空间统一编址,用户可以自由编程,不必在乎实际的主存容量和程序在主存中实际存放位置。 - 用户编程允许涉及的地址称为
虚地址或逻辑地址,虚地址对应的存储空间称为虚拟空间或程序空间。实际的主存单元地址称为实地址或物理地址,实地址对应的是主存空间或叫实地址空间。如下图: - 由于实际上,所编程序和数据在操作系统管理下,
先送入磁盘,再由操作系统将当前允许所需要的部分调入主存,供 CPU 使用,其余暂不运行的部分则留在磁盘中。 - CPU 使用地址时,由辅助硬件找出虚地址和实地址之间的
对应关系,并判断这个虚地址对应的存储单元内容在主存中是否已有;若有,则通过地址变换,CPU 可直接访问主存指示的实际单元;若没有,则把包含这个字的一页或一段调入主存后再由 CPU 访问;若主存满了,则采用替换算法置换主存的一页或一段。
二、虚存种类
- 虚拟存储器按照地址逻辑划分技术的不同,可以分为
页式虚存、段式虚存和段页式虚存。
1、页式虚存
-
这类虚拟存储器,指的是以
页为基本单位。 -
虚拟空间与主存空间划分为同样大小的页,主存中的页称为
实页,虚存的称为虚页。 -
虚拟地址分为
虚页号和页内地址。虚地址到物理地址的转换由页表实现;页表是一张存放在主存中的虚页号和实页号的对照表,记录虚页调入主存时被安排在主存中的位置,页表一般长期存放在主存中。 -
页表结构如上,由
有效位、脏位、引用位和物理页或磁盘地址组成。 -
有效位也称
装入位,表示页面是否装入主存中,1 表示已装入,此时地址位对应主存的物理页号;0 表示没有装入,此时地址位对应磁盘地址。 -
脏位也称
修改位,表示页面是否被修改过;虚存机制采用写回法,因此需要脏位。 -
引用位也叫
使用位,用于配合替换策略进行设置,例如是否实现 FIFO 或 LRU。 -
在虚存结构下,CPU 执行指令时,需
先将虚地址转为主存物理地址。 -
每个进程都有
页表基址寄存器,用于存放进程的页表首地址,根据虚地址高位部分的页号找到相应页表项,此时若装入位为1,则取出物理页号和虚地址低位部分的页内地址拼接组成实际物理地址;若装入位为0,则表示缺页,此时需要操作系统进行缺页处理。 -
页式虚存优点:页面长度固定,页表简单,调入方便。
-
缺点:程序往往不可能正好是页面的整数倍,最后一页的零头将无法利用而造成浪费,并且页不是逻辑上独立的实体,因此处理、保护和共享都比较麻烦。
2、段式虚存
-
段式虚拟存储器中的段是
按程序的逻辑结构进行划分的,因此段的长度因程序而异。 -
虚地址分为
段号和段内地址。此时虚地址到实地址之间是通过段表进行,段表是程序的逻辑段和在主存中存放位置的对照表,其结构如下: -
因为段长不定,因此需要在段表中给出
段首址和段长。 -
使用段式虚存,CPU 访存时,先根据
段号与段表基地址拼接成对应的段表行,再由段表行的装入位判断该段是否已经调入主存,已调入则根据段表中该段在主存的首地址与段内地址读取相关数据。 -
优点:段的分界和程序的分界与程序的自然分界一致,具逻辑独立性,使得更容易编译、管理、修改和保护,便于多道程序的共享。
-
缺点:段长不定,分配空间不容易,段间容易留下碎片,不好利用,造成浪费。
3、段页式虚存
- 实现段页式虚存,就是
将程序按逻辑结构分段,每段再分成固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出以页为基本传送单位。 - 段页式虚存,每个程序对应一个段表,每段对应一个页表,段长须是
页长整数倍,段起点需为某一页的起点。 - 段页式虚存的虚地址分为
段号、段内页号、页内地址三部分。CPU 访存时,先根据段号得到段表地址,从段表取出该段的页表首地址与虚地址段内页号合成页表地址,再从页表中取出实页号,与页内地址合成主存实地址。 - 优点:兼具页式和段式虚存的优点,按段实现共享和保护。
- 缺点:地址变换过程中需要查两次表,系统开销大。
三、TLB
-
TLB 即快表,是用于
加快地址转换的技术。 -
为了避免缺页时,频繁访存,可根据程序执行的局部性原理,在一段时间内总是访问某些页时,可以将这些页表项存放在
高速缓冲器组成的快表(TLB),而把放在主存中的页表称为慢表(Page)。地址转换时,首先查找快表,若命中,则无须访问主存中的页表。 -
TLB 采用
全相联或组相联方式,每个TLB 项由页表表项内容加上一个 TLB 标记字段组成,TLB 标记用于表示该表项取自页表中哪个虚页号对应的页表项,因此,TLB 标记的内容在全相联方式下就是该页表项对应的虚页号;组相联方式下则是对应虚页号的高位部分,而虚页号低位部分用于选择 TLB 组的组索引。
TLB 和 Cache 访问过程如下: -
如上图是一个 Cache 二路组相联,TLB 全相联,CPU 给出 32 位虚地址,查找时将
虚页号与每个TLB 标记字段同时进行比较,若有某一项相等且有效位为 1,则 TLB 命中,此时直接通过 TLB 转换地址;若TLB 缺失,则访问主存查页表。虚页号分为页目录索引和页表索引,这两部分对应到相应页表项,相应表项调入 TLB,若 TLB 已满,则采用替换策略;完成虚地址到物理地址转换后,由映射规则找到对应 Cache 行或组,在比较对应 Cache 行高位部分,若相等且有效位为 1,Cache 命中,此时根据块内地址取出对应字送入 CPU。 -
查找时可以
快表慢表同时进行,一旦 TLB 命中,则慢表的查找作废。 -
CPU 访存过程如上,可能出现的情况:
a、TLB 缺失,要访问的页面对应的页表项不在 TLB 中;
b、Cache 缺失,要访问的主存块不在 Cache 中;
c、缺页,要访问的页面不在主存中, -
三种情况互相组合出的所有可能如下:
-
Cache 缺失由硬件完成;缺页处理由软件完成,TLB 缺失既可以用硬件完成也可以用软件完成。
四、虚存和 Cache 的异同
1、相同:
- 1)最终目标都是为了
提高系统性能,两者都有容量、速度、价格的梯度。 - 2)都把数据划分成小
信息块,并作为基本传递单位。 - 3)都有地址的映射、替换算法、更新策略等问题。
- 4)依据程序的
局部性原理应用“快速缓存的思想”,将活跃的数据放在相对高速的部件中。
2、不同:
- 1)Cache 主要解决
系统速度,而虚存主要解决系统主存容量。 - 2)Cache 全由
硬件实现,是硬件上的存储器;虚存由OS 和硬件共同实现,是逻辑上的存储器。 - 3)对于不命中性能影响,虚存比 Cache 影响更大。
- 4)CPU 与 Cache 和主存都建立了直接访问的通路,而辅存与 CPU 没有通路。