深入浅出内存管理--高速缓存(cache memory)和转换后援缓冲(TLB)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rikeyone/article/details/85041830

高速缓存(Cache memory)

CPU的运行速度时非常快的,当今的CPU主频都是GHZ级别的,而对于内存DDR来说,每次存取操作都会耗用很多的时钟周期,这意味着,CPU需要等待很长时间来完成一次读或者写操作。
为了缩小CPU和DDR两者之间速度上的不匹配造成的等待问题,硬件上引入高速缓存,这利用了局部行原理,简单来说,该原理的想表达的就是:CPU运行所需要的内存一般都在当前访问地址的附近,最近访问的地址很有可能会被再次访问。因此当我们引入小而快的缓存来存放最近最常使用的代码和数据,将极大提高系统的运行效率。
现在的CPU架构中,一般会为每个CPU都配置各自的L1-cache,也叫做level 1缓存,根据不同架构,可能还会由L2-cache和L3-cache,这让整个缓存的设计变得更加复杂,缓存和内存之间的一致性问题也变得更加复杂,但是庆幸的是,这一切都叫给硬件去解决和保证了,软件不用参与解决数据的一致性。

转换后援缓冲(TLB)

这是另外一个硬件单元,全称叫做Translation Lookaside Buffer。按照它的作用来说,它应该叫页表缓冲器可能更加贴切,它的作用是为了快速查找和匹配我们要访问的虚拟地址到物理地址映射所对应的页表项。
内核会维护系统中虚拟地址到物理地址的映射的页表,而这个页表是在内存ddr中维护的,在页表配置完成后,当软件再去访问一个虚拟地址时,MMU会把这个访问的页表项放到TLB缓冲器中,按照局部性原理,最近访问的内存很有可能会再次被CPU访问,因此当下次再次访问到此地址时,MMU会优先从TLB快速缓冲区中查找页表项,这将提高系统查找页表的效率。不用每次都从速度较慢的内存中去查找页表项了。`
注意:虽然TLB也是一种缓存,但是它与内存cache有一个很大的区别,处理器是不能自动处理TLB缓冲和内存中页表的一致性的。原因也很明显:内存中的页表是内核维护的,所以它什么时候要更新,什么时候不用更新是硬件所不知道的。
因此为何TLB缓冲的任务就交给了软件来处理了,内核中提供了一组TLB操作的方法,当TLB需要更新时,可以选择对应合适的操作来保证TLB页表缓存和内存缓存的一致性。
本文不会一一列举这些方法,只举几个作为例子:

 flush_tlb_all
 flush_tlb_page
 flush_tlb_mm
 flush_tlb_range

猜你喜欢

转载自blog.csdn.net/rikeyone/article/details/85041830
今日推荐