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


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

文章插图

若TLB不命中时 , MMU必须从L1缓存中取出相应的PTE , 新取出的PTE存放在TLB中可能覆盖已存在的条目(这里未画出L1缓存 , 下面Interl Core i7部分画出cpu中的L1缓存和MMU的TLB)
这里顺便复习下前面的缓存结构:
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

这里 VPN + VPO 就是虚拟地址 , 同样分成三部分 , 分别用于匹配标签、确定集合 , 若TLB命中 , 直接返回对应页表项(PTE) , 否则 , 就要从缓存/内存中获取 , 并更新 TLB 的对应集合 。 幸好不命中很少发生
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

5.4 多级页表因为虚拟地址的位数比物理内存的位数要大得多 , 所以保存页表项(PTE) 所需要的空间也是一个问题 。 例如:
假设每个页的大小是 4KB(2的12次方) , 每个地址有 48 位 , 一条 PTE 记录有 8 个字节 , 那么要全部保存下来 , 需要的大小是:
2^48×2^?12×2^3=2^39bytes = 512G
所以采用多层页表 , 第一层的页表中的条目指向第二层的页表 , 一个一个索引下去 , 最终寻找具体的物理地址 , 如图是二级页表:
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

K级页表翻译过程如下:
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

5.5 地址翻译实例来看一个简单的例子 , 我们的内存系统设定如下:
虚拟地址14 位
物理地址12 位
页大小 64 字节
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

简单内存系统的TLB的配置为:
存储 16 条记录
4个集合
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

简单内存系统页表:
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

简单内存系统缓存:
16 行 , 每个块 4 个字节
物理地址
直接映射(即 16 个集合)
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

虚拟地址:0x03D4 , 在TLB中找到index为3的set , 且其tag为3的PPN为0D , 加上前面的虚拟地址的VPO即为最终的物理地址
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

得到物理地址 , 在缓存中找到idx为 , tag为0D , 且CO为0 , 则值为36
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

虚拟地址为0x0020 , 虽然TLB中去找到编号为0的set且tag为0的缓存 , 但为0 , 所以TLB Miss了 , 从页表中找到缓存PPN为2 , 则物理地址为0x0A20
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

接下来找到idx为8的缓存 , 但tag不匹配 , 故未命中缓存 , 只能重新读取
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

5.6 Intel Core i7内存系统
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

【虚拟内存的作用是什么 虚拟内存有什么用】5.6.1 Intel Core i7 内存翻译
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

5.6.2 Core i7 1-3层页表项
虚拟内存的作用是什么  虚拟内存有什么用

文章插图

5.6.3 Core i7 4级页表项