tail head cat sleep
QR code linking to this page

manページ  — MLOCKALL

名称

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

内容

ライブラリ

Standard C Library (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 つのページとしてカウントします。

MLOCKALL (2) June 12, 1999

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

When people say "Drive safe!" I'm like no, a safe is for keeping money, I drive car.
— Artur Bagyants