2

私はこの分野ではまったくの初心者なので、私の質問に我慢して答えてください:)

プロセスのアドレス空間、仮想メモリ、およびページングについて読んでいました。ページが RAM からスワップインおよびスワップアウトされるメカニズムを理解しました。すべてのプロセスには 4 GB の仮想アドレス空間が与えられ、そのうちの一部はユーザー空間 (各プロセスに固有 - 1 または 2 GB) であり、残りはカーネル空間 (すべてのプロセスで共通) であることが文書化されています。各プロセスの仮想アドレス空間はセカンダリ ストレージに保存されるため、プロセスを起動するたびにハードディスクに 4 GB が予約されるということですか? プロセスを開始するたびにハード ディスク領域が 4GB 減少することはありません... または、仮想領域がブロックとして予約されているのではなく、最初は小さく始まり、最大 4GB まで拡大できるようなものですか。いくつかの光を当ててください。また、知っている場合は、トピックに関するリンクをいくつか投稿してください..

4

4 に答える 4

2

仮想アドレス メモリ管理では、セカンダリ ストレージは使用されません。プログラムとメインメモリをいくつかのパーティションサイズに分割するだけです。メイン メモリ パーティションはフレームと呼ばれ、プログラム パーティションはページと呼ばれます。メイン メモリとフレームの各パーティションは同じサイズです。

プログラムが使用されるたびに、カーネルは、このプログラムのすべてのページがメイン メモリに収まるかどうかをチェックします。その場合、すべてのページがメイン メモリに保持されます。そうしないと、最初に必要なページだけが保持されます。後で他のページが必要になると、フレームの 1 つをメイン メモリから削除し、要求されたページをフレームが削除された場所に転送します。

ページからフレームへのアドレスのマッピングのために、カーネルはページ マップ テーブルを使用します。このテーブルは、この特定のページがメイン メモリのどのフレームにあるかを正確に示します。

以下の参照を確認してください: https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/virtual.html https://www.bottomupcs.com/virtual_addresses.xhtml

于 2016-06-05T20:59:03.933 に答える
1

ここではトピック外であり、何百ページものテキストを詳しく説明することができます (このトピックに関する cs の本を参照してください)。

しかし、要するにあなたは間違っています。仮想メモリは二次記憶域に保存されません。そこにある場合もありますが、通常はありません。OSはそれを処理しており、その情報に応じて、データを通常のメモリに保持するか(たとえば、プロセスがアクティブな場合)、またはhddに保持します(たとえば、メモリが不足してプロセスが非アクティブな場合)。

仮想化とは、プロセスが透過的であることを意味し、データがどこに保存されているかを認識せず、常に同じポインターを介してアクセスされます。システムは、状況に応じて基盤となるストレージを変更できます (その後、データをスワップインまたはスワップアウトします)。

于 2012-04-27T05:50:26.553 に答える
0

仮想アドレス空間はどこにも「保存」されていません。プロセスに割り当てられたメモリのページのみが、メモリ/ディスク上に格納されます。

メモリの割り当ては、オペレーティング システムによって異なります。つまり、Windows では、割り当てと管理は、メモリをアドレス空間にマップする VirtualAlloc や、プログラムのアドレス空間に割り当てられた特定のメモリ ブロックが持つべき属性を指定するVirtualProtect関数など、対応するメモリ関数を使用してプログラムで行うことができます。

于 2012-04-27T05:50:01.130 に答える
-1

これは、この分野のまったくの初心者にとっては良い質問です。実際に起こることは、実行中のプロセスがすべてのメモリを持っていると考えさせられますが、成長するにつれて拡張されるメモリはわずかしかありません。メモリは仮想メモリと呼ばれます。

この回答がお役に立てば幸いです。

于 2015-07-30T19:15:32.760 に答える