TLB的作用与机制

TLB(Translation Lookaside Buffer),转换检测缓冲区,是用来帮助CPU中的MMU进行地址转换的。

在可分页系统中,每个进程都有自己虚拟地址空间和虚拟页面,当CPU执行进程代码读到虚拟地址时,不是直接将该虚拟地址送到地址总线上去访问内存,而是交给MMU去处理,进行虚拟地址和物理地址的转换。

虚拟地址和物理地址的转换是依赖于进程 页表的,页表中保存了当前进程虚拟地址空间的页面和实际物理内存中的页框的映射关系的,每个页表表项保存了对应的虚拟页面号映射到的物理页框,没有加载到内存的虚拟页面则有标志标记未映射。

但是,有一点很重要,页表是存放在内存中的,如果每次访问一个虚拟地址都要去访问内存上的页表,综合起来无疑是一笔较大的开销,因此,TLB作为一个MMU内部的硬件单元用于加速虚拟地址和物理地址的转换。

TLB的原理就是将映射到物理页框的虚拟页面的映射关系缓存在MMU中的硬件缓冲当中,每次MMU拿到一个虚拟地址后,都根据地址分析出虚拟页面号,然后查找TLB中有没有该页面的项目,有的话则取出其中的物理页框号,加上页内地址获得实际的物理地址送到地址总线上去访问内存,没有该页面的项目的话,即TLB失效的情况下,有两种方式去处理:

1.硬件处理TLB失效

即发生虚拟页号在TLB中找不到的情况,有两个原因:

a.该页面没有被加载到内存:这种情况就是缺页错误,MMU到进程的页表上查找发现页面没有在内存中,需要引发缺页中断,然后调用操作系统的一个汇编函数,由操作系统根据寄存器中的地址或者最后一条运行的指令拿到发生缺页错误的虚拟地址,根据虚拟页面号从磁盘中将页面加载到内存(当中可能涉及页面交换,由于内存空余页面不足,需要将内存中不常访问使用的页面换出到磁盘上的交换空间),然后更新发生缺页的进程的页表,将该虚拟页号和物理页框号的映射写到页表中,接着返回到CPU上再次执行最后一条指令,此时TLB上仍然没有该虚拟页面的表项,因此,由MMU到进程的页表中查找,找到该页面号的映射关系,取出该映射关系,加入到TLB中(如果TLB的表项中没有空余的空间,则牺牲一条已有表项)中,最后取出表项中的物理页框号,组成物理地址访问物理内存。

b.页面已被加载到内存,只是TLB中没有对应的映射关系:这种情况大部分是由于该页面的映射关系在TLB之前新增表项的时候被牺牲了,因此只要MMU在去进程的页面中重新加载该映射关系既可。


2.软件处理TLB失效

软件处理TLB失效和硬件处理方式雷同,最大的区别在于查找进程页表中的虚拟页面的映射关系以及添加映射关系到TLB表的操作由操作系统来完成。

猜你喜欢

转载自blog.csdn.net/challeng_everything/article/details/79621702
TLB