【问题标题】:MIPS R4000: Why is there a global bit in each EntryLo register?MIPS R4000:为什么每个 EntryLo 寄存器中都有一个全局位?
【发布时间】: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 条目)。

那么,两个全局位的原因是什么?它是为遗留支持提供的,还是我错过了什么?

【问题讨论】:

    标签: mips tlb


    【解决方案1】:

    这个问题的答案可以在MIPS® 程序员架构第三卷:MIPS32® 和 microMIPS32™ 特权资源架构中找到,地址为mips.com(需要注册)。根据该文档中的表 9.5,G 位表示:

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

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

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

    【讨论】:

    • 感谢您的回答和很棒的资源!
    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多