総合手引 | セクション 2 | English | オプション |
#include <sys/mman.h>
mlock() システムコールの後、指示されたページは、アンロックされるまで 非常駐ページフォルトもアドレス変換フォルトも起こしません。 しかし、TLB の管理をソフトウェアで実装しているアーキテクチャでは、 保護違反フォルト、または TLB ミスフォルトを起こす可能性はあります。 ページに関するすべてのロックされたマッピングが削除されるまで 物理ページはメモリに留まります。 複数のプロセスが、それぞれの仮想アドレスマッピングから 同じ物理ページをロックする可能性があります。 同様に、1 つのプロセスが同じページに対する異なる複数の 仮想マッピングによって、または同じアドレス範囲へのネストした mlock() 呼び出しによって、ページを多重にロックする可能性があります。 アンロックは、 munlock() によって明示的に、または munmap() によって暗黙的に行われます。 munmap() はマップされていないアドレス範囲の割り当てを解除します。 ロックされたマッピングは fork(2) による子プロセスには継承されません。
物理メモリは潜在的に乏しいリソースなので、プロセスは どのくらいロックできるかの制限を受けます。 1 つのプロセスは、システム全体に共通の ``固定されたページ'' 限界、 またはプロセスごとの RLIMIT_MEMLOCK リソース限界のいずれか小さい方の値まで mlock() できます。
これらの呼び出しが利用できるのはスーパユーザだけです。
呼び出しが成功すると、範囲内のすべてのページがロック (アンロック) されます。 失敗した場合は、範囲内のすべてのページのロック状態は変更されません。
[EPERM] | |
呼び出し側がスーパユーザではありません。 | |
[EINVAL] | |
指定されたアドレスがページ境界に整列されていないか、または長さが負です。 | |
[EAGAIN] | |
指示された範囲のロックによって、ロックされたメモリについての システム限界またはプロセスごとの限界を超過してしまいます。 | |
[ENOMEM] | |
指示されたアドレス範囲の一部が割り当てられていません。 ページのフォルト / マッピングでエラーがありました。 | |
[EPERM] | |
呼び出し側がスーパユーザではありません。 | |
[EINVAL] | |
指定されたアドレスがページ境界に整列していないか、または長さが負です。 | |
[ENOMEM] | |
指示されたアドレス範囲の一部が割り当てられていません。 | |
プロセスごとのリソースの限界はロックされた仮想メモリの量への制限で、 システム全体に共通の制限はロックされた物理ページの数についてのものです。 このように、2 つの別々のマッピングから同じ物理ページを ロックするとプロセスごとの制限に対しては 2 ページとしてカウントされ、 システム制限では 1 ページだけとしてカウントされます。
プロセスごとのリソース制限は現時点ではサポートされていません。
MLOCK (2) | August 10, 2004 |
総合手引 | セクション 2 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.