MIPS R4000:为什么每个EntryLo寄存器中都有一个全局位?

MIPS R4000:为什么每个EntryLo寄存器中都有一个全局位?,mips,tlb,Mips,Tlb,以下R4000文件的第81页: 在每个TLB条目中显示一个全局位(这很有意义)。如果在TLB条目中设置了全局位,则在查找期间将忽略ASID 但是,在下一页上,EntryHi寄存器有一个保留(0)字段来代替TLB条目的全局位(如第82页标题中所述)。取而代之的是两个全局位,每个EntryLo{0,1}寄存器中一个 一些来源(包括“请参阅MIPS运行”)建议,在使用TLBW指令编写TLB条目时,如果EntryLo0(G)和EntryLo1(G)位不相同,“会发生不好的事情。”其他来源,如linux

以下R4000文件的第81页:

在每个TLB条目中显示一个全局位(这很有意义)。如果在TLB条目中设置了全局位,则在查找期间将忽略ASID

但是,在下一页上,EntryHi寄存器有一个保留(0)字段来代替TLB条目的全局位(如第82页标题中所述)。取而代之的是两个全局位,每个EntryLo{0,1}寄存器中一个

一些来源(包括“请参阅MIPS运行”)建议,在使用TLBW指令编写TLB条目时,如果EntryLo0(G)和EntryLo1(G)位不相同,“会发生不好的事情。”其他来源,如linux-MIPS.org上的论坛帖子(http://www.linux-mips.org/archives/linux-mips/2003-04/msg00226.html)暗示“换句话说,在EntryLo{0,1}寄存器对集中只使用G位中的一位写入TLB条目将导致G位被清除的TLB条目。”(这本身并不清楚到底会发生什么——“坏东西”,或使用G位被清除的TLB条目)


那么,使用两个全局位的原因是什么?它是用于传统支持的,还是我遗漏了什么?

关于这个问题的答案可以在MIPS®程序员体系结构第三卷:MIPS32®和MicroIPS32中找到™ 特权资源体系结构,可在(需要注册)获得。根据该文件中的表9.5,G位表示:

全局位。在TLB写操作中,G位的逻辑“与”都来自这两个位 EntryLo0和EntryLo1成为TLB条目中的G位。如果 条目G位为1,在TLB匹配期间忽略ASID比较。 在从TLB条目读取时,EntryLo0和EntryLo1的G位 反映TLB G位的状态

换句话说,如果要设置G位,则必须在EntryHi和EntryLo寄存器中都设置G位。如果EntryHi和EntryLo不一致,则不会设置G位


为什么要这样做?这是一种很好的方法,而且比其他方法更容易占用系统程序员的内存。

感谢您的回答和大量资源!