実行可能ファイルのキャッシュメモリはどのように機能しますか?

実行可能ファイルのキャッシュメモリはどのように機能しますか?

私は常にLinuxのキャッシュされたメモリ(free -mなど)を再び必要に応じて再利用できるか、新しいアプリケーションでより多くのメモリが必要な場合はすぐに解放できるメモリページとして理解しました。この記事数年前に役に立ちました。)

実行可能ファイル(Thunderbirdなどのプログラム)とデータ(ログファイルの内容など)の両方がキャッシュされる可能性があります。実際、*nixではテキストファイルと実行ファイルの間に違いはないと思います。

あまり変更されていないデータ(テキストファイルなど)についてはこれがどのように機能するのかがわかりますが、本質的に動的プログラムではどのように機能しますか?確かに、キャッシュメモリは動的に割り当てられたオブジェクトを復元できませんか?では、バイトコード(またはスクリプトの場合はガイドライン)だけがキャッシュされますか?

編集1

キャッシュされたメモリとは、「free」を実行するときに「キャッシュされた」列の下のメモリを意味します。

$ free -m
             total       used       free     shared    buffers     cached
Mem:          7985       6650       1334          0        150       3201
-/+ buffers/cache:       3298       4686
Swap:        13178          2      13176

編集2

私が逃したヒントを教えてくれたls-lrtに感謝します。 SEへのこの回答で明確に述べたように(最初に検索する必要があります)、「キャッシュメモリはディスクキャッシュVFSで使用されています "。これは、実行可能ファイルの場合、動的に割り当てられたコンテンツに関係なく、コマンド(バイトコード、スクリプト行など)のみがこの列に表示されることを意味します。私の印象は、メモリーページ全体(動的に生成されたオブジェクトを含む)が「キャッシュ」されていることです。

編集3

に関する良い例ディスクキャッシュの使用

答え1

無料でマークされたキャッシュはファイルシステムキャッシュです。ファイルシステムレベルでは、すべてがデータのオクテットにすぎません。アプリケーションデータとファイルデータの違いはありません。そのレベルで。ファイルキャッシュから置き換えられた実行ファイルを再ロードすることはできますが(実行ファイルはいいえスワップファイルに書き込むと、メモリから追い出されます。通常、ファイルキャッシュが最初に犠牲になるため、このような場合はまれです。

これで、使用可能なメモリなどのファイルキャッシュと、実行中のプログラムに含まれる可能性がある他の種類のメモリとの違いを明確に理解してください。これは、「キャッシュメモリは動的に割り当てられたオブジェクトを復元できません」という意味がわからないためです。アプリケーションで使用されるすべてのメモリは、いいえファイルキャッシュに関連しています。ファイルキャッシュは、アプリケーションによるいかなる種類のメモリ割り当てもキャッシュしません。ファイルキャッシュはディスクとオペレーティングシステムの間の仲介者です。

深刻な質問に答えるには、「ではキャッシュされたのはバイトコード(またはスクリプトのコマンド)だけですか?」です。

ファイルキャッシュはディスクのオクテットのみをキャッシュします。アプリケーションがどのメモリを使用しているかは関係ありません。

答え2

デフォルトでは、Linuxカーネルがメモリ内のさまざまな種類のデータを処理する方法に違いはありません。これを管理するカーネル部分は「仮想メモリサブシステム」と呼ばれ、メモリの特定の部分が動作しているかどうかにのみ関心があります。プログラムで使用中かどうか。

Linuxカーネルは、利用可能なRAMを「ページ」と呼ばれる小さな塊に分割します。その後、ページは「使用中」ページ(現在実行中のプログラムのコードまたはデータを含むページ)と「使用されていない」ページに分類されます。ページが「使用中」になるには、実行コード、テキストデータ、Javaバイトコード、またはその他のコンテンツが含まれているかどうかは重要ではありません。重要なのは、そのページが「使用中」であることです。 RAMにする必要があります。そのデータを絶えず訪問したからです。

RAMは利用可能な最速のストレージデバイスであるため、「未使用」ページを非アクティブにしておくのは無駄なので、カーネルはディスクから取得したキャッシュデータとすぐに再び必要になる可能性があるデータをキャッシュするために未使用のページを「リサイクル」します。カーネルには、これらの予測のためのいくつかのアルゴリズムがあります。 I / Oシステムのパフォーマンスは、そのアルゴリズムがコンピュータの実際のワークロードをどれだけうまく予測するかに大きく依存します。

また、I/O 操作を高速化するために、RAM の一部がディスクに書き込まれるデータをバッファリングするために使用されます。大容量ファイルを遅いディスク(USBスティックなど)にコピーすると、コマンドcpはデータが完全に書き込まれるのを待ってからデバイスに入ります。これは、カーネルが(遅い)書き込み操作を高速化するために、一部のデータをディスクに書き戻すために正確に発生します。数秒後にcpプログラムが完了することがあります。データがディスクに書き込まれると、このページは再利用可能と見なされます(キャッシュされたデータに再利用されるか、必要に応じて「使用中」プールに移動されます)。

指摘したように、「キャッシュ」ページは、「使用中」データにさらにページを割り当てる必要がある場合は、カーネルから(比較的)すばやく回収できます。 「キャッシュ」ページはディスクから利用可能なデータのみを保持するためです(キャッシュが必要なときにディスクからデータを再インポートします。

追加資料:

関連情報