欢迎各位兄弟 发布技术文章
这里的技术是共享的
MMU,全称内存管理单元,一般是CPU里的硬件电路,也可单独集成电路,主要功能是把虚拟地址转换为物理地址。通过段机制和页机制完成转换.
至此,MMU可以完成地址转换,通过建立页表,把虚拟地址通过页表查找,得到最终的物理地址。例如,当需要访问内存中的一个数据,通过这个数据的虚拟地址查找页表,一旦在页表中找到(hit),就通过找到的物理地址寻址到内存中的数据。如果页表中没有找到(miss),表示页表中没有建立这个数据虚拟地址到物理地址的映射,通过缺页异常,建立这个页表映射项。
但是有个问题,当我们经常使用一些不变的数据,时间浪费在查找页表上了,尽管我们上次已经找过这个数据和它的页表项了 。
于是为了加快速度,减少不必要的重复,TLB出现了。
TLB,俗称快表,因为它确实快。TLB是MMU的一部分,实质是cache,它所缓存的是最近使用的数据的页表项(虚拟地址到物理地址的映射)。他的出现是为了加快访问数据(内存)的速度,减少重复的页表查找。当然它不是必须要有的,但有它,速度就更快。
TLB很小,因此,缓存的东西也不多。主要缓存最近使用的数据的数据映射。TLB结构如下图:
如果一个需要访问内存中的一个数据,给定这个数据的虚拟地址,查询TLB,发现有(hit),直接得到物理地址,在内存根据物理地址取数据。如果TLB没有这个虚拟地址(miss),那么就只能费力的通过页表来查找了。
关于cpu如何读取内存中的一个数据,下面流程图说明:
当进程地址空间进行了切换,比如现在是进程1运行,TLB中放的是进程1的相关数据的地址;突然切换到进程2,TLB中原有的数据不是进程2相关的,此时TLB需要刷新数据。怎么刷新数据?
目前两种方法:一,全部刷新。二,部分刷新。
全部刷新很简单,但花销大,很多不必刷新的数据也进行刷新,增加了无畏的花销。
部分刷新是根据标志位,刷新需要刷新的数据,保留不需要刷新的数据。
[1] Translation lookaside buffer
[2] Memory management unit
[3] Frank Uyeda (2009). “Lecture 7: Memory Management ” (PDF). CSE 120: Principles of Operating Systems. UC San Diego. Retrieved 2013-12-04.
来自 https://blog.csdn.net/wagsyang/article/details/79234491