FreeBSD 日本語マニュアル検索 (jman/japropos/jwhatis)


日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。

4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)

13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。



検索コマンド: man apropos whatis
コマンド/キーワード:
日本語マニュアル RELEASE :
セクション:
Table of Contents
名称 | ライブラリ | 書式 | 解説 | | 戻り値 | エラー | 関連項目
MMAP(2)                FreeBSD システムコールマニュアル                MMAP(2)

名称
     mmap -- メモリの割り付け、またはファイルまたはデバイスをメモリにマップす
     る

ライブラリ
     標準 C ライブラリ (libc, -lc)

書式
     #include <sys/mman.h>

     void *
     mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);

解説
     mmap() システムコールによって、addr から開始し、多くても len バイトが継続
     するページは、fd によって記述されたオブジェクトからバイトオフセット
     offset で開始するようにマップされます。len がページサイズの倍数ではないな
     ら、マップされた領域は、指定された範囲を越えて拡張します。マップされたオ
     ブジェクトの終わりを越えるような拡張は、0 で満たされます。

     fd が通常のファイルまたは共用メモリオブジェクトを参照するなら、offset で
     始まるバイトの範囲と len バイトの継続は、オブジェクトの指定できる (必ずし
     も現在でなく) オフセットに対して合理的でなければなりません。特に、offset
     値は、負を指定することはできません。オブジェクトが切り詰められ、プロセス
     が切り詰められた全体的な領域内であるページを後にアクセスするなら、アクセ
     スは、中止され、SIGBUS シグナルがプロセスに配信されます。

     fd がデバイスファイルを参照するなら、offset 値の解釈は、デバイス特有で、
     デバイスドライバによって定義されます。仮想メモリサブシステムは、この場合
     に、ドライバに変更せずにそれを渡す、offset 値にあらゆる制限事項を与えませ
     ん。

     addr が 0 でないなら、それは、システムへのヒントとして使用されます。(シス
     テムの都合を考えて、領域の実際のアドレスは、指定されたアドレスと異なるか
     もしれません。) addr が 0 であるなら、アドレスは、システムによって選択さ
     れます。領域の実際の開始アドレスが返されます。成功した mmap は、割り付け
     られたアドレス範囲のあらゆる以前のマップを削除します。

     保護 (領域のアクセスのしやすさ) は、次の値を論理和 (or) することによって
     prot 引数で指定されます:

     PROT_NONE   ページは、アクセスできません。
     PROT_READ   ページは、読み込みできます。
     PROT_WRITE  ページは、書み込みできます。
     PROT_EXEC   ページは、実行できます。

     flags 引数は、マップされたオブジェクトのタイプ、マッピングオプションと
     マップされたページのコピーに行なわれた修正が、プロセスに特有であるか、ま
     たは他の参照と共有されることになっているかどうかを指定します。共有、マッ
     ピングタイプとオプションは、次の値を論理和 (or) することによって flags 引
     数で指定されます:

     MAP_32BIT          現在のプロセスのアドレス空間の最初の 2GB の領域を要求
                        します。適切な領域を見つけることができないんら、mmap()
                        は、失敗します。このフラグは、64 ビットのプラット
                        フォームでのみ利用可能です。

     MAP_ALIGNED(n)     要求された境界で領域を整列します。適切な領域を見つける
                        ことができないなら、mmap() は、失敗します。n 引数は、
                        希望の整列の 2 進数の対数を指定します。

     MAP_ALIGNED_SUPER  大きな (``スーパ'') ページの潜在的な使用を最大化する領
                        域を整列します。適切な領域を見つけることができないな
                        ら、mmap() は、失敗します。システムは、マップのサイズ
                        に基づいた適切なページサイズを選択します。領域の整列と
                        同様に使用されたページサイズは、両方とも、マップされて
                        いるファイルのプロパティによって影響されます。特に、
                        ファイルの既存のページの物理アドレスは、特定の整列を要
                        求します。領域は、あらゆる特定の境界で整列することは保
                        証されません。

     MAP_ANON           あらゆる特定のファイルに関連しなかった匿名のメモリを
                        マップします。MAP_ANON を作成のために使用されるファイ
                        ル記述子は、-1 でなければなりません。offset 引数は、0
                        でなければなりません。

     MAP_ANONYMOUS      このフラグは、MAP_ANON と同じであり、互換性のために提
                        供されています。

     MAP_EXCL           このフラグは、MAP_FIXED と組み合わせてのみ使用すること
                        ができます。その結果の説明については、MAP_FIXED の定義
                        を参照してください。

     MAP_FIXED          指定したものとは異なっているアドレスを選択するシステム
                        を許可しません。指定されたアドレスを使用することができ
                        ないなら、mmap() は、失敗します。MAP_FIXED が指定され
                        るなら、addr は、ページサイズの倍数でなければなりませ
                        ん。MAP_EXCL が指定されないなら、成功した MAP_FIXED 要
                        求は、addr から addr + len までの範囲のプロセスのペー
                        ジのためのあらゆる以前のマッピングを置き換えます。対照
                        的に、MAP_EXCL が指定されるなら、要求は、マッピングが
                        既に範囲内に存在するなら、失敗します。

     MAP_GUARD          マッピングの代わりに、指定されたサイズのガードを作成し
                        ます。ガードによって、プロセスは、実際のマッピングに
                        よって後で置き換えることができる、アドレス空間の予約を
                        作成することを可能にします。

                        mmap は、要求が MAP_FIXED を指定しないなら、ガードのア
                        ドレス範囲のマッピングを作成しません。munmap(2) でガー
                        ドを破壊することができます。ガードされた範囲へのスレッ
                        ドによってあらゆるメモリのアクセスは、そのスレッドに
                        SIGSEGV シグナルの配信する結果となります。

     MAP_NOCORE         領域は、コアファイルに含まれません。

     MAP_NOSYNC         この VM マップによって汚染されたデータは、根拠もなくで
                        はなく (通常ページャによって) 必要なときのみ物理的なメ
                        ディアにフラッシュされます。一般的に、これは、更新デー
                        モンが、そのようなマップを通して汚染されたページをフ
                        ラッシュするのを防ぎ、したがって、ファイルに裏打ちされ
                        た共有メモリマップを使用して、関連していないプロセスに
                        渡ってメモリの効率的な共有を許可します。このオプション
                        なしで、汚染されたあらゆる VM ページは、(利用者が、IPC
                        目的のために共有されたファイルに裏打ちされた mmap 領域
                        を使用しているときのように) 生じるために必要としないな
                        ら、性能の問題を引き起こすかもしれない、時々 (通常
                        30-60 秒ごと) ディスクにフラッシュされます。汚染された
                        データは、オブジェクトのすべてのマッピングが削除され、
                        オブジェクトを参照しているすべての記述子がクローズされ
                        るとき、自動的にフラッシュされます。VM/ファイルシステ
                        ムの一貫性は、利用者が MAP_NOSYNC を使用するかどうか維
                        持されることに注意してください。このオプションは、(ま
                        だ) UNIX プラットフォームに渡って移植性はありません
                        が、いくつかは、デフォルトで同じ振る舞いを実装していま
                        す。

                        警告!  したがって、ftruncate(2) でファイルを拡張するこ
                        とは、大きな穴を作成し、次に、共有される mmap() を修正
                        することによって穴を充てんすることは、深刻なファイルの
                        断片化を導くかもしれません。そのような断片化を回避する
                        ために、mmap() によってその領域を修正する前の新しく拡
                        張された領域に 0 を write() (書き込む) ことによって
                        ファイルの裏打ちされた格納を常にあらかじめ割り付けるべ
                        きです。断片化の問題は、ページが全体的にランダムな順序
                        でディスクにフラッシュするかもしれないので、MAP_NOSYNC
                        ページに特に敏感です。

                        ファイルに基づいた共有メモリの格納を実装するために
                        MAP_NOSYNC を使用するとき、同じことが当てはまります。
                        それを ftruncate() (ファイルを切り詰める) ことでなく裏
                        打ちされたファイルに 0 を write() (書き込むこと) に
                        よって裏打ちされた格納を作成することが推奨されます。例
                        えば、``dd if=filename of=/dev/null bs=32k'' を使用し
                        て、大きなファイルをシーケンシャルに読み込む間に、
                        ``iostat 1'' に由来する KB/t (転送ごとのキロバイト) を
                        観測することによってファイルの断片化をテストすることが
                        できます。

                        fsync(2) システムコールは、物理的なメディアに汚染され
                        た NOSYNC VM データを含んで、ファイルに関連したすべて
                        の汚染されたデータとメタデータをフラッシュします。
                        sync(8) コマンドと sync(2) システムコールは、一般的
                        に、汚染された NOSYNC VM データをフラッシュしません。
                        BSD は、整合性のあるファイルシステムバッファキャッシュ
                        を実装したので、msync(2) システムコールは、通常必要で
                        はありません。しかしながら、それは、ファイルシステム
                        バッファで汚い VM ページを関連させるために使用され、し
                        たがって、それらは、後でなくより早く物理的なメディアに
                        フラッシュされます。

     MAP_PREFAULT_READ  領域中のあらゆるメモリ常駐のページが、読み込みアクセス
                        のためにマップできるように、ページテーブルのような、呼
                        び出しプロセスの最も低いレベルの仮想アドレス変換の構造
                        を直ちに更新します。通常、これらの構造は、ゆっくり更新
                        されます。このオプションの効果は、そうでなければ、その
                        領域への初期の読み込みアクセスで起こる任意のソフトの誤
                        りを除去することです。たとえ、このオプションが、
                        PROT_WRITE を含んで prot を排除しなくても、その領域へ
                        の初期の書き込みアクセスでソフトの誤りを除去しません。

     MAP_PRIVATE        修正は、プライベートです。

     MAP_SHARED         修正は、共有されます。

     MAP_STACK          MAP_STACK は、MAP_ANON と 0 の offset を意味します。fd
                        引数は、-1 でなければならず、prot は、少なくとも
                        PROT_READ と PROT_WRITE を含まなければなりません。

                        このオプションは、スタックの先頭からから開始し、下方に
                        成長する、多くても len バイトのサイズに成長するメモリ
                        地域を作成します。スタックの先頭は、len バイトを追加し
                        て、呼び出しによって返された開始アドレスです。最大の成
                        長したスタックの下端は、呼び出しによって返された開始ア
                        ドレスです。

                        MAP_STACK で作成されたスタックは、自動的に成長します。
                        ガードは、それらのスタックがまえもって全体のスタックを
                        マップすることを必要とせずに成長することができる、領域
                        の不注意な使用を防止します。

     close(2) システムコールは、ページをアンマップしません、さらなる詳細につい
     ては、munmap(2) を参照してください。


     この実装は、offset 引数で整列の制限を強制しませんが、移植性のあるプログラ
     ムは、ページで整列された値のみを使用しなければなりません。

     大きなページのマッピングは、オブジェクトに裏打ちされたページが、仮想アド
     レス空間と RAM の両方の一致するブロックで整列されることを必要とします。シ
     ステムは、大きな物理ページの整列に一致する、仮想アドレス空間のマップの要
     求を整列させることによって RAM 中の大きなページによって既に裏打ちされてい
     るオブジェクトをマップするとき、大きなページのマップを使用することを自動
     的に試みます。システムは、RAM のページによってまだ裏打ちされない、オブ
     ジェクトの部分をマップするとき、さらに大きなページのマッピングを使用しま
     す。MAP_ALIGNED_SUPER フラグは、マップが既存の大きなページと一致できるよ
     うに、オブジェクトが既に大きなページを使用するなら、システムがこの整列を
     上書きすることを除いて、MAP_ALIGNED に似ている大きなページのサイズへの
     マップの要求を整列する最適化です。このフラグは、まだ RAM に存在するページ
     がないオブジェクトの最初のマップの大きなページの使用を最大化にするために
     主に役に立ちます。

戻り値
     成功して終了すると、mmap() は、マップされた領域へのポインタを返します。そ
     うでなければ、MAP_FAILED の値が返され、errno は、エラーを示す値が設定され
     ます。

エラー
     mmap() システムコールは、次の場合に失敗します:

     [EACCES]           フラグ PROT_READ が prot 引数の一部として指定され、fd
                        が読み込みのためにオープンされていません。フラグ
                        MAP_SHARED と PROT_WRITE が flagsprot 引数の一部と
                        して指定され、fd が読み込みのためにオープンされていま
                        せん。

     [EBADF]            fd 引数が有効なオープンされたファイルの記述子ではあり
                        ません。

     [EINVAL]           fd が、通常のファイルまたは共用メモリを参照したとき、
                        無効 (負) の値が、offset 引数に渡されました、

     [EINVAL]           無効の値が、prot 引数で渡されました。

     [EINVAL]           未定義のオプションが、flags 引数で設定されました。

     [EINVAL]           MAP_PRIVATE と MAP_SHARED の両方が指定されました。

     [EINVAL]           MAP_ANON, MAP_GUARD, MAP_PRIVATE, MAP_SHARED または
                        MAP_STACK のどれも指定されませんでした。これらのフラグ
                        の少なくとも 1 つが含まれていなければなりません。

     [EINVAL]           MAP_FIXED が指定され、addr 引数が整列されたページでな
                        い、または希望のアドレス空間の一部がユーザプロセスのた
                        めの有効なアドレス空間の外にあります。

     [EINVAL]           MAP_FIXED と MAP_32BIT の両方が、指定され、求められる
                        アドレス空間の一部が、ユーザアドレス空間の最初の 2GB
                        の外側に存在します。

     [EINVAL]           len 引数が 0 と等しかった。

     [EINVAL]           MAP_ALIGNED が指定され、希望の整列が、マシンの仮想アド
                        レスサイズより大きいか、またはページより小さかったのい
                        ずれかです。

     [EINVAL]           MAP_ANON が指定されて fd 引数が -1 ではありませんでし
                        た。

     [EINVAL]           MAP_ANON が指定され、offset 引数が 0 ではありませんで
                        した。

     [EINVAL]           MAP_FIXED と MAP_EXCL の両方が、指定されましたが、要求
                        された領域は、既にマッピングによって使用されています。

     [EINVAL]           MAP_EXCL が指定されましたが、MAP_FIXED が指定されませ
                        んでした。

     [EINVAL]           MAP_GUARD が、指定されましたが、offset 引数が、0 では
                        なく、fd 引数が、-1 ではなかったか、または prot 引数が
                        PROT_NONE ではありませんでした。

     [EINVAL]           MAP_GUARD が、フラグ MAP_ANON, MAP_PREFAULT,
                        MAP_PREFAULT_READ, MAP_PRIVATE, MAP_SHARED, MAP_STACK
                        の 1 つとともに指定されました。

     [ENODEV]           MAP_ANON が、指定されていませんでした、そして fd は、
                        通常またはキャラクタ特殊ファイルを参照していませんでし
                        た。

     [ENOMEM]           MAP_FIXED が指定され、addr 引数が利用可能ではありませ
                        んでした。MAP_ANON が指定され、利用可能なメモリが不足
                        していました。

関連項目
     madvise(2), mincore(2), minherit(2), mlock(2), mprotect(2), msync(2),
     munlock(2), munmap(2), getpagesize(3), getpagesizes(3)

FreeBSD 11.2                     June 22, 2017                    FreeBSD 11.2

Table of Contents

FreeBSD マニュアル検索