仮想メモリをサポートせずに複数のプロセスをサポートすることは可能ですか?


8

仮想メモリをサポートせずに複数のプロセスをサポートすることは可能ですか?もしそうなら、もっと知りたいです。


おそらくオフトピックですか?UNIXシステムのみに関するものでない限り。
Maciej Piechotka、2011年

回答:


10

ハードウェアサポートがない(MMUがない)場合でも、すべてのポインターが物理アドレスを表すマルチプロセスオペレーティングシステムを実行できます。ただし、MMUを通じて通常提供されるいくつかの主要な機能は失われます。

  • ポインターは常にRAM内の特定の場所を指しているため、スワップすることはできません(または非常に限られた方法でのみ)。通常、MMUは特定の仮想アドレスの物理ページを見つけることができない場合に例外を発生させ、OS提供の例外ハンドラーがスワップからページをフェッチします。
  • ポインタはチェックなしで逆参照されるため、すべてのプロセスが他のプロセスのメモリとカーネルメモリにアクセスできます。通常、MMUは特定の仮想アドレスの物理ページを見つけられない場合に例外を発生させ、OS提供の例外ハンドラーが無効なアクセスを試行するプロセスを終了します。
  • 異なるプロセスで同じポインターは同じ意味を持つため、forkを簡単に実装することはできません。通常、の効果はfork、プロセスの物理メモリのコピーを作成し、同じ仮想アドレスから新しい物理アドレスに新しい仮想メモリマップを作成することです。

MMUのないシステムで動作するUNIXライクなオペレーティングシステムがあります。

¹ 現代のUnixでは、これは通常行われている遅延し、再び、それは物理的なページを見つけることができない例外をMMUに依存している、(コピーオンライト)。


2番目の箇条書きの「特定の仮想アドレスの物理ページが見つからない場合」は、「特定の仮想アドレスに対応するページへのアクセスを拒否する場合」のようにする必要があります。カーネルが所有するページはおそらく常駐しています。
ルスラン

@Ruslanプロセスでページがマップされていない場合、MMUには通常、物理ページにマップされない情報が含まれています。MMUに、プロセスがアクセスできない物理ページのアドレスが含まれている可能性がありますが、これはルールではなく例外であり、カーネルがMMUのこの機能を使用する場合にカーネルメモリに使用されます(Linuxが実行します)。 。
Gilles「SO-邪悪なことをやめなさい」19/07/22

2

すでに述べたように問題になるメモリ保護のようないくつかの制約があっても確かに可能です。たとえば、µClinux http://www.uclinux.org/は、仮想メモリを実装せずに複数のプロセスをサポートします。少なくともAnalog Devices Blackfinのような一部のCPUは、MPU(メモリ保護ユニット)http://docs.blackfin.uclinux.org/doku.php?id=bfin:mpuを提供していることに注意してください。これにより、仮想メモリの少ないオペレーティングシステムでも、メモリのパーティション分割が可能になります。


0

これは、メモリの観点からプロセススレッドをどのように定義するかによって異なります。

仮想メモリの機能の1つはパーティション化です。パーティション化せずに複数のプロセスを実行することは可能ですが、これは同じアドレス空間を共有するプロセスよりも複数のスレッドを実行することに似ています。


はいといいえ。仮想メモリなしでメモリ分離を強制することが可能です。一部のマイクロコントローラーはハードウェアメモリ保護を備えていますが、仮想メモリを備えていません(jlliagreの回答を参照)。また、ハードウェアのサポートがなくても、静的分析によってメモリの分離を強制できます(簡単ではありませんが、実行可能です)。
Gilles「SO-邪悪なことをやめよう」
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.