以下 R4000 文档的第 81 页: http ://www.scribd.com/doc/53181649/70/EntryLo0-2-and-EntryLo1-3-Registers
在每个 TLB 条目中显示一个全局位(这是有道理的)。如果在 TLB 条目中设置了全局位,则在查找期间忽略 ASID。
但是,在下一页中,EntryHi 寄存器有一个保留 (0) 字段来代替 TLB 条目的全局位(如第 82 页的标题中所述)。取而代之的是两个全局位,一个位于每个 EntryLo{0,1} 寄存器中。
一些消息来源(包括“See MIPS Run”)表明,在使用 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 条目)。
那么,两个全局位的原因是什么?它是否适合遗留支持,或者我错过了什么?