回答:
MMUを含むシステムをエミュレートするシステムエミュレーターは、ソフトウェアでMMUを効果的にエミュレートするため、前述の質問に対する答えは「はい」です。ただし、仮想メモリにはメモリアクセス制御を強制する何らかの方法、または少なくともアドレス変換が必要なため、制御対象のソフトウェアを実行するCPUの完全なソフトウェアエミュレーションが必要か、ハードウェアの支援が必要です。
したがって、MMUのないシステムを構築し、QEMUを移植し、不足している部分を追加して仮想メモリを実際に役立つようにし(たとえば、ホストシステムでスワップのサポートを追加)、QEMUでMMUを必要とするオペレーティングシステムを実行します。ゲストオペレーティングシステムで期待されるすべての保護(QEMUのバグを除く)。
仮想メモリを提供するために使用されるMMUなしの「エミュレーション」の実例の1つは、70年代後半から80年代前半の8ビットシステムで、コードとデータのページングとスワップが可能なZ-machineです。 。これは、基礎となる実プロセッサで仮想プロセッサをエミュレートすることで機能しました。そのようにして、インタプリタは実行中のプログラムが「見る」メモリレイアウトを完全に制御し続けます。
実際には、少なくともオペレーティングシステムレベルで、仮想メモリのサポートにはMMUが必要であると一般に考えられています。示されているように、MMUのないカーネルですか?、MMUのないシステムで実行できるようにLinuxカーネルを構築することは可能ですが、結果の構成は非常に珍しく、非常に特定のユースケースにのみ適しています(特に悪意のあるソフトウェアはありません)。仮想メモリ(スワップなどmmap
)を必要とする多くのシナリオをサポートしていない場合があります。
これは、仮想メモリと呼ばれるものによって異なります。興味深いモデルは、古いWin16モデルです(Windows NTではなく、古いWindows 3.xから最もよく知られています)。そのモデルではGlobalLock
、とGlobalUnlock
、LocalLock
そしてLocalUnlock
関数がありました。これらは、仮想メモリの協調的な手動管理の形式でした。これは(アプリケーション)ソフトウェアで行われたため、MMUは必要ありませんでした。また、ロック解除されたメモリをディスクにスワップできるという意味で、メモリは仮想でした。
ただし、Win16モデルでは、異なるプロセス間の保護はありません。別のプロセスがデータをメモリに残した場合、上書きできます。これは基本的な制限ではありません。最近の高速SSDでは、実行していないプロセスをメモリから完全に削除し、妥当な時間内に削除できます。
物理メモリとの間でプロセスを交換できるソフトウェアがあれば、ハードウェアMMUは必要ありません。
これは、初期のマルチタスクオペレーティングシステムの動作モードでした。常にメモリに常駐するプロセスは1つだけであり、タイムスライスの期限が切れるとそのプロセス全体がスワップアウトされます(大規模なプロセスでは問題になることがわかります)。現在実行中のプロセスで見られるメモリの内容は、他のプロセスで見られるものと同じではなく、それぞれがアドレス空間の独自のビューを持っています。
いくつかのハードウェアサポートが役立ちます-OS自身が使用する「保護された」メモリ領域の概念(たとえば、MSBセットを持つすべてのアドレスはスーパーバイザーモードでのみアクセス可能)および使用中の最高アドレスを示す「ブレーク」値がメモリ管理ハードウェアは仮想メモリの絶対要件ではありません。それはそれを達成するための特に効果的な方法です。
VMを実行する元の商用マシンにはMMUがありませんでした。VMがプロセッサに組み込まれていました。私の現在の考えでは、MMUはVMを非VMプロセッサの上に配置するための再考にすぎません。VMはマンチェスター大学で開発され、バローズの設計者はそれを含めるべきだと確信していましたが、当時は非常に革新的でした。
バロウズB5000(現在のUnisys MCPマシン)は、メモリ境界を強制するメモリ記述子を使用しました-境界の外に出て、プログラムがダンプされます(境界を尊重することは素晴らしい社会の基盤ですが、一部の特権は悪用されるため、境界を強制する必要があります)。
記述子は、メモリアドレス、ブロック長、およびデータ型を保持しますが、非常に重要なPビット、またはプレゼンスビットも保持します。pビットは、ブロックがメモリ内にあることを示します。pビットが0の場合、ブロックは大容量ストレージにあり、アドレスは元のプログラム(コードまたはデータ)またはVM(ロールアウトデータ)のストレージアドレスです。
これらのマシンは、階層メモリモデルを実装しました。MMUは、フラットメモリの不足を補うように思われ、ユーザーオブジェクトをフラットメモリにマップする必要があります。JK Iliffeは、このモデルを使用してICLマシンも設計しました。
http://www.computerconservationsociety.org/resurrection/res74.htm#f
https://en.wikipedia.org/wiki/Burroughs_large_systems
これらのマシンと今日のほとんどのマシンの違いは、CPUアーキテクチャだけでなく、完全なシステムアーキテクチャに対応していることです。
したがって、MMUが不要であるだけでなく、MMUを使用しないシステムの方が優れているようです。
デスクトップ、ラップトップ、およびサーバープロセッサの大部分には、メモリ管理ハードウェアに1つ以上のTLBが含まれており、ページ化またはセグメント化された仮想メモリを利用するプロセッサにほぼ常に存在します。
そして、仮想メモリと、それが本当に何を意味するかについて読んでください。巨大な仮想アドレス空間は主要なアイデアではありません。主なアイデアは、多くのレベルでのキャッシュ/バッファリングです。
単純ではありませんが、このTLBメモリキャッシュは、カーネルのmmサブシステムが構築する重要なハードウェアです(そうでない場合、VMは主にオーバーヘッドになります)。
VM =
仮想メモリまたは仮想マシン。非常に異なる、非常に接続されています。
答えはノーです。MMU チップ(メインボード上のCPUの外部の別個のユニット)は必要ありません。
はい、有用なVMを考えるには、いくつかのハードウェアMMU(CPU内)が必要です。(このx86プラットフォーム用の8086 セグメンテーションから始まりました)