TLB (Translation Lookaside Buffer)
通过一个线形地址访问一个物理页地址,CPU其实需要做很多工作,需要根据索引找到PTT\PDT\物理页;TLB就是线形地址和物理页的映射关系的缓存,提高寻址效率
通过一个线形地址访问一个物理页,比如 : DWORD 其实未必真正读的是4个字节,我们先读的PDE 再读 PTE 最后读的 4个字节的页;在 2-9-9-12 会读24个字节,如果跨页可能更多
1.一个cpu就有一组TLB
1.1 缓存一般页表(4k字节页面)的指令页表缓存
1.2 缓存一般页表(4k字节页面)的数据页表缓存
1.3 缓存大尺寸页表(2M/4M字节页面)的指令页表缓存
1.4 缓存大尺寸页表(2M/4M字节页面)的数据页表缓存
2.只要Cr3变化(进程切换),TLB立马刷新
//当进程发生变化的时候,这个TLB就没有意义了
//操作系统的高2G映射基本不会变,如果Cr3发生了改变,TLB刷新,重建高2G以上很浪费,大家还记得PDE\PTE的G位 (全局页),如果该位为1就不会被刷新掉这条映射数据
LA
存储的是线性地址的基址 : 也就是前20位(一个页)
PA
存储的是物理地址的基址 : 也就是前20位(一个页)
ATTR
属性是 PDPET PDT PET 三个的属性AND起来的,如果是10-10-12就是PDE AND PTE
LRU
统计信息 : TLB大小毕竟有限,冷热区分,冷的可以被替换掉
//INVLPG指令 : 删除TLB中的某一条记录
//TLB可以当作是一组数组,在CPU里面,和其它寄存器地位是一样的
//Cr3 : 页目录表基址
CPU缓存是位于CPU与物理内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。
CPU缓存可以做的很大,有几K、几十K、几百K 甚至上M的也有。
CPU缓存与TLB的区别:
TLB : 线性地址 <-----> 物理地址
CACHE : 物理地址 <-----> 内容
PWT(Page Write Through)
1 : 写Cache时也要将数据写入内存
0 : 写Cache时由CPU控制寄存器决定是否写入内存
PCD(Page Cache Disable)
1 : 禁止写入cache,直接写入内存
0 : 可以写入cache