プログラムはフラッシュ/ディスクに保存されます。その実行のために、プログラムは仮想メモリにロードされ、仮想マネージャによって RAM にマップされます。その実行中のプロセスは RAM にあります。では、仮想メモリはどこに存在するのでしょうか (.text、.data、.stack、.heap がすべて存在する場所)?
質問する
2196 次
3 に答える
0
仮想メモリとは、データが実際に保存されている場所は明確ではありませんが、「通常の」メモリ アクセス方法でアクセスできるメモリを意味します。
そうかも知れない
- 実際にRAMに
- スワップ領域で
- 別のファイル (メモリマップファイル)
アクセスは適切に処理されます。
これは仮想化のレイヤーであるため、プログラマーはデータが実際にどこに置かれるかについて心配する必要はありません。
本来の目的は主に、実際に持っているよりも多くのメモリをプロセスに提供できるようにすることと、スワップ スペースを使用して拡張することでしたが、さらに多くのことがあります。
- OS は、キャッシュなど、必要に応じて RAM を自由に使用できます。状況によっては、長い間使用されていないプログラムの一部を保持するよりも、RAM をキャッシュとして使用する方が効果的な場合があります。
- プログラムが要求したときに追加のメモリをプログラムに提供します。 を呼び出す
malloc()
と、プログラムのライブラリは、アドレス空間にシームレスに接続できるメモリの一部を提供するよう OS に要求する場合があります。 - スタック オーバーフローの回避: スタックがどんどん大きくなった場合、それぞれのメモリ セクションが透過的に拡張される可能性があるため、プログラムはそれについて心配する必要がありません。
- システムはメモリの「オーバーコミット」を行うことさえできます。プロセスが大量のメモリを要求した場合、OS は「はい、OK」と言うかもしれません。つまり、メモリをプログラムに提供します。それはそもそも「プログラムが特定のアドレス空間領域にアクセスできるようにする」ことを意味しますが、このアドレス空間はすぐにメモリによってバックアップされるわけではありません。プログラムがこのメモリにアクセスするとすぐにマッピングが行われ、これが実行できない場合、プログラムは Out of emory キラー (少なくとも Linux では) によってクラッシュします。
これはすべて、プログラムのアドレス空間を介して表示されるプログラムへの物理メモリのページ単位 (1 ページ = 4 kiB) の割り当てによって機能し、これは必要に応じて量と頻度で行われます。
于 2013-07-25T11:15:10.177 に答える