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


14

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

ソフトウェアでMMU機能をエミュレートすることはできますか?(おそらくパフォーマンスに大きな影響を与えることは承知しています)。


完全に機能するコンピューターであれば、他のコンピューターを十分なパフォーマンスヒットでエミュレートできます。または、ハードウェアをエミュレートします。唯一の問題は、パフォーマンスヒットの規模です。
ヴァリティ

今日のすべてのプロセッサにはTLBが必要であるため、MMユニットが組み込まれています。
ラスタファイル

回答:


22

MMUを含むシステムをエミュレートするシステムエミュレーターは、ソフトウェアでMMUを効果的にエミュレートするため、前述の質問に対する答えは「はい」です。ただし、仮想メモリにはメモリアクセス制御を強制する何らかの方法、または少なくともアドレス変換が必要なため、制御対象のソフトウェアを実行するCPUの完全なソフトウェアエミュレーションが必要か、ハードウェアの支援が必要です。

したがって、MMUのないシステムを構築し、QEMUを移植し、不足している部分を追加して仮想メモリを実際に役立つようにし(たとえば、ホストシステムでスワップのサポートを追加)、QEMUでMMUを必要とするオペレーティングシステムを実行します。ゲストオペレーティングシステムで期待されるすべての保護(QEMUのバグを除く)。

仮想メモリを提供するために使用されるMMUなしの「エミュレーション」の実例の1つは、70年代後半から80年代前半の8ビットシステムで、コードとデータのページングとスワップが可能なZ-machineです。 。これは、基礎となる実プロセッサで仮想プロセッサをエミュレートすることで機能しました。そのようにして、インタプリタは実行中のプログラムが「見る」メモリレイアウトを完全に制御し続けます。

実際には、少なくともオペレーティングシステムレベルで、仮想メモリのサポートにはMMUが必要であると一般に考えられています。示されているように、MMUのないカーネルですか?、MMUのないシステムで実行できるようにLinuxカーネルを構築することは可能ですが、結果の構成は非常に珍しく、非常に特定のユースケースにのみ適しています(特に悪意のあるソフトウェアはありません)。仮想メモリ(スワップなどmmap)を必要とする多くのシナリオをサポートしていない場合があります。


仮想マシンアプリケーションにもMMUエミュレータコンポーネントがありますか?
yoyo_fun

はい-必ずしも個別のコンポーネントとしてではありませんが、エミュレーションで必要なサポートがあります。
スティーブンキット

7
@JenniferAnderson:一部の最新のCPUには、エミュレーターが(部分的に)MMUエミュレーションをMMU自体にオフロードできる機能があります。例えば、エミュレーター内で実行されるプログラムは、それ自体が複数のエミュレートされたメモリーのページを使用しますが、これらのメモリーのページは、当然、エミュレーターによって使用されるメモリーのページに「ネスト」されます。新しいハイエンドのIntelおよびAMDのCPUはどちらも、ネストされたページテーブルをサポートしています。これにより、エミュレータは(高価に)エミュレートする代わりに、MMU内でこのネストを表現できます。
ヨルグWミットタグ

@Jörg、確かに説明をありがとう。ただし、ほとんどのハイパーバイザーには、ある程度のソフトウェアエミュレーションが含まれているため、追加のハードウェアサポートなしで動作します。私は質問の「可能ですか」という側面に瞬きしました;-)。
スティーブンキット

3
@JenniferAnderson:はい、この機能は準仮想化のために特別に導入されました。(これは新しいものではないことに注意してください。ハードウェア支援の準仮想化は、1960年代初頭からメインフレームの世界に存在していました。)例として、AzulのZing JVMのC4コレクター)。しかし、ノート、両方の方向で、この作品のすべてのこと:と同じ方法で拡張仮想化のサポートでのMMUは、よりパフォーマンスの最適化よりも何も、および仮想化ではありません...
イェルクWミッターク

7

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

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


7

物理メモリとの間でプロセスを交換できるソフトウェアがあれば、ハードウェアMMUは必要ありません。

これは、初期のマルチタスクオペレーティングシステムの動作モードでした。常にメモリに常駐するプロセスは1つだけであり、タイムスライスの期限が切れるとそのプロセス全体がスワップアウトされます(大規模なプロセスでは問題になることがわかります)。現在実行中のプロセスで見られるメモリの内容は、他のプロセスで見られるものと同じではなく、それぞれがアドレス空間の独自のビューを持っています。

いくつかのハードウェアサポートが役立ちます-OS自身が使用する「保護された」メモリ領域の概念(たとえば、MSBセットを持つすべてのアドレスはスーパーバイザーモードでのみアクセス可能)および使用中の最高アドレスを示す「ブレーク」値がメモリ管理ハードウェアは仮想メモリの絶対要件ではありません。それはそれを達成するための特に効果的な方法です。


2
しかし、それは実際には仮想メモリではなく、プロセスの交換だけです...(この質問に対する適切な答えを得るには、「仮想メモリ」を本当に定義する必要があります!)
Stephen Kitt

各プロセスには、アドレス空間の独自のビューがあります。使用している定義を明確にするために編集します。
トビースパイト

ただし、すべてのプロセスで同じ1対1のマッピングです。(プロセスの観点からはあまり違いがないので、そこに本当の議論はありません...)
スティーブンキット

0

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

デスクトップ、ラップトップ、およびサーバープロセッサの大部分には、メモリ管理ハードウェアに1つ以上のTLBが含まれており、ページ化またはセグメント化された仮想メモリを利用するプロセッサにほぼ常に存在ます

Translation_lookaside_buffer

そして、仮想メモリと、それが本当に何を意味するかについて読んでください。巨大な仮想アドレス空間は主要なアイデアではありません。主なアイデアは、多くのレベルでのキャッシュ/バッファリングです。

単純ではありませんが、このTLBメモリキャッシュは、カーネルのmmサブシステムが構築する重要なハードウェアです(そうでない場合、VMは主にオーバーヘッドになります)。


VM =

仮想メモリまたは仮想マシン。非常に異なる、非常に接続されています。


答えはノーです。MMU チップ(メインボード上のCPUの外部の別個のユニット)は必要ありません。

はい、有用なVMを考えるには、いくつかのハードウェアMMU(CPU内)が必要です。(このx86プラットフォーム用の8086 セグメンテーションから始まりました)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.