硬件高速缓存&TLB

      硬件高速缓存是通过高速缓存行寻址的。L1_CACHE_BYTES宏产生以字节为单位的高速缓存行的大小。

为了使高速缓存的命中率达到最优化,采取下列决策:

一个数据结构中最常用使用的字段放在该数据结构内的低偏移部分,以便他们能够处理高速缓存的同一行中。

当为一大数组数据分配空间时,内核师徒把他们放在内存中,以便所有高速缓存行按同一方式使用。


TLB是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存.

TLB是位于内存中的页表的cache,如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址和取数据.

2)tlb的原理

当cpu对数据进行读请求时,CPU根据虚拟地址(前20位)到TLB中查找.
TLB中保存着虚拟地址(前20位)和页框号的对映关系,如果匹配到虚拟地址就可以迅速找到页框号(页框号可以理解为页表项),通过页框号与虚拟地址后12位的偏移组合得到最终的物理地址.

如果没在TLB中匹配到虚拟地址,就出现TLB丢失,需要到页表中查询页表项,如果不在页表中,说明要读取的内容不在内存,需要到磁盘读取.

TLB是MMU中的一块高速缓存,也是一种Cache.

TLB是MMU中的一块高速缓存,也是一种Cache.

在分页机制中,TLB中的数据和页表的数据关联,不是由处理器维护,而是由OS来维护,TLB的刷新是通过装入处理器中的CR3寄存器来完成.

如果MMU发现在TLB中没有命中,它在常规的页表查找后,用找到的页表项替换TLB中的一个条目.

3)tlb的刷新原则

当进程进行上下文切换时重新设置cr3寄存器,并且刷新tlb.

有两种情况可以避免刷tlb.
 第一种情况是使用相同页表的进程切换.
 第二种情况是普通进程切换到内核线程.

lazy-tlb(懒惰模式)的技术是为了避免进程切换导致tlb被刷新.
当普通进程切换到内核线程时,系统进入lazy-tlb模式,切到普通进程时退出该模式.


当内核为某个用户态进程分配页框并将它的物理地址存入页表项时,必须刷新与相应线性地址对应的任何本地TLB表项;在多cpu中,有多个CPU在使用相同的页表集,那么内核还必须刷新这些CPU上使用的相同的页表集的TLB表项。



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值