什么是快表
又叫做联想寄存器(translation lookaside buffer)是一种访问速度比内存快得多的高速缓存,用来存放最后访问的页表项的副本,可以加速地址变换的速度,于此对应,内存中的页表通常被叫做慢表
不能把整个页表都放在TLB中,因为很贵
引入快表后,地址的变换过程
1.计算页号P和页内偏移量W
2.比较页号P和页表大小M如果P>=M则会发生越界中断,否则继续执行。(页号从0开始,页表长度至少为1,因此P=M也会越界)
3.对比快表TBL中是否有对应的页号。
如果命中,则直接通过快表中的内存块号访问(只需要一次访存)
如果没有命中 goto 4
4..页表中页号P对应的页表项地址=页表起始地址F+页号P*页表项长度,取出该页表项内容b,就是内存块号
把找到的页号+内存块号存入快表(需要两次访存)
由于查询快表的速度比查询慢表的速度快得多,因此可以节约很多时间
一般来说快表命中率有90以上
例子:假如某系统采用了快表地址变换机构,访问一次快表耗时1us,访问一次内存100us,快表命中率90%,那么访问一个逻辑地址的平均耗时为:
=(1+100)*0.9 +(1+100+100)*0.1
=111us
有些系统支持快慢表同时查找
=(1+100)*0.9+(100+100)*0.1=110.9us
如果不采用快表机制,访问一个逻辑地址需要100+100=200us
局部性原理
时间局部性
如果执行了程序中的某条指令,那么不久后这条指令可能再次执行,如果某个数据被访问过,不久之后该数据可能会再次被访问(程序中有大量循环)
空间局部性
一旦程序访问了某个存储单元,不久之后,其附近的存储单元也有可能被访问(很多数据在内存中都是连续存放的)
上小结说的基本地址变换机构,每次访问一个逻辑地址,都要查询内存中的页表,由于局部性原理,可能连续很多次查到的都是同一个页表项

TLB只有页表项的副本,而cache可能有其他各种数据的副本