4

次の R4000 ドキュメントの 81 ページ: http://www.scribd.com/doc/53181649/70/EntryLo0-2-and-EntryLo1-3-Registers

各 TLB エントリに 1 つのグローバル ビットを表示します (これは理にかなっています)。グローバル ビットが TLB エントリに設定されている場合、ルックアップ中に ASID は無視されます。

However, on the following page, the EntryHi register has a reserved (0) field in place of the TLB entry's global bit (as mentioned in the header on page 82). In its place, there are two global bits, one in each EntryLo{0,1} register.

Several sources (including "See MIPS Run") suggest that, when writing a TLB entry using the TLBW instruction, if the EntryLo0 (G) and EntryLo1 (G) bits are not identical, "bad things will happen." Other sources, such as a forum post on linux-mips.org, (http://www.linux-mips.org/archives/linux-mips/2003-04/msg00226.html) suggest that "in other words, writing a TLB entry with only one of the G bits in the EntryLo{0,1} register pair set will result in a TLB entry with the G bit cleared." (Which, in and of itself, is unclear what exactly will happen -- "something bad", or a TLB entry with its G bit clear).

What is the reason for two global bits, then? Is it in place for legacy support, or am I missing out on something?

4

1 に答える 1

3

これに対する答えは、 mips.comで入手できるMIPS® Architecture For Programmers Volume III: The MIPS32® and microMIPS32™ Privileged Resource Architectureで見つけることができます(登録が必要です)。そのドキュメントの表 9.5 によると、G ビットの意味は次のとおりです。

グローバルビット。TLB 書き込みでは、EntryLo0 と EntryLo1 の両方からの G ビットの論理 AND が TLB エントリの G ビットになります。TLB エントリの G ビットが 1 の場合、TLB 一致中に ASID 比較は無視されます。TLB エントリからの読み取りでは、EntryLo0 と EntryLo1 の両方の G ビットが TLB G ビットの状態を反映します。

つまり、G ビットを設定する場合は、EntryHi レジスタと EntryLo レジスタの両方に設定する必要があります。EntryHi と EntryLo が一致しない場合、G ビットはセットされません。

なぜこのようにしたのですか?これはどの方法よりも優れた方法であり、システム プログラマの記憶には他の方法よりも少し簡単です。

于 2012-09-13T20:54:59.613 に答える