SPARC仕様自体は、MMUの使用を義務付けておらず、MMUの特定の実装を必要としません。これは、CPUとMMU間のインターフェイスを定義するだけです(MMUアクティビティを介して生成する必要のあるトラップが主に懸念されます)。
とは言うものの、ここで私が知っているのはSun /FujitsuのSPARCCPUについてのみであり、組み込みのもの(LEONおよびその前身)については知らないことを述べなければなりませんsun4
。1990年のワークステーションCPUまでのSPARCCPUにはMMUがありました。
多くの必須ではないSPARCCPU機能と同様に、MMUの制御は、A ddress Sペース I識別子(ASI)と呼ばれるものを介して行われます。
これらのASIは、x86セグメンテーションとメモリマップドレジスタの組み合わせとして最もよく説明できるSPARCアーキテクチャの機能です。それらを使用すると、SPARC CPUに対する「アドレス」の意味が変わります(x86でセグメント[reg]を使用すると、「アドレス」の意味が変わるのと同じです)。ただし、ASIアドレス範囲の背後に構成可能な「記述子テーブル」がありません。 、ただし通常はハードウェア固有の制御レジスタ。つまり、それらは通常の物理アドレス空間ではなく、代替アドレス範囲に「マッピング」されます。
最初にsun4
、、、sun4c
およびsun4d
アーキテクチャsun4m
(32ビットsparcv7)で、MMUが呼び出されsrmmu
(SPARC参照MMU)、2レベルのハードウェアテーブルウォークが実装されました。これは非推奨であり、これに対するコントロール登録が何であったかを頭から覚えていません。
Sunがsun4u
アーキテクチャを作成したとき、ハードウェアで実装された変換テーブルウォークは、オーバーヘッドが高すぎると同時にメモリを大量に消費すると見なされていました。したがって、テーブルウォーキングMMUの実装は完全にヤンクされ、ソフトウェアにMMU機能のほとんど(すべてではない)を実装することになりました。特に、ハードウェアにプログラム可能なのは、TLBの内容であるトランスレーションルックアサイドバッファーだけです。つまり、マッピングがTLBに簡単にキャッシュされない場合、MMUミストラップが発生し、トラップハンドラーがテーブルルックアップを実行して再プログラミングします。最後のTLB(後で命令を再発行することが成功するように)。sfmmu
(ソフトウェアMMU)という名前の由来はここにあります。MMUはASI_MMU
、実際のコンテキストレジスタはCPU固有ですが..。
参考までに、以下を参照してください。
再、ARM:別の投稿として、もう一度質問することをお勧めします。ARMの存在を超えて、複数の(mmuなしとmmuありの両方の)実装が進化しました(たとえば、MMU付き/なしのCortex-A8 / M3ベースのARMv7命令セットがあります)。ARM自体によるMMU仕様は、通常VMSA(仮想メモリシステムアーキテクチャ)と呼ばれ、いくつかのリビジョンがあります。この投稿はすでに長すぎて詳細を含めることができません;-)