虚拟存储器·页式·段式·段页式
主存和辅存共同构成了虚拟存储器,在硬件和系统软件的共同管理下工作。对于程序员而言,虚拟存储器是透明的,将主存和辅存的地址空间统一编址
用户编程允许涉及的地址称为虚地址或逻辑地址,虚拟地址对应的是存储空间称为虚拟空间
实际的主存单元地址称为实地址或物理地址,实地址对应的存储空间称为主存地址空间或实地址空间
- 实地址 = 主存页号 + 页内字地址
- 虚地址 = 虚存页号 + 页内字地址
- 辅存地址 = 磁盘号 + 盘面号 + 磁道号 + 扇区号
CPU使用虚地址访存,由辅助硬件找出虚地址和实地址之间的对应关系,并判断这个虚地址对应的存储单元是否已装入内存
- 在内存,通过地址变换,CPU可直接访问主存指示的数据单元
- 不在内存,则把包含这个 字的一页或一段调入主存后,在通过虚实地址变换访问
页式虚拟存储器
以页为基本单位,虚拟空间与主存空间划分为同样大小的页,主存的页称为实页、页框,虚存的页称为虚页
页表
页表是一张存储在主存中的虚页号和实页号对照表,记录程序的虚页调入主存时被安排在主存中的位置,页表一般长期存在于主存内
1 | 2 | 3 | 4 |
---|---|---|---|
有效位 | 脏位 | 引用位 | 物理页 |
- 有效位(装入位):表示对应页是否在主存
- 脏位(修改位):表示页面是否被修改过,配合回写策略,判断是否需要写回磁盘
- 引用位(使用位):配合替换算法进行设置
CPU运行指令时,虚地址转实地址:
- 页表基址寄存器存放进程的页表首地址
- 根据虚拟地址高位部分的虚拟页号找到相应的页表项
- 装入位为1,则取出物理页号和虚拟地址地位进行拼接,形成实际物理地址
- 装入位为0,说明缺页,需要操作系统进行缺页处理
快表(TLB)
高速缓存器制成,依据程序的局部性原理,内存中的页表称之为慢表,地址转换时,先查快表,命中无需访问主存中的页表
快表通常采用组相联或全相联方式
t | r | p |
---|---|---|
标记 | 有效位 | 实页号 |
具有TLB和Cache的多级存储系统
三种缺失的情况
TLB | Page | Cache | 说明 | |
---|---|---|---|---|
1 | 命中 | 命中 | 命中 | TLB命中则Page一定命中,信息在主存,就可能在Cache |
2 | 命中 | 命中 | 缺失 | TLB命中则Page一定命中,信息在主存,也可能不在Cache |
3 | 缺失 | 命中 | 命中 | TLB缺失但Page可能命中,信息在主存,就可能在Cache |
4 | 缺失 | 命中 | 缺失 | TLB缺失但Page一定命中,信息在主存,也可能不在Cache |
5 | 缺失 | 缺失 | 缺失 | TLB缺失则Page也可能缺失,信息不在主存,也一定不在Cache |
段式虚拟存储器
按照程序的逻辑结构划分,将逻辑地址分为段号和段内地址,虚实地址转换是由段表来是实现的,段表是程序的逻辑段和在主存中存放位置的对照表
段号 | 段首地址 | 装入位 | 段长 |
CPU访存时:
- 根据段号与段表基地址拼接成对应的段表行
- 根据段表行的装入位判断是否调入内存
- 调入内存,则从段表读出该段在主存的起始地址,与段内地址相加,得到对应的主存实地址
段页式虚拟存储器
根据程序的逻辑结构,将每段划分为固定的大小页,主存空间也划分为大小相等的页,程序对主存调入、调出仍以页为基本传送单位
每个程序对应一个段表,每个段表对应一个页表,段的长度必须是页长的整数倍
段号 | 段内页号 | 页内地址 |
CPU访存:
- 根据段号得到段表地址
- 从段表中取出该段的页表起始地址,与虚地址段页号合成,得到页表地址
- 从页表中取出实页号,与页内地址拼接形成实地址
虚拟存储器与Cache的比较
相同 | 不同 |
---|---|
目的均为提供系统性能 | Cache主要解决系统速度,虚拟存储器解决主存容量 |
均把数据划分为小的信息块作为基本传递单位,虚存系统的信息块更大 | Cache由硬件实现,对程序员透明,虚拟存储器由OS和硬件实现,是逻辑上的存储器,对系统程序员不透明,对应用程序员透明 |
都有地址的映射、替换算法、更新策略 | |
均依据程序的局部性原理 |