コンピューティングにおいて、ページキャッシュ(ディスクキャッシュとも呼ばれる)[ 1 ]は、ハードディスクドライブ(HDD)やソリッドステートドライブ(SSD)などの二次記憶装置から生成されたページのための透過的なキャッシュです。オペレーティングシステムは、メインメモリ(RAM)の未使用領域にページキャッシュを保持し、キャッシュされたページの内容へのアクセスを高速化し、全体的なパフォーマンスを向上させます。ページキャッシュは、カーネルのページングメモリ管理によって実装され、アプリケーションからはほとんど透過的です。
通常、アプリケーションに直接割り当てられていない物理メモリはすべて、オペレーティングシステムによってページキャッシュとして使用されます。メモリは本来アイドル状態であり、アプリケーションが要求すれば容易に解放されるため、一般的にパフォーマンスの低下はなく、オペレーティングシステムはそのようなメモリを「空き」または「利用可能」と報告することさえあります。
メインメモリと比較すると、ハードディスクドライブの読み書きは遅く、ランダムアクセスにはコストのかかるディスクシークが必要です。そのため、メインメモリの容量が大きいほど、メモリにキャッシュできるデータが増えるため、パフォーマンスが向上します。[ 2 ]ハードウェア側では、ディスクコントローラ(この場合、キャッシュはハードディスクドライブに統合され、通常はディスクバッファと呼ばれます[ 3 ] )またはディスクアレイコントローラにある専用のRAMまたはNVRAMチップによって、ディスクキャッシュが別途提供されます。このようなメモリは、ページキャッシュと混同しないでください。オペレーティングシステムは、メインメモリの一部をファイルシステム書き込みバッファとして使用することもあり、これはページバッファと呼ばれることがあります。[ 4 ]
ページ キャッシュに取り込まれた後に変更されたページは、ダーティ ページと呼ばれます。[ 5 ]ページ キャッシュ内の非ダーティ ページは、二次ストレージ(ハードディスク ドライブやソリッド ステート ドライブなど) に同一のコピーが存在するため、それらの領域を破棄して再利用する方が、アプリケーション メモリをページ アウトするよりもはるかに高速であり、ダーティ ページを二次ストレージにフラッシュしてその領域を再利用するよりも、多くの場合、優先されます。アプリケーションやライブラリなどの実行可能バイナリも、通常はページ キャッシュを介してアクセスされ、仮想メモリを使用して個々のプロセススペースにマッピングされます(これは、Unix ライクなオペレーティングシステムではmmapシステム コールによって行われます)。これは、バイナリ ファイルが別々のプロセス間で共有されるだけでなく、バイナリの未使用部分が最終的にメイン メモリからフラッシュされ、メモリの節約につながることを意味します。
キャッシュされたページは簡単に削除して再利用できるため、一部のオペレーティングシステム、特にWindows NTでは、ページキャッシュの使用量を「利用可能な」メモリとして報告しますが、実際にはそのメモリはディスクページに割り当てられています。このため、Windowsにおけるページキャッシュの利用状況について混乱が生じています。
ページキャッシュは、ディスクへの書き込みにも役立ちます。ディスクへのデータ書き込み中に変更されたメインメモリ内のページは「ダーティ」としてマークされ、解放される前にディスクにフラッシュする必要があります。ファイル書き込みが発生すると、特定のブロックのキャッシュされたページが検索されます。ページキャッシュに既に存在する場合は、メインメモリ内のそのページに書き込みが行われます。ページキャッシュに存在しない場合、書き込みがページサイズの境界に完全に一致すると、ページはディスクから読み込まれず、割り当てられてすぐにダーティとしてマークされます。それ以外の場合は、ページがディスクからフェッチされ、要求された変更が行われます。ページキャッシュで作成または開かれたものの、書き込みが行われなかったファイルは、後で読み取られたときにゼロバイトのファイルになる可能性があります。
しかし、キャッシュされたページすべてに書き込みができるわけではありません。プログラムコードは読み取り専用またはコピーオンライトとしてマッピングされることが多く、後者の場合、コードの変更はプロセス自身にのみ表示され、ディスクには書き込まれません。
2019年、セキュリティ研究者はページキャッシュに対するサイドチャネル攻撃を実証しました。これは、特定のファイルページ(実行可能ファイルやライブラリファイルなど)がキャッシュに存在するかどうかを体系的に監視することで、特権分離を回避し、他のプロセスに関するデータを抜き出すことができるというものです。 [ 6 ]
ドライブのバッファは、ドライブから頻繁にアクセスされるデータを保存するためのドライブ上のRAMの量です。