概述
虚拟存储器是建立在主存与辅存物理结构基础之上,由附加硬件装置以及操作系统存储管理软件组成的存储体系。
作用:解决主存容量不足的问题,为程序员提供比主存空间大的编程空间。
分类:
- 页式虚拟存储器
- 段式虚拟存储器
- 段页式虚拟存储器
段式虚拟存储器
段是利用程序的模块化性质,按照程序的逻辑结构划分成的多个相对独立的部分。段作为独立的逻辑单位可以被其他程序段调用,形成段间连接,产生规模较大的程序。一般用段表来指明各段在主存中的位置。
| 优点 | 缺点 |
|---|---|
| 段的分界与程序的自然分界相对应 | 在段间留下许多空余的零碎存储空间,造成浪费 |
| 段的逻辑独立性使它易于编译和维护,也便于多程序共享 |
页式虚拟存储器
虚地址和实地址
虚拟地址(又称逻辑地址)分为:
- 高位字段为虚页号:与页表项数相关
- 低位字段为页偏移量:与物理页大小相关
假设主存页大小为4K,虚存大小为4GB
4K= 212,4GB = 232B ,则有:
页内偏移量 = log2212 = 12位
虚拟页号 = log2232 - 12 = 20位,对应的页表有1024*1024项
实际的主存储器单元的地址称为实地址(又称物理地址)。实地址对应的是主存空间。
页式管理系统的信息传送单位是定长的页,主存的物理空间也被划分为等长的固定区域,称为页面。
| 虚页 / 逻辑页 | 虚拟空间分成的页 |
| 实页 / 物理页 | 实际空间分成的页 |
| 优点 | 缺点 |
|---|---|
| 比段式管理系统的空间浪费要小得多 | 页不是逻辑上独立的实体,处理保护和共享不如段式方便 |
虚拟地址到主存实地址的变换是由页表(Page Table)实现的,页表存储在主存中。对应的每一个虚页号有一个表目(Page Table Entry),页表是页表项的集合。
例
某计算机的虚拟存储系统有40位虚拟地址,32位实际地址,虚页1M。假定有效位,保护位,修改位和使用位共用去四位,所有虚页都在使用。计算页表大小和页面大小。
解:
因为虚拟存储系统有40位虚地址,32位实地址,虚页为1M,所以页内地址为 = log2220 = 20
| 31 - 20 | 19 - 0 |
|---|---|
| 物理页号(12位) | 页内地址(20位) |
| 39 - 20 | 19 - 0 |
|---|---|
| 虚页面号(20位) | 页内地址(20位) |
页表的字长 = 物理页号位数 + 有效位、保护位、修改位和使用位共4位 = 16位。
页表的单元数 = 1M (220)
页表大小 = 1M × 16
页面大小 = 1M
TLB
访问主存次数多了,降低运行速度。
解决方案:把页表中最活动部分存放在一个小容量的高速存储部件中组成TLB(Translation Lookaside Buffer)
段页式虚拟存储器
段和页结合的存储管理系统。程序按模块分段,段内再页,主存仍以页为信息传送单位,用段表和页表进行两级管理。
| 优点 | 缺点 |
|---|---|
| 兼取段式和页式系统的优点 | 在地址映射过程中需要多次查表 |