4

私が知っているのは、仮想メモリのサイズはアドレス行の数によってのみ制限されるということです。しかし、William Stallings による Operating System internals and design principalsでは、仮想メモリもセカンダリ メモリのサイズによって制限されることを読みました。
1.どうやって?
2.スワッピング(主記憶と副記憶)は仮想記憶の必要条件ですか? つまり、スワッピングが許可されていない場合でも、メリットは限られますが、仮想メモリと呼ぶことができますか?
次に、回答に基づいていくつかのフォローアップの質問があります。

編集:


私は本の正確な言葉を引用したに違いないと思う:

セカンダリ メモリがメイン メモリの一部であるかのようにアドレス指定できるストレージ割り当て方式。プログラムがメモリを参照するために使用するアドレスは、メモリ システムが物理ストレージ サイトを識別するために使用するアドレスとは区別され、プログラムによって生成されたアドレスは、対応するマシン アドレスに自動的に変換されます。仮想記憶域のサイズは、主記憶域の実際の数ではなく、コンピューター システムのアドレス指定方式と使用可能な 2 次メモリの量によって制限されます。

ここで「仮想メモリ」と「仮想ストレージのサイズ」には、ある種の言葉遊びがありますか?

4

2 に答える 2

3

仮想ストレージのサイズは、コンピューターシステムのアドレス指定スキームと使用可能なセカンダリメモリの量によって制限され、メインストレージの場所の実際の数によっては制限されません。

この本は、使用する予定のない仮想メモリを割り当てないことを(誤って)想定しているようです。したがって、スワップに使用される物理メモリとハードディスクが使用可能な仮想メモリを制限することを警告します(もちろん、プロセスの観点からは、そのリソースプールに対する他の要求(OSおよび他のプロセス)も同様です)。

実際には、実際に使用できるよりも多くの仮想メモリを割り当てると便利なことがよくあります。たとえば、次のような場合があります。

  • スパース配列に仮想メモリを使用します。ここでは、いくつかの散在するアドレスに直接インデックスを付けます。
  • システムリソースが実際に不足したときにページ障害を失敗させ、使用可能なメモリを追跡しようとしてコードを複雑にしたり(これは他のプロセスなどで動的であることを忘れないでください)、システム機能を積極的に利用できないことを意味する悲観的な制限を設けます
  • すべてのプログラムに、コンパイルされたアドレスにロードされていると信じるという利点を享受させてください。これにより、相対アドレスではなく絶対アドレスをジャンプ命令などに使用できます。

それをあなたの特定の質問に関連付けます:

1. [仮想メモリはセカンダリメモリのサイズによっても制限されます]どのように?

繰り返しになりますが、メモリ(物理メモリとスワップメモリ​​の両方)が使い果たされると、より多くの使用を試みると失敗するという意味で制限があります。

2.スワッピング(メインメモリとセカンダリメモリ間)は仮想メモリに必要な条件ですか?

それは少し曖昧です...仮想メモリは、物理メモリコンテンツをスワップアウトして新しいメモリ要求のためのスペースを作り、スワップアウトされたコンテンツをセカンダリメモリからリロードすることによって、プロセスが透過的に使用できるメモリプロセスの全体量を増やすことしかできません。ただし、スワップディスクスペースがない(したがってスワッピングがない)場合、またはスワッピングを実行するためのメモリの需要がまだない場合でも、プロセスは、スパースアレイ、巨大なスタック/ヒープ領域ごとに仮想アドレス指定の恩恵を受けることができますオンデマンドで成長する余地があるなど。

つまり、スワッピングが許可されていない場合でも、メリットは限られていますが、仮想メモリと呼ぶことができますか?

多分。仮想アドレス指定の恩恵を受けることはできますが、それが仮想メモリとして分類されるかどうかは、どの用語を採用するかによって異なります。「仮想メモリ」とは、より多くの物理RAMを持っているふりをしていることを意味するため、スワップがなければ、仮想メモリをサポートする仮想アドレス指定コンポーネントを使用している場合でも、資格があります。

于 2011-04-13T04:09:02.643 に答える
2

本の抜粋に関して、あなたの混乱の原因がわかります。彼が何を言っているのかを知るために、私はそれを数回読まなければなりませんでした。より明確な説明は次のとおりです。仮想メモリは、プログラムが実行されるシステムの物理的な制約に悩まされることなく、プログラムがメモリを割り当てることを可能にする抽象化です。プログラムは単純に仮想メモリにアクセスします。抽象化 (仮想メモリ) により、物理的な場所に直接マップされる仮想メモリの場所と、2 次メモリの場所にマップされる仮想メモリの場所が区別されます。または、まったくどこにもマッピングされず、セグメンテーション違反が発生する可能性があります。

番号 2 は確かに真実ではありません。仮想メモリはそこにあり、物理的なバッキングがあるかどうかに関係なく、プログラムが使用できるように「利用可能」です。彼が制限されていると言ったとき...利用可能な二次メモリの量によって、私はその部分に完全には従いません。100 ギガシズルのアドレス空間を持つ仮想メモリ層を設計することは確かに可能であり、それは問題ありません。

正確さを明確にするために交換した場合は、お詫び申し上げます。私の説明はあまりアカデミックではなく、学校に通っているように聞こえますが、そのとおりです。とにかく、それが役立つことを願っています。

-tjw

于 2011-04-13T03:43:13.450 に答える