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

时间:2012-09-11 04:42:50

标签: mips tlb

以下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}寄存器中有一个。

有几个来源(包括“参见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条目将导致TLB条目的G位清零。“ (其本身并不清楚究竟会发生什么 - “不好的事情”,或者其G位清晰的TLB条目)。

那么两个全局位的原因是什么?它是否适用于传统支持,或者我错过了什么?

1 个答案:

答案 0 :(得分:3)

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

  

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

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

为什么这样做?这是一种很好的方式,系统程序员的内存比替代方案更容易。