ページングは、ディスクとの間でページを移動することにより、各プロセスが無限の RAM を持っているような錯覚を引き起こします。無限のメモリがある場合 (仮想的な状況で)、まだページングが必要ですか? はいの場合、なぜですか?私はインタビューでこの質問に直面しました。
2 に答える
「無限のメモリ」がランダムにアクセス可能な無限のメモリ、または RAM を意味すると仮定すると、ページングが必要になります。ページングは、多くの場合、メモリを節約するために RAM のページをハード ディスクにスワップ インおよびスワップ アウトする機能に関連付けられていますが、これはページングの 1 つの側面にすぎません。ページングを行うその他の理由を次に示します。
- 安全。ページングは、プロセスが別のプロセスのメモリにアクセスできないようにし、常駐カーネルを変更できないようにすることで、オペレーティング システムのセキュリティとメモリ保護を強化する方法です。
- マルチタスク。ページングは、メモリ空間を仮想化することでマルチタスクを支援します。つまり、プロセス A のアドレス 0xFOO は、プロセス B の 0xFOO とはまったく異なるものにすることができます。
- メモリ割り当て。ページングは、断片化を減らし、RAM がアクセスされたときにのみ割り当てられるようにすることで、メモリ割り当てを支援します。これが意味することは、プロセスが 100MB の連続した RAM スペースを必要とするとしますが、これは物理的に連続している必要はないということです。さらに、プログラムが 100MB のスペースを要求すると、オペレーティング システムはその 100MB のスペースを安全に使用できることをプログラムに伝えますが、プログラムがそのスペースを最大限に使用するまで、実際には割り当てられません。
確かに、無限の RAM がある場合、後者は完全に必要というわけではありません。リソースに制約がない場合でも、効率的であることは常に良い習慣です。また、考慮されないことがあるページングの使用法も示しています。
これは哲学的な質問なので、ここに哲学的な答えがあります:)
この質問の秘訣は、無限のメモリについて仮定することです。「いいえ、ページングを使用する必要はありませんが」と言っても構いません。そして、次のようにします。
無限メモリは、メモリ アクセスの許容時間制限内でアクセスできる必要があります。そうでない場合 (無限大は多くのスペースを必要とし、メモリが処理装置から離れているため)、それとディスクの間に違いはありません。どちらもすぐに利用できるメモリ要件を満たしていません。これは、ページを介したキャッシュが試みるものです。解決する。
Amazon の S3 を例にとると、これはすべての実用的な目的で無限です。時間 x 内に何かをフェッチする必要がある場合に S3 からフェッチできるという意味で、すべてのメモリ要件を満たすために S3 に依存できる場合、何かをページングしたり、「ローカル」メモリに保持したりする必要さえありません。必要なときに何度でも S3 から取得できます。(明らかに、これにはコストやネットワークなどの他の影響がありますが、今は無視しましょう)。
もちろん、メモリアクセスを可能な限り高速にすることが最適であるといつでも言うことができ、「十分に高速」はおそらく「最速」よりも遅いため、ローカルメモリアクセスによりパフォーマンスが向上します。
そして最後に、メモリ ユニットがフェッチング ユニットからどれだけ「遠く」離れていても、無限で同じアクセス時間を持つメモリを想像しなければならない場合、処理ユニットが真ん中にある球体を想像する必要があります。そのため、距離が原因で一方のメモリ ユニットが他方よりも遅いと主張することはできません。それ以外の場合は、ページングがメモリ内で内部的に行われるため、最も使用されるメモリ ユニット (または使用することを選択したアルゴリズム) へのアクセスが高速になると言えます。