虚拟内存的作用是什么 虚拟内存有什么用( 三 )


地址翻译:MAP: V → P U {}
MAP(a) = a’:若虚拟地址a中的数据在P中的物理地址a ‘上
MAP(a) = {}:若虚拟地址a中的数据不在物理内存中(无效或存储在磁盘)
开始之前先来了解以下参数:
N=2^n:虚拟地址空间中的地址数量
M=2^m:物理地址空间中的地址数量
P=2^p:页的大小(字节)
虚拟地址(VA, Virtual Address)中的元素:
TLBI:TLB索引
TLBT:TLB标记(tag)
VPO:虚拟页偏移量
VPN:虚拟页号
物理地址(PA, physical address)中的元素:
PPO:物理页偏移(与 VPO 的值相同)
PPN:物理页号
CO:缓存偏移字节
CI:缓存索引
CT:缓存标签

虚拟内存的作用是什么  虚拟内存有什么用

文章插图

5.2 用页表进行地址翻译
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

具体的访问过程为:
通过虚拟地址找到页表(page table)中对应的条目
检查有效位(valid bit) , 是否需要触发页错误(page fault)
根据页表中的物理页编号(physical page number)找到内存中对应地址
把实际地址和虚拟页偏移(virtual page offset)拼接即为最终的物理地址
这里又分两种情况:Page Hit 和 Page Fault
5.2.1 page hit
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

处理器生成一个虚拟地址 , 并把它传给MMU
MMU生成PTE地址 , 并从高速缓存/主存请求得到它
高速缓存/主存向MMU返回PTE
MMU构造物理地址并把它传送给高速缓存/内存
高速缓存/内存返回所请求的数据字给处理器
5.2.2 page fault
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

处理器生成一个虚拟地址 , 并把它传给MMU
MMU生成PTE地址 , 并从高速缓存/主存请求得到它
高速缓存/主存向MMU返回PTE
有效位为零 , 所以MMU触发页故障异常 , 传递CPU控制到系统内核中缺页异常处理程序
处理程序寻找被置换页(如果页脏 , 则将其换出到磁盘)
处理程序从磁盘找到对应页并载入内存/缓存并更新内存中的PTE
处理程序返回到原始进程 , 重启出错指令 , CPU将引起缺页的虚拟地址重新发给MMU , 由于已缓存在主存故会命中
5.3 结合虚拟内存和高速缓存在既有虚拟内存又有SRAM高速缓存的系统中 , 是使用虚拟地址还是物理地址访问SRAM高速缓存的讨论有很多 , 但大多数系统用物理寻址 , 这样多个进程共享虚拟页和存储的值 , 无需处理保护问题 , 因为访问权限的检查是地址翻译过程的一部分 。 虽然缓存已经很快了 , 但还能更快 , 主要思路是地址翻译发生在高速缓存查找之前 , 直接在 MMU和内存之间加上L1缓存 , 于是就有了另外一种设计 , 如图:
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

页表条目(PTE)像任何其他内存中的数据一样缓存在L1中 , PTE可能被其他数据驱逐;PTE命中仍然需要一个小的L1延迟 , 解决办法是使用Translation Lookaside Buffer(TLB) 。 TLB可以认为是页表在处理芯片上的缓存 , 是MMU中的小型集关联硬件缓存 , 将虚拟页号映射到物理页号 , 大多数页表条目位于L1高速缓存 , 但被称为TLB的页表条目的片上高速缓存 , 包含少量页的完整页表条目 , 通常回消除访问L1上的页表条目的开销 。 MMU使用虚拟地址的VPN部分位访问TLB:
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

如图是TLB命中和不命中的两种情况: