【发布时间】:2012-09-03 23:31:41
【问题描述】:
以下 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 条目)。
那么,两个全局位的原因是什么?它是为遗留支持提供的,还是我错过了什么?
【问题讨论】: