私は現在、OSの最終試験に向けて勉強しています。一部の論文の先生は、mmap
関数 (メモリ マップ) について簡単に言及しています。
私が理解しているように(間違っている場合は修正してください)、mmapは物理メモリからRAMにいくつかのファイルをロードするために使用されます(ページのデフォルトの後)。問題は、そのファイルへのアクセス時間を高速化する以外に、実際的な理由が見当たらないことです。
私は正しいですか?mmap はこれにのみ使用されますか?
私は現在、OSの最終試験に向けて勉強しています。一部の論文の先生は、mmap
関数 (メモリ マップ) について簡単に言及しています。
私が理解しているように(間違っている場合は修正してください)、mmapは物理メモリからRAMにいくつかのファイルをロードするために使用されます(ページのデフォルトの後)。問題は、そのファイルへのアクセス時間を高速化する以外に、実際的な理由が見当たらないことです。
私は正しいですか?mmap はこれにのみ使用されますか?
「mmap」には多くの目的があります。
読み取り/書き込みアクセスを高速化するためにファイルをマッピングすることは、確かに 1 つの用途です。
共有メモリ (プロセス間通信用など) も別のものです。
mmap は、低レベルのデバイス通信用の I/O ポート アドレスをマップするためにも使用されます。
mmap は、物理メモリから RAM にいくつかのファイルをロードするために使用されます (ページのデフォルトの後)。
不足しているページをロードします。変更も同じ方法でディスクに書き込むことができます!
mmap は、メモリー管理をプログラマーの手から大幅に取り除き、OS の手に委ねます。
これは、ディスクから物理メモリへの仮想メモリ サブシステムを使用したデマンド ページングに関するものです。
したがって、ファイルの 11111 番目のバイトを見るには、シークして読み取る代わりに、mmap を使用して配列インデックスを使用できます。OSは周囲のデータを「バッファキャッシュ」(実際にはページキャッシュ)に保持します。
以下に例を示します: http://stromberg.dnsalias.org/~strombrg/pbmonherc.html
この例は、Linux のカーネルで mmap がサポートされていたときに作成されたもので、少し面倒ですが、C ライブラリにはそれを呼び出すためのスタブがまだありませんでした。ただし、mmap.c はほとんど無視できます。この例では、mmap を使用して、モノクロ ディスプレイ アダプターを使用してピクセルのオンとオフを設定します。
別の合理的な用途は、ブルーム フィルターです: http://stromberg.dnsalias.org/~strombrg/drs-bloom-filter/
...しかし、32ビットOSでは、mmapされたメモリ領域の最大サイズがちょっと痛いです。