功能:
缓存
将主存作为磁盘的高速缓存,在主存和磁盘之间传递数据。
主存被组织成M个连续字节单元组成的数组,每个字节都有唯一的物理地址。
n位地址空间:2^n个地址的虚拟地址空间
m位地址空间:2^m个地址的虚拟地址空间
VP(虚拟页):2^p个地址- 未分配的
- 未缓存的:已分配但未缓存在物理内存中
- 缓存的
PP(物理页,页帧):2^p个地址
SRAM缓存:CPU和主存之间的L1,L2,L3高级缓存
DRAM缓存:- 虚拟页缓存在主存
- 全相联:每一个虚拟页可以放在任意的物理页中
- 写回:直到这个缓存需要被置换出去,才写入到内存中
地址翻译
VA(虚拟地址)
- VPN(虚拟页号):
n-1位~p位.MMU(内存管理单元)通过该值选择PTE的表项 - VPO(虚拟页面偏移):
p-1位~0位
- VPN(虚拟页号):
PA(物理地址)
- PPN(物理页号):
m-1位~p位对应页表存储的地址 - PPO(物理页偏移量):
p-1位~0位。与VPO相同。
- PPN(物理页号):
PTE(页表):
- 位于物理内存
- 由有效位(是否被缓存)和地址(物理页号或磁盘地址)组成
- 局部性原理:程序趋向于在工作集(较小的工作页面)工作。如果工作集超出了物理内存的大小,程序会thrashing(抖动)
多层页表:
由于虚拟地址的位数比物理内存的位数要大,为了减少PTE所占的空间,所以采用多层页表,第n层的页表中的条目指向第n+1层的页表,逐层索引下去直到得到物理地址。
VPV被划分成K段,对应每级页表的索引。
TLB(翻译后备缓冲器):(图CS6)
位于MMU,作为页表在CPU上的缓存。
- TLBT:VA的n-1位~p+t位
- TLBT:VA的p+t+1位~p位
访问流程:
- CPU生成1个虚拟地址并传给MMU。
- MMU从TLB取出相应的PTE
- TLB不命中:
- MMU生成PTE地址,并向主存发送请求。
- 主存向MMU返回PTE
- 页命中:
- MMU生成物理地址,并向主存发送请求。
- 主存向CPU返回数据
- 缺页:
- PTE的有效位是0,DRAM缓存不命中。
- 触发缺页异常后,内核调用异常处理程序。
- 异常处理程序返回后重新执行访问指令。
- 页命中:
内存管理
操作系统为每个进程提供独立的虚拟地址空间。多个虚拟页面的地址可以映射到同一物理页面。- 简化共享:不同虚拟空间的地址可以映射到同一物理地址。
- 简化链接:由于进程使用统一的地址空间
链接器生成的可执行文件独立于实际位置。 - 简化加载:CP566?
- 保护内存
在PTE上添加额外的许可位来控制访问权限(读、写、执行)。当指令违反访问权限时,Linux shell报告段错误异常。
实例:CP573
14 位的虚拟地址(n=14)
12 位的物理地址(n=12)
页大小为 64 字节(P=64)
- TLB:
- 4个集合
- 每个集合有 4 条记录
- DRAM缓存:
- 16 个组,每个块 4 个字节
- 直接映射(即 16 个集合)
CPU读虚拟地址0x03D4:
- 根据CP575的表1所示,MMU根据VPN(即TLBI和TLBT)在TLB检索是否有对应的PPN。
- 命中则可以通过PPN和VPO获得对应的PA;不命中时,则需要通过PTE获得对应的PPN(也可能缺页)。
- MMU将PA发送给缓存。如CP575表2所示,缓存检测CT标记后(可能缓存不命中),读出在偏移量CO的数据。