一、快表是什么
快表是一种高速缓冲存储器,是用来存放页表项。
在没有快表的情况下,一个虚拟地址要转成一个物理地址至少需要两次访问物理内存,第一次是查询内存中的页表,第二次是访问物理页框。如果有暂存着目标页表项的快表,则通过快表访问页表会比在内存中访问页表快很多,有利于缩短从一个虚拟地址转换成一个物理地址的过程的时间。
二、快表参与下的虚拟地址转换成物理地址的流程
第一步,根据虚拟地址推算出目标页表项的索引,查询快表。
若目标页表项在快表里,则结合虚拟地址的低若干位推算出最终物理地址。
若目标页表项不在快表里,则访问内存中的目标页表项,结合虚拟地址的低若干位推算出最终物理地址,并把该页表项写进快表。
当快表被写满又有新的页表项要写进来时,则按照一定的策略擦除快表中的一个旧页表项。
三、快表与页表的映射方式
那问题就来了,CPU 如何知道目标页表项在不在快表里?在的话,是快表里的第几项?这就涉及到页表项与快表项的映射关系了。
页表项和快表项有三种映射方法,一是全相连,二是直接匹配,三是组相连。
全相连:一个快表项可以存放任意虚拟地址对应的页表项。优点是快表空间利用率高,缺点是每次查询页表项都要遍历快表每一项。
直接匹配:通过对每一个虚拟页号进行模运算得到其在快表中的索引号,但冲突率较高。
组相连:将快表划分为若干个组,给每个组按顺序编号。通过对每一个虚拟页号进行模运算得到其在快表中的组号,然后在组内进行遍历查得目的页表项。如果每一组中有 n 个页表项,则称该方法为 n 路组相连。