2012-09-11 33 views
4

頁以下R4000文檔81: http://www.scribd.com/doc/53181649/70/EntryLo0-2-and-EntryLo1-3-RegistersMIPS R4000:爲什麼每個EntryLo寄存器都有一個全局位?

顯示每個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條目)。

那麼兩個全局位的原因是什麼?遺留支持是否到位,還是我錯過了某些東西?

回答

3

這個問題的答案可以在MIPS®架構中找到對於程序員第三卷:該MIPS32®和microMIPS32™特權資源架構,可在mips.com(需要註冊)。根據該文件中的表9.5,G位表示:

全局位。在TLB寫入中,來自 EntryLo0和EntryLo1的G位的邏輯與成爲TLB條目中的G位。如果TLB 條目G位是1,則在TLB匹配期間將忽略ASID比較。 在從TLB條目讀取時,EntryLo0和EntryLo1 的G位反映了TLB G位的狀態。

換句話說,如果你想要設置G位,你必須在EntryHi和EntryLo寄存器中設置它。如果EntryHi和EntryLo不同意,G位不會被設置。

爲什麼這樣做?它和其他任何方式一樣好,在系統程序員的內存上比替代方案更容易一些。

+0

感謝您的回答,以及偉大的資源! – tj90241

相關問題