目录
1.地址结构
2.查找快表或页表:从虚拟地址--->物理地址
3.通过物理地址访问数据
设某系统满足以下条件:
•有一个TLB与一个data Cache
•存储器以字节为编址单位
•虚拟地址 14位
•物理地址 12位
•页面大小为 64B
•TLB 为四路组相联,共有16个条目
•data Cache 是物理寻址、直接映射的,行大小为4B,共有16 组
写出访问地址为 0x03d4,0x00f1和0x0229的过程。
1.地址结构
因为本系统以字节编址,页面大小为64B,则页内偏移地址为=6位,所以虚拟页号为14-6=8位,物理页号为12-6=6位。因为TLB为四路组相联,共有16个条目,则TLB共有 16/4=4组,因此虚拟页号中低位就为组索引,高6位为 TLB 标记。
虚拟地址结构:
Cache行大小为4B,物理地址中低位为块偏移,Cache 共有16组,可知接下来=4位为组索引(Cache索引),剩下高6位作为标记。
物理地址结构:
2.查找快表或页表:从虚拟地址--->物理地址
•将十六进制的虚拟地址转化为二进制形式"0x03d4","0x00f1"和"0x0229":
•"0x03d4"
虚拟页号:00001111,页内偏移:010100,TLB标记:000011,组索引:11
对于0x03d4,组索引为3(11,2^0+2^1=3),TLB标记为0x03,查TLB,第3组中正好有标记为03的项,有效位为1,可知页面在主存中,对应的物理页号为0d(001101),再拼接页内地址010100(页内偏移),可得物理地址为0x354(001101010100)。
注:物理地址的物理页号和页内地址有多少位都是看物理地址结构的,所以事先要把虚拟地址结构和物理地址结构都分析好。
•"0x00f1"
虚拟页号:00000011,页内偏移:110001,TLB标记:000000,组索引:11
对于0x00f1 ,组索引为3,TLB标记为0x00,查TLB,第3组中没有标记为00的项,再去找页表,虚拟页号为0x03(二进制00000011,十六进制0x03),页表第3行的有效位为1,可知页面在主存中,物理页号为02(000010),再拼接页内地址110001,可得物理地址为0x0b1(000010110001)。
•"0x0229"
虚拟页号:00001000,页内偏移:101001,TLB标记:000010,组索引:00
对于0x0229,组索引为0,TLB标记为0x02,查TLB,第0组中没有标记为02的项,再去找页表,虚拟页号为0x08(二进制00001000,十六进制:0x08),页表第8行的有效位为0,页面不在主存中,产生缺页中断。
3.通过物理地址访问数据
找出在主存中的页面的物理地址后,就要通过物理地址访问数据,接下来要找该物理地址的内容在不在 Cache 中,在主存中的页面物理地址如下:刚刚算出来的,“0x03d4”对应物理地址“0x354”,“0x00f1”对应"0x0b1"。
•"0x354"
物理页号(Cache标记):001101,页内偏移:010100,Cache索引:0101,偏移:00
对于0x354,Cache索引为5(0101,2^0+2^2=5),Cache标记为0x0d(001101),对照Cache中索引为5的行,标记正好为0d,有效位为1,可知该块在Cache中,偏移0(00),即块0,可得虚拟地址 0x03d4的内容为36H。
•"0x0b1"
物理页号(Cache标记):000010,页内偏移:110001,Cache索引:1100,偏移:01
对于0x0b1,Cache索引为c(1100,2^2+2^3=12,十六进制:c),Cache标记为0x02,对照Cache中索引为c的行,有效位为0,可知该块不在 Cache 中,则要去主存中查找物理页号为2、偏移为 0x31(11 0001,"11"二进制为"3","0001"二进制为"1")的内容。
以上的例子说明了地址翻译的过程,即从快表TLB-->页表-->Cache和主存-->外存。
从虚拟地址到物理地址:先找TLB,TLB中没有再找页表。
通过物理地址访问数据:先找Cache,Cache中没有记录,则到主存中找。