仮想メモリをサポートせずに複数のプロセスをサポートできますか?それなら、もう少し知りたいです。
答え1
ハードウェアサポートがなくても(いいえメモリ管理ユニット)、すべてのポインタは物理アドレスを表します。しかし、一般に、MMUを介して提供されるいくつかの主な機能は失われます。
- ポインタは常にRAMの特定の位置を指すため、交換はできません(または非常に限られた方法でのみ実行できます)。通常、MMUが指定された仮想アドレスの物理ページを見つけることができない場合、MMUは例外をスローし、オペレーティングシステムによって提供される例外ハンドラがスワップからページを取得します。
- ポインタはチェックなしで逆参照されるため、各プロセスは他のプロセスのメモリとカーネルメモリにアクセスできます。一般に、MMU が指定された仮想アドレスの物理ページを見つけることができない場合、例外が発生し、オペレーティング システムによって提供される例外ハンドラが間違ったアクセスを試みるプロセスを終了します。
- 同じポインタは異なるプロセスで同じ意味を持つため、簡単に実装できません。クロス。通常、これが行うことは、
fork
プロセスの物理メモリをコピーし、同じ仮想アドレスから新しい物理アドレスにマッピングされる新しい仮想メモリを作成することです。
一部のUnixファミリーオペレーティングシステムは、MMUなしでシステムで実行できます。
- ミニXもともとによって開発されたUnixバリアントです。アンドリュー・タネンバウム彼の本の仲間としてオペレーティングシステム:設計と実装。これオリジナル当時、PCでは仮想メモリをサポートしていなかった。 (興味があればこの本を読んでみてください。余裕があれば以前のバージョンを読むことをお勧めします。)
- μCLinuxはMMUなしのマイクロコントローラ用のLinuxバリアント。µCLinuxの制限ユニバーサルフォークを実装しないものが含まれています(のみ
vfork
サポート)メモリ保護が不十分ですが、プリエンプティブマルチタスクが存在します。
¹現代のユニスでは、通常これが行われます。怠惰(記録中にコピー)、これは物理ページが見つからないときにMMUに依存して例外を発生させます。
答え2
もちろん、上記のように、メモリ保護などの問題になる可能性があるいくつかの制限があります。例えばμClinuxhttp://www.uclinux.org/仮想メモリを実装せずに複数のプロセスをサポートします。一部のCPU(少なくともAnalog Devices Blackfinなど)はMPU(メモリ保護デバイス)を提供します。http://docs.blackfin.uclinux.org/doku.php?id=bfin:mpu。これにより、仮想メモリが少ないオペレーティングシステムでもメモリを分割できます。
答え3
どのように定義するかによって異なります。プロセスそして糸記憶の面で。
仮想メモリの機能の1つはパーティション化です。分割せずに複数のプロセスを実行することは可能ですが、これは同じアドレス空間を共有するプロセスではなく、複数のスレッドを実行するのと似ています。