web-dev-qa-db-ja.com

なぜ仮想メモリが必要なのですか?

したがって、私の理解では、すべてのプロセスに0x0から0xFF .... Fの範囲の独自の仮想メモリ空​​間があるということです。これらの仮想アドレスは、物理メモリ(RAM)のアドレスに対応しています。このレベルの抽象化が役立つのはなぜですか?なぜ直接アドレスを使用しないのですか?

ページングが有益である理由を理解していますが、仮想メモリはそうではありません。

29
Collin

これを行うには多くの理由があります。

  • コンパイル済みのバイナリがある場合、各関数にはメモリ内の固定アドレスがあり、関数を呼び出すアセンブリ命令にはそのアドレスがハードコーディングされています。仮想メモリが存在しない場合、2つのプログラムをメモリにロードして同時に実行することはできません。同じ物理アドレスで異なる機能が必要になる可能性があるためです。

  • 2つ以上のプログラムが同時に実行されている(またはコンテキストが切り替えられている)ときに直接アドレスを使用すると、1つのプログラムのメモリエラー(たとえば、不正なポインタの読み取り)により、他のプロセスで使用されているメモリが破壊される可能性があります。単一のクラッシュにより複数のプログラムを停止します。

  • 同様の注意事項として、プロセスが別のプログラムの機密データを読み取る可能性があるというセキュリティ上の問題があります。

  • 2番目のプロセスに切り替えるときに、1つのプロセスのすべてのメモリをページアウトすることによって上記の2つの問題に対処しようとすると、すべてのメモリをページアウトする必要があるため、massiveパフォーマンスヒットが発生します。

  • ハードウェアによっては、一部のメモリアドレスが物理デバイス(ビデオRAM、外部デバイスなど)用に予約されている場合があります。これらのアドレスが重要であることを認識せずにプログラムをコンパイルすると、彼らの記憶への書き込み。さらに悪いことに、そのメモリが読み取り専用または書き込み専用である場合、プログラムはアドレスがそこに留まることを期待してアドレスにビットを書き込み、その後異なる値を読み戻す可能性があります。

お役に立てれば!

34
templatetypedef

簡単な答え:プロセスの実行に必要なプログラムコードとデータは、実行されるメインメモリに存在する必要がありますが、メインメモリはプロセス全体のニーズを満たすのに十分な大きさではない場合があります。

2つの提案

(1)ストレージ割り当ての必要性を軽減するために非常に大きなメインメモリを使用する:コストが非常に高いため、実行不可能です。

(2)仮想メモリ:要求に応じて自動ストレージ割り当てにより、完全にメモリ内にないプロセスを実行できます。仮想メモリという用語は、論理メモリ(プロセスから見たメモリ)と物理メモリ(プロセッサから見たメモリ)を分離する抽象概念を指します。この分離のため、オペレーティングシステムが2レベル以上の物理メモリ空間を維持している間、プログラマは論理メモリ空間のみを認識する必要があります。

もっと:

初期のコンピュータープログラマーは、プログラムをセクションに分割し、一定の処理時間の間、メインメモリに転送しました。高レベルの言語が普及するにつれて、複雑なプログラムの効率は、劣悪なオーバーレイシステムに悩まされました。ストレージ割り当ての問題はより複雑になりました。

非効率的なメモリ管理の問題を解決するための2つの理論が登場しました-静的および動的割り当て。静的割り当ては、メモリリソースの可用性とプログラムのメモリ参照文字列を予測できることを前提としています。動的割り当ては、メモリの使用量を予測するのではなく、実際のプログラムのニーズに応じてメモリ使用量が増減することに依存しています。

60年代のプログラムの目的と機械の進歩により、静的割り当てに必要な予測は不可能ではないにしても困難になりました。したがって、ダイナミックアロケーションソリューションは一般に受け入れられましたが、実装に関する意見はまだ分かれていました。

あるグループは、メモリの割り当てまたは割り当て解除を行うシステムコールによって達成される、ストレージの割り当てをプログラマが引き続き行う必要があると考えていました。 2番目のグループは、ストレージ割り当ての複雑さが増し、マルチプログラミングの重要性が高まっているため、オペレーティングシステムによる自動ストレージ割り当てをサポートしました。

1961年、2つのグループが1レベルのメモリストアを提案しました。 ストレージ割り当ての必要性を軽減するために、非常に大きなメインメモリを要求する1つの提案。このソリューションは、非常に高いコストのため不可能でした。2番目の提案は仮想メモリとして知られています。

cne/modules/vm/green/defn.html

8
eeoohee