1

私は現在、OSの最終試験に向けて勉強しています。一部の論文の先生は、mmap関数 (メモリ マップ) について簡単に言及しています。

私が理解しているように(間違っている場合は修正してください)、mmapは物理メモリからRAMにいくつかのファイルをロードするために使用されます(ページのデフォルトの後)。問題は、そのファイルへのアクセス時間を高速化する以外に、実際的な理由が見当たらないことです。

私は正しいですか?mmap はこれにのみ使用されますか?

4

4 に答える 4

5

「mmap」には多くの目的があります。

  1. 読み取り/書き込みアクセスを高速化するためにファイルをマッピングすることは、確かに 1 つの用途です。

  2. 共有メモリ (プロセス間通信用など) も別のものです。

  3. mmap は、低レベルのデバイス通信用の I/O ポート アドレスをマップするためにも使用されます。

于 2012-04-18T21:40:25.680 に答える
3

mmap は、物理メモリから RAM にいくつかのファイルをロードするために使用されます (ページのデフォルトの後)。

不足しているページをロードします。変更も同じ方法でディスクに書き込むことができます!

  • パフォーマンス (ファイル全体をロードする必要はありません) は、ランダム アクセスがあれば非常にうまく機能します。
  • コードを大幅にコンパクトにすることができ、ファイル I/O について心配する必要はありません。
  • OS はメモリ管理を処理し、メモリに保持するページと破棄するページを決定できます。
于 2012-04-18T21:41:39.903 に答える
3

@ paulsm4の回答に加えて:

  1. ...
  2. ...
  3. ...
  4. 最近のほとんどのmalloc(3)実装ではmmap(2)、プライベート プロセス メモリの管理に使用されています。
  5. 動的リンクローダーld.so(8)は、共有ライブラリのマッピングに使用します。
于 2012-04-18T21:47:43.483 に答える
1

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されたメモリ領域の最大サイズがちょっと痛いです。

于 2012-04-18T22:32:25.150 に答える