|
メモリマップトファイル()はファイルまたはそれに類似するリソース(あるいはその一部)を仮想記憶空間の連続領域に直接マッピングしたものである。そのリソースは通常物理的にディスク上に存在するファイルだが、デバイス、共有メモリオブジェクトなどオペレーティングシステムがファイル記述子で参照できるリソースなら何でもよい。ファイルとメモリ空間の対応付けにより、アプリケーションはそれを主記憶の一部として扱うことができる。 == 利点 == メモリマップトファイルの最大の利点は、I/O性能の向上であり、特に大きなファイルに対して使った際に顕著である。小さなファイルに対して使用すると、メモリへのマッピングはページ単位(通常4KiB)であるためフラグメンテーションによる無駄が生じやすい〔Using mmap() for Advanced File I/O BrainDump Tutorials〕。例えば5KiBのファイルをマッピングすると8KiBが割り当てられ、3KiBが無駄となる。メモリマップトファイルは通常のリード/ライト操作よりも2つの理由で高速である。1つは、プログラムのローカルメモリの単純な更新に比べ、システムコールは何倍もオーバーヘッドがかかる。2つめは、多くのオペレーティングシステムにおいて実際にマッピングされているメモリはカーネルの管理する(ファイルキャッシュ)だという点で、ユーザー空間にコピーを作成する必要がない。 アプリケーションレベルのメモリマップトファイルも物理的ファイル操作に比べて優れていることが多い。アプリケーションはファイル内のデータを直接その場で更新でき、ファイルの先頭からのシークしたり、更新したコンテンツを一時的に保管するなどの処理が不要となる。メモリマップトファイルは内部ではページ単位で扱われるので、先頭から順にアクセスする場合(例えばフラットファイルデータベースやコンフィギュレーションファイルなどの場合)、新たなページ境界をまたぐときだけディスクアクセスを必要とし、1回の操作でより大きな部分をディスクに書き込むことができる。 メモリマップトファイルの考えられる利点の1つとして「遅延ロード」がある。すなわち、大きなファイルをマッピングしても実際には少量のメモリしか使わない。搭載している物理メモリ量よりずっと大きいファイル全体をロードしようとすると、OSはディスクからメモリへの読み込みとメモリからディスクへの書き出しを同時に行わなくてはならなくなり、頻繁にスラッシングが発生することになる。メモリマッピングはスワップファイルを完全に迂回するだけではなく、データの編集が行われた部分だけを小さなページ単位でロードすればよく、の技法と似ている。 メモリマッピング処理はメモリ管理が行い、同じサブシステムがスワップファイルも担当している。メモリマップトファイルはページ単位にメモリにロードされ、ページサイズはOSが性能を最適化するよう選択する。スワップファイル管理は仮想記憶システムの重要な要素であり、ファイルをページ単位でメモリにロードする部分は高度に最適化されているのが一般的である〔"What Do Memory-Mapped Files Have to Offer?". 〕。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「メモリマップトファイル」の詳細全文を読む 英語版ウィキペディアに対照対訳語「 Memory-mapped file 」があります。 スポンサード リンク
|