仮想ストレージのサイズは、コンピューターシステムのアドレス指定スキームと使用可能なセカンダリメモリの量によって制限され、メインストレージの場所の実際の数によっては制限されません。
この本は、使用する予定のない仮想メモリを割り当てないことを(誤って)想定しているようです。したがって、スワップに使用される物理メモリとハードディスクが使用可能な仮想メモリを制限することを警告します(もちろん、プロセスの観点からは、そのリソースプールに対する他の要求(OSおよび他のプロセス)も同様です)。
実際には、実際に使用できるよりも多くの仮想メモリを割り当てると便利なことがよくあります。たとえば、次のような場合があります。
- スパース配列に仮想メモリを使用します。ここでは、いくつかの散在するアドレスに直接インデックスを付けます。
- システムリソースが実際に不足したときにページ障害を失敗させ、使用可能なメモリを追跡しようとしてコードを複雑にしたり(これは他のプロセスなどで動的であることを忘れないでください)、システム機能を積極的に利用できないことを意味する悲観的な制限を設けます
- すべてのプログラムに、コンパイルされたアドレスにロードされていると信じるという利点を享受させてください。これにより、相対アドレスではなく絶対アドレスをジャンプ命令などに使用できます。
それをあなたの特定の質問に関連付けます:
1. [仮想メモリはセカンダリメモリのサイズによっても制限されます]どのように?
繰り返しになりますが、メモリ(物理メモリとスワップメモリの両方)が使い果たされると、より多くの使用を試みると失敗するという意味で制限があります。
2.スワッピング(メインメモリとセカンダリメモリ間)は仮想メモリに必要な条件ですか?
それは少し曖昧です...仮想メモリは、物理メモリコンテンツをスワップアウトして新しいメモリ要求のためのスペースを作り、スワップアウトされたコンテンツをセカンダリメモリからリロードすることによって、プロセスが透過的に使用できるメモリプロセスの全体量を増やすことしかできません。ただし、スワップディスクスペースがない(したがってスワッピングがない)場合、またはスワッピングを実行するためのメモリの需要がまだない場合でも、プロセスは、スパースアレイ、巨大なスタック/ヒープ領域ごとに仮想アドレス指定の恩恵を受けることができますオンデマンドで成長する余地があるなど。
つまり、スワッピングが許可されていない場合でも、メリットは限られていますが、仮想メモリと呼ぶことができますか?
多分。仮想アドレス指定の恩恵を受けることはできますが、それが仮想メモリとして分類されるかどうかは、どの用語を採用するかによって異なります。「仮想メモリ」とは、より多くの物理RAMを持っているふりをしていることを意味するため、スワップがなければ、仮想メモリをサポートする仮想アドレス指定コンポーネントを使用している場合でも、資格があります。