TLB简介

TLB简介映射机制的本质 是一个程序能够判断出其使用的某个地址是否在自己的地址空间 并且迅速找出相对应的物理地址 简单来说就是 VADD PADD 的过程 但是 mips 中 TLB 不命中填充的过程不是由硬件来完成的 因此需要软件来做 也就是当发现一个无法译码的地址的时候 就触发一个 TLB 重装异常 然后由程序作剩下的事情 由此可以看出 其实转换得过程就是一个输入键值 VADD 和一个输

映射机制的本质:是一个程序能够判断出其使用的某个地址是否在自己的地址空间,并且迅速找出相对应的物理地址。

简单来说就是V ADD -〉P ADD的过程。
但是mips中,TLB不命中 充的过程不是由硬件来完成的,因此需要软件来做。
也就是当发现一个无法译码的地址的时候,就触发一个TLB重装异常,然后由程序作剩下的事情。

由此可以看出,其实转换得过程就是一个输入键值(V ADD)和一个输出值(P ADD), 而mips里有以下几个寄存器来装载这些东西。
EnrtyHi寄存器包含 V ADD的VPN,ASID,PageMask。
EntryLo寄存器包含输出值P ADD的PFN,N/C,D,V等控制位,用来描述和控制该物理地址的。

ASID:是操作系统用来识别当前进程的地址空间,它不会被异常改变,所以当发生TLB重装异常的时候,他依旧标识着当前进程的信息。
N/C: 是否被缓存,32位的使用的是N(Non cacheable)置1表示不用缓存,0表示用。
总之如果TLB匹配出的物理地址的N位表示使用缓存的时候,cpu就到cache中去找该物理地址中的数据,发现如果cache里面没有,再从内存里找,并且要留一份拷贝到cache中。
如果标志不使用缓存,那么就不跟缓存打交道。也不负责缓存的回写。
V:是否有效。如果是0, 则相应得物理地址是不能使用的。TLB初始化的时候需将v清0。
D:是否允许数据写入。 置1表示相应地址可写。

另外还有几个TLB内部的寄存器。
Index寄存器:当使用TLB指令读写TLB入口的时候,就读取更改index对应的那个TLB入口。 Index的有效域表示了该cpu支持的最大TLB入口数。

Random寄存器:仅在tlbwr指令时使用,目的是随机替换一个TLB,节约tlb重装的时间,仅此而已。

Index寄存器初值是最大,即TLB入口个数。然后随着每条指令的执行,而递减,当到某一个值A 的时候,就重新置到最大值重复着一过程。目的是保护index为0—A-1 的TLB不会被随机替换策略换出。
在32上A的值是不能改的。 而64位增加了个wired寄存器来更改此值。

Context寄存器:用来加速TLB的重装入。

TLB缺失异常发生的时候,导致异常的V ADD已经被装入了BadVAddr,并且VPN都已经装入了EntryHi的相应域,这显然已经作了很多事情了,
但是Context寄存器更深一步,将常驻内存页表的基地址的高位,异常地址的VPN都放入到了context寄存其中。

PageMask:用来支持不同页大小的tlb入口。
      24             13    0
   …| PageMask 域   |… |
假设我们现在需要映射的内存体系是以16k为一页的,那么我们现在VPN即虚页号,还是忽略底12位。按照4k来,PFN也如此。 但是这是就用上PageMask 了。
我们此时需要将PageMask的有域的底两位置1。TLB匹配的是活就直接将VPN的底两位这忽略掉直接拷贝到PFN上了。这就实现了16k页面的匹配。


MMU的控制指令:
Tlbr: (tlb read ) 会根据index来读tlb表项。
注意:此指令会覆盖整个EntryHi,所以之后还需要重新写入正确的当前ASID值。

Tlbwi: (tlb write by index) 根据index来写tlb表项。

Tlbwr: (tlb write by radom)  对radom寄存器选中的tlb表项进行写操作
注:一般tlbwr被用在tlb冲撞异常处理中写入一个新的tlb表项。 其他任何情况都是用tlbwi

Tlbp: (tlb prob) 在tlb中查找VPN, ASID 都跟EntryHi寄存器中的相应域匹配的入口,并把相应表项的索引值存入index寄存器。如果匹配失败,那么将index的P位(最高为)置1。
注:1:tlb指令不能从tlb中预取数据, 必须在其后运行tlbr才可以实现。
2:tlb内部是流水化的,因此在tlbp指令之后,不能紧跟读取和存储的操作。
                                                       
完整的地址译码过程:
1:将cpu访问的地址去掉底12位,生成VPN,然后加上ASID一起组成一个TLB入口键值。
2:TLB内部进行匹配,匹配成功,将输出值的PFN和地址的底12位组合构成完成的物理地址。
3:判断该物理地址的特性,验证V,D项,如果V= 0,或者D=0 (不可写)并且操作是写操作的时候会引发其他的异常, badVaddr会将该地址装入。
4:判断该物理地址是否被缓存,如果缓存了,可以从cache中读取,但如果cache不明中,到内存中读完之后,还要留一份拷贝给cache; 如果没有被缓存,那么跟cache不沾边。

但是当TLB缺失异常的时候,需要做一下事情:
1:根据context寄存器中内容指的也表项去看是否存在一个有效的转换。如果还不存在,就表示发生了嵌套的TLB异常,那么则转入到通用的异常处理函数中。
2:如果存在正确的地址转换,那么在TLB内部创建一个实现此译码的TLB入口。
3:选择一个可以丢弃的TLB入口,一般用tlbwr 即可。

注:发生双重异常的时候,不会改变异常返回寄存器EPC的值。







由于原博客打不开,故由百度快照保留备忘

原博客网址:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=&id=




















































版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212002.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午9:04
下一篇 2026年3月18日 下午9:04


相关推荐

  • Ubuntu Server 18.04 安装图解教程

    Ubuntu Server 18.04 安装图解教程

    2021年7月11日
    74
  • adb操作命令详解及大全

    adb操作命令详解及大全adb是什么?:adb的全称为AndroidDebugBridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具。adb的工作方式比较特殊,采用监听SocketTCP5554等端口的方式让ID

    2022年6月12日
    30
  • 图像处理中经常用的一幅图片Lena.jpg

    图像处理中经常用的一幅图片Lena.jpg在数字图像处理中,Lena(Lenna)是一张被广泛使用的标准图片,特别在图像压缩的算法研究中。(为什么用这幅图,是因为这图的各个频段的能量都很丰富:即有低频(光滑的皮肤),也有高频(帽子上的羽毛),很适合来验证各种算法)然而,这张图片背后的故事是颇有意思的,很多人都抱有学究都是呆子的看法,然而Lena对此就是一个有力的驳斥。lena(lenna)是一张于1972年11月…

    2022年6月19日
    80
  • JAVA队列( Queue ) 详解[通俗易懂]

    JAVA队列( Queue ) 详解[通俗易懂]什么是队列?队列是一种特殊的线性表,遵循先入先出、后入后出的基本原则,一般来说,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,但是java的某些队列运行在任何地方插入删除;比如我们常用的LinkedList集合,它实现了Queue接口,因此,我们可以理解为LinkedList就是一个队列;java队列特性队列主要分为阻塞和非阻塞,有界和无界、单向链表和双向链表之分;阻塞和非阻塞阻塞队列入列(删除元素)时,如果元素数量超过队列总数…

    2022年7月9日
    36
  • 定了!“千问”成阿里旗下AI品牌统称

    定了!“千问”成阿里旗下AI品牌统称

    2026年3月13日
    2
  • 【mokey命令】

    【mokey命令】mokey 命令简要步骤一 Monkey 简介二 Monkey 的基本用法三 Monkey 测试的一个实例四 使用 monkeyhelp 命令查看命令参数 1 参数 p2 参数 v3 参数 s4 参数 throttle 毫秒 5 参数 ignore crashes6 参数 ignore timeouts7 参数 ignore security exceptions8 参数 kill process after error9 参数 monitor nativ 毫秒

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号