用一个具体的例子,将TLB,MMU,v*n,PPN,PTE,L1 d-cache联系起来.
先对例子的环境做些assumptions:
- 内存是按序访问的
- 每次访问一个字节
- 虚拟地址共14位
- 物理地址共12位
- 页大小是64字节
- TLB是四路组相联
- L1 d-cache是物理寻址。
VA(vitual address)由v*n与VPO组成
PA(physical address)分为PPN与PPO,PA的计算需要MMU
TLB表是四路组相联,一个虚拟地址(VA)中,先提取出v*n部分,v*n又被分成TLBT(标志部分)和TLBI(索引部分),然后再TLB表中匹配,若成功,则得出PPN,加上虚拟地址的另一部分VPO,MMU把它们合并成PA。
该图为页表,页表主要组成:物理页号(PPN),有效位,页表当然是一张表,以虚拟页号(v*n)作为索引。页表的重要地方是,让虚拟页号与物理页号联系在一起,前者v*n是CPU从寄存器里拿出的虚拟地址的高位部分(CPU对物理地址与虚拟地址区别一无所知),后者则是CPU真正访存(内存)的地址的高位部分。
该图为物理地址physical address,组成部分为PPN(页号)与PPO(页内偏移),其中PPN被高速缓存机制用作为CT(cache tag)标志部分来行匹配,CI(cache index)作为组索引来进行组选择,CO(cache offset)用作行内偏移来选择目的数据块(CPU访存的最终目的地)。
该例子中的L1 d-cache高速缓存(L1级高速缓存)平面图,共16个sets(组),里面共有4个block(数据块)。这里插一下话,当MMU生成了PA后,下一步就是:MMU发送物理地址(PA)给缓存,缓存由PA中抽取出CT,CI,CO,然后对照该表匹配,匹配成功则称为缓存命中,并读取目的数据块返回给MMU,MMU返回给CPU。失败则只能去访问内存了