仮想メモリをサポートするには、プロセッサにメモリ管理デバイス(MMU)チップが必要ですか?

仮想メモリをサポートするには、プロセッサにメモリ管理デバイス(MMU)チップが必要ですか?

仮想メモリをサポートするには、プロセッサにメモリ管理デバイス(MMU)チップが必要ですか?

ソフトウェアでMMU機能をエミュレートすることは可能ですか? (これがパフォーマンスに大きな影響を与える可能性があることを知っています。)

答え1

MMUを含むシステムをシミュレートするすべてのシステムシミュレータは、ソフトウェアでMMUを効果的にシミュレートするため、MMUをエミュレートすることができます。しかし、、仮想メモリには、メモリアクセス制御または最低限アドレス変換を実行する方法が必要であるため、制御されるソフトウェアを実行するCPUの完全なソフトウェアエミュレーションが必要であるか、またはハードウェアサポートが必要である。

したがって、MMU、ポートなしでシステムを構築することを想像できます。QEMU欠けている部分を追加して仮想メモリを本当に便利にします(例えば、ホストシステムでのスワッピングサポートの追加)、ゲストオペレーティングシステムが期待できるすべての保護機能とともに、QEMUでMMUを必要とするオペレーティングシステムを実行します(QEMUにバグがある場合を除く)。

仮想メモリを提供するために使用されるMMUなしの「エミュレーション」の実際的で古い例は次のとおりです。Zマシン、70年代後半と80年代初頭から8ビットシステムでコードとデータをページングして交換することができました。これは、基本物理プロセッサの上に仮想プロセッサをシミュレートすることによって行われる。これにより、インタプリタは実行中のプログラムで「表示される」メモリレイアウトを完全に制御できます。

実際には、少なくともオペレーティングシステムレベルで仮想メモリをサポートするためにMMUが必要であることが一般的に知られている。に示すようにMMUコアはありませんか?、MMUなしでシステム上で実行するようにLinuxカーネルを構築することは可能ですが、結果の構成は非常に異例で非常に特定のユースケース(特にマルウェアがない場合)にのみ適しています。仮想メモリ(スワッピング、...)が必要な多くのシナリオをサポートしていない可能性がありますmmap

答え2

仮想メモリと呼ぶことによって異なります。興味深いモデルは、古いWin16モデル(Windows NTではなく古いWindows 3.xとして最もよく知られています)です。このモデルには、GlobalLock機能GlobalUnlockLocalLockありますLocalUnlock。これは、仮想メモリを共同で手動で管理する形式です。これは(アプリケーション)ソフトウェアで行われるため、MMUは必要ありません。ロック解除されたメモリをディスクと交換できるため、メモリは仮想です。

ただし、Win16モデルでは、異なるプロセス間に保護はありません。他のプロセスがメモリにデータを残した場合は、それを上書きできます。これは基本的な制限ではありません。今日の高速SSDを使用すると、実行されていないプロセスをメモリから完全に削除し、それを合理的な時間内に実行できます。

答え3

ハードウェアMMUは必要ありません。ソフトウェアがある場合、ハードウェアMMUは必要ありません。交換物理メモリに入るプロセスです。

これは、初期のマルチタスクオペレーティングシステムが機能した方法です。特定の時間に1つのプロセスだけがメモリに常駐し、そのタイムスライスが期限切れになると完全に置き換えられます(大規模なプロセスでこれがどのように問題になるかを確認できます)。現在実行中のプロセスは、他のプロセスとは異なる方法でメモリの内容を確認し、各プロセスはアドレス空間に固有のビューを持ちます。

一部のハードウェアサポートが役に立ちます。オペレーティングシステム自体を使用するための「保護された」メモリ領域(たとえば、MSBセットを持つすべてのアドレスは管理モードでのみアクセス可能)、および使用中の最も高いアドレス値を示す「割り込み」の概念が役立ちます。メモリ管理ハードウェアは仮想メモリの絶対的な要件ではなく、この目標を達成するための特に効率的な方法です。

答え4

VMを実行した元の商用システムにはMMUはありませんでした。 VMをプロセッサに構築しました。私の現在の考えは、MMUがVMではなくプロセッサの上にVMを配置するための事後の考慮であるだけです。 VMはマンチェスター大学で開発され、Burroughsのデザイナーは当時非常に革新的だったにもかかわらず、VMを統合する必要があると確信していました。

Burroughs B5000(現在のUnisys MCPシステム)は、メモリ記述子を使用してメモリ境界を強化しました。これを超えると、プログラムは廃棄されました(境界を尊重するのは良い社会の基礎ですが、一部の人々は特権を乱用するため、境界を強化する必要があります)。

ディスクリプタは、メモリアドレス、ブロック長、およびデータ型と最も重要なPビットまたは存在ビットを保持します。 p ビットは、ブロックがメモリにあることを示します。 0 pビットは、ブロックが一括ストレージにあり、アドレスが元のプログラム(コードまたはデータ)またはVM(ロールアウトデータ)のストレージアドレスであることを意味します。

これらのマシンは階層メモリモデルを実装します。 MMUはフラットメモリ不足を補完するようで、ユーザーオブジェクトをフラットメモリにマッピングする必要があります。 JK Iliffeはまた、このモデルを使用してICLマシンを設計しました。

http://www.computerconservationsociety.org/resurrection/res74.htm#f

https://en.wikipedia.org/wiki/Burroughs_large_systems

これらのシステムが今日のほとんどのシステムと異なる点は、CPUアーキテクチャだけでなくシステムアーキテクチャ全体をカバーしていることです。

したがって、MMUは不要であるだけでなく、MMUがなければシステムがより良いようです。

関連情報