スポンサーリンク

MLOCKALL(2) FreeBSD システムコールマニュアル MLOCKALL(2)

名称

mlockall, munlockall − プロセスのアドレス空間のロック (アンロック)

ライブラリ

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

書式

#include <sys/mman.h>

int

mlockall(int flags);

int

munlockall(void);

解説

mlockall() システムコールはプロセスのアドレス空間に関連付けられた物理ペー ジを、そのアドレス空間がアンロックされるまで、またはプロセスが終了するま で、または他のプログラムイメージを exec するまでの間、メモリ内にロックし ます。

以下のフラグは mlockall() の振舞いに影響します:

       MCL_CURRENT

プロセスのアドレス空間に現在マップされている全てのページを ロックします。

MCL_FUTURE
将来プロセスのアドレス空間にマップされる全てのページを、マッ ピングが確立する時点でロックします。これらのマッピングがリ ソースの制限の超過を引き起こす場合には、将来のマッピングの失 敗を引き起こすかもしれないことに、注意してください。

物理メモリは潜在的に欠乏しているリソースであるため、プロセスはどのくらい の量をロックできるのかを制限されています。 1 つのプロセスは最低でもシステ ム全体に渡る ‘‘wired pages’’ リミットをロック可能で、プロセス当たりの RLIMIT_MEMLOCK リソース制限をロック可能です。

munlockall() 呼び出しはプロセスのアドレス空間の中の全てのロックされたメモ リ領域をアンロックします。 munlockall() 呼び出し後にマップされる全ての領 域は、ロックされません。

戻り値

戻り値 0 は、呼び出しが成功し、その範囲内の全てのページがロックまたはアン ロックされたことを示します。戻り値 −1 は、エラーが発生し、その範囲内の全 てのページのロック状態が変更されないまま残されていることを示します。この 場合、グローバル変数 errno がそのエラーを示すために設定されます。

エラー

mlockall() は以下の場合に失敗します:

       [EINVAL]

flags 引数が 0 であるか、または実装されていないフラグ を含んでいます。

[ENOMEM]
指定された範囲のロックが、システムまたはプロセス当たり のロック可能なメモリの制限を越えます。

[EAGAIN]
プロセスのアドレス空間にマップされたメモリの一部または 全てが、呼び出しが実行された時にロックできませんでし た。

[EPERM]
呼び出し側のプログラムが、要求された操作を行なうための 適切な権限を持っていません。

関連項目

mincore(2), mlock(2), mmap(2), munmap(2), setrlimit(2)

規格

mlockall() および munlockall() 関数は IEEE Std 1003.1-2001 (‘‘POSIX.1’’) に適合していると思われます。

歴史

mlockall() および munlockall() 関数は FreeBSD 5.1 ではじめて登場しまし た。 FreeBSD 5.1.

バグ

プロセス当たりのリソースの制限は、ロックされた仮想メモリの量について制限 されます。その一方、システム全体での制限はロックされた物理ページの数につ いての制限です。そのために、同一の物理ページに対する 2 つの別個のロックさ れたマッピングを持つプロセスは、プロセス当たりの制限に対しては 2 ページと してカウントし、システム制限ではただ 1 つのページとしてカウントします。

FreeBSD 10.0 June 12, 1999 FreeBSD 10.0

スポンサーリンク