.\"
.TH MLOCK 2 2014\-04\-14 Linux "Linux Programmer's Manual"
.SH 名前
-mlock \- メモリのロックとロック解除を行う
+mlock \- ã\83¡ã\83¢ã\83ªã\83¼ã\81®ã\83ã\83\83ã\82¯ã\81¨ã\83ã\83\83ã\82¯è§£é\99¤ã\82\92è¡\8cã\81\86
.SH 書式
.nf
\fB#include <sys/mman.h>\fP
.fi
.SH 説明
\fBmlock\fP() と \fBmlockall\fP() はそれぞれ、呼び出し元プロセスの仮想アドレス空間の一部または全部を RAM
-上にロックし、メモリがスワップエリアにページングされるのを防ぐ。 \fBmunlock\fP() と \fBmunlockall\fP()
+ä¸\8aã\81«ã\83ã\83\83ã\82¯ã\81\97ã\80\81ã\83¡ã\83¢ã\83ªã\83¼ã\81\8cã\82¹ã\83¯ã\83\83ã\83\97ã\82¨ã\83ªã\82¢ã\81«ã\83\9aã\83¼ã\82¸ã\83³ã\82°ã\81\95ã\82\8cã\82\8bã\81®ã\82\92é\98²ã\81\90ã\80\82 \fBmunlock\fP() ã\81¨ \fBmunlockall\fP()
は逆の操作で、それぞれ呼び出し元プロセスの仮想アドレス空間の一部または全部を ロック解除する。つまり、指定された仮想アドレス範囲のページは
-ã\82«ã\83¼ã\83\8dã\83«ã\83¡ã\83¢ã\83ªã\83\9eã\83\8dã\83¼ã\82¸ã\83£ã\83¼ã\81\8bã\82\89è¦\81æ±\82ã\81\95ã\82\8cã\82\8cã\81°ã\82¹ã\83¯ã\83\83ã\83\97ã\82¢ã\82¦ã\83\88ã\81\99ã\82\8bã\82\88ã\81\86ã\81«ã\81ªã\82\8bã\80\82 ã\83¡ã\83¢ã\83ªのロックとロック解除はページ単位で行われる。
+ã\82«ã\83¼ã\83\8dã\83«ã\83¡ã\83¢ã\83ªã\83¼ã\83\9eã\83\8dã\83¼ã\82¸ã\83£ã\83¼ã\81\8bã\82\89è¦\81æ±\82ã\81\95ã\82\8cã\82\8cã\81°ã\82¹ã\83¯ã\83\83ã\83\97ã\82¢ã\82¦ã\83\88ã\81\99ã\82\8bã\82\88ã\81\86ã\81«ã\81ªã\82\8bã\80\82 ã\83¡ã\83¢ã\83ªã\83¼のロックとロック解除はページ単位で行われる。
.SS "mlock() と munlock()"
\fBmlock\fP() は \fIaddr\fP から始まる長さ \fIlen\fP バイトのアドレス範囲のページをロックする。 呼び出しが成功した場合には、
指定されたアドレス範囲を含む全てのページは RAM に残り続けることが保証される。 これらのページは後でロック解除されるまで RAM
に残り続けることが保証される。
\fBmunlock\fP() は、 \fIaddr\fP から始まる長さ \fIlen\fP バイトのアドレス範囲のページのロックを解除する。
-この呼び出しを行った後は、カーネルが、指定されたメモリ範囲を含む 全てのページを外部のスワップ空間に移動できるようになる。
+この呼び出しを行った後は、カーネルが、指定されたメモリー範囲を含む 全てのページを外部のスワップ空間に移動できるようになる。
.SS "mlockall() と munlockall()"
\fBmlockall\fP() は呼び出し元プロセスのアドレス空間にマップされている全てのページを ロックする。これにはコード、データ、スタックの
-å\90\84ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\80\81å\85±æ\9c\89ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\80\81ã\82«ã\83¼ã\83\8dã\83«ã\81®ã\83¦ã\83¼ã\82¶ã\83¼ç©ºé\96\93ã\83\87ã\83¼ã\82¿ã\80\81 å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\80\81ã\83¡ã\83¢ã\83ªã\83»マップされたファイルが含まれる。
-ã\82·ã\82¹ã\83\86ã\83 ã\83»ã\82³ã\83¼ã\83«ã\81\8cæ\88\90å\8a\9fã\81\97ã\81\9få ´å\90\88ã\81«ã\81¯å\85¨ã\81¦ã\81®ã\83\9eã\83\83ã\83\97ã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸ã\81¯ RAM ã\81« æ®\8bã\82\8bã\81\93ã\81¨ã\82\92ä¿\9d証ã\81\95ã\82\8cã\82\8bã\80\82 ã\81\93ã\82\8cã\82\89ã\81®ã\83\9aã\83¼ã\82¸ã\81¯å¾\8cã\81§ã\83ã\83\83ã\82¯è§£é\99¤ã\81\95ã\82\8cã\82\8bã\81¾ã\81§ RAM
+å\90\84ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\80\81å\85±æ\9c\89ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\80\81ã\82«ã\83¼ã\83\8dã\83«ã\81®ã\83¦ã\83¼ã\82¶ã\83¼ç©ºé\96\93ã\83\87ã\83¼ã\82¿ã\80\81 å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼ã\80\81ã\83¡ã\83¢ã\83ªã\83¼マップされたファイルが含まれる。
+システムコールが成功した場合には全てのマップされたページは RAM に 残ることを保証される。 これらのページは後でロック解除されるまで RAM
に残り続けることが保証される。
\fIflags\fP 引数は以下の内容の一つまたは複数のビット OR から構成される:
.TP
\fBMCL_FUTURE\fP
将来、プロセスのアドレス空間にマップされる全てのページをロックする。 例えば、ヒープ (heap) やスタックの成長により新しく必要になったページだけで
-ã\81ªã\81\8fã\80\81æ\96°ã\81\97ã\81\8fã\83¡ã\83¢ã\83ªã\83\9eã\83\83ã\83\97ã\81\95ã\82\8cã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\82\84å\85±æ\9c\89ã\83¡ã\83¢ã\83ª領域もロックされる。
+ã\81ªã\81\8fã\80\81æ\96°ã\81\97ã\81\8fã\83¡ã\83¢ã\83ªã\83¼ã\83\9eã\83\83ã\83\97ã\81\95ã\82\8cã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\82\84å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼領域もロックされる。
.PP
\fBMCL_FUTURE\fP が指定されていると、以後のシステムコール (例えば、 \fBmmap\fP(2), \fBsbrk\fP(2),
\fBmalloc\fP(3)) は、ロックするバイト数が許可された最大値 (下記参照) を超えた場合に 失敗する可能性がある。
.TP
\fBENOMEM\fP
(Linux 2.6.9 以降) 呼び出し元は非ゼロの ソフト資源制限 \fBRLIMIT_MEMLOCK\fP
-を持つが、制限が許可している以上のメモリをロックしようとした。 この制限は、プロセスが特権 (\fBCAP_IPC_LOCK\fP)
+ã\82\92æ\8c\81ã\81¤ã\81\8cã\80\81å\88¶é\99\90ã\81\8c許å\8f¯ã\81\97ã\81¦ã\81\84ã\82\8b以ä¸\8aã\81®ã\83¡ã\83¢ã\83ªã\83¼ã\82\92ã\83ã\83\83ã\82¯ã\81\97ã\82\88ã\81\86ã\81¨ã\81\97ã\81\9fã\80\82 ã\81\93ã\81®å\88¶é\99\90ã\81¯ã\80\81ã\83\97ã\83ã\82»ã\82¹ã\81\8cç\89¹æ¨© (\fBCAP_IPC_LOCK\fP)
を持っている場合は適用されない。
.TP
\fBENOMEM\fP
\fBmlockall\fP() と \fBmunlockall\fP() が利用可能な POSIX システムでは、 \fB_POSIX_MEMLOCK\fP は
\fI<unistd.h>\fP で 0 より大きい値に定義されている (\fBsysconf\fP(3) も参照のこと)。
.SH 注意
-メモリのロックの用途としては主に二つある: リアルタイム アルゴリズムと高いセキュリティの必要なデータ処理である。リアルタイムの
+ã\83¡ã\83¢ã\83ªã\83¼ã\81®ã\83ã\83\83ã\82¯ã\81®ç\94¨é\80\94ã\81¨ã\81\97ã\81¦ã\81¯ä¸»ã\81«äº\8cã\81¤ã\81\82ã\82\8b: ã\83ªã\82¢ã\83«ã\82¿ã\82¤ã\83 ã\82¢ã\83«ã\82´ã\83ªã\82ºã\83 ã\81¨é«\98ã\81\84ã\82»ã\82ã\83¥ã\83ªã\83\86ã\82£ã\81®å¿\85è¦\81ã\81ªã\83\87ã\83¼ã\82¿å\87¦ç\90\86ã\81§ã\81\82ã\82\8bã\80\82ã\83ªã\82¢ã\83«ã\82¿ã\82¤ã\83 ã\81®
アプリケーションは決定的なタイミングやスケジューリングを必要とするが、 ページングは予期しないプログラムの実行遅延をもたらす主要な要因となる。
リアルタイムのアプリケーションはたいていは \fBsched_setscheduler\fP(2) でリアルタイムスケジューラに変更される。
暗号やセキュリティのソフトウェアはしばしばパスワードや秘密鍵のデータの ような重要なバイト列を扱う。ページングの結果、これらの秘密が
-スワップ用の固定媒体に転送されるかもしれない。そして、セキュリティ・ ソフトウェアが RAM 上の秘密を削除して終了したずっと後になっても、
+スワップ用の固定媒体に転送されるかもしれない。そして、セキュリティ ソフトウェアが RAM 上の秘密を削除して終了したずっと後になっても、
このスワップされたデータには敵がアクセスできる可能性がある (しかし、ラップトップといくつかのデスクトップコンピュータの サスペンドモードはシステムの
-RAM の内容をメモリのロックに関わらず ディスクに保存することに注意)。
+RAM ã\81®å\86\85容ã\82\92ã\83¡ã\83¢ã\83ªã\83¼ã\81®ã\83ã\83\83ã\82¯ã\81«é\96¢ã\82\8fã\82\89ã\81\9a ã\83\87ã\82£ã\82¹ã\82¯ã\81«ä¿\9då\98ã\81\99ã\82\8bã\81\93ã\81¨ã\81«æ³¨æ\84\8f)ã\80\82
リアルタイムプロセスが \fBmlockall\fP() を使ってページフォールトによる遅延を防ごうとする場合、
関数呼び出しによってページフォールトが発生しないように、 時間制限の厳しい部分 (time\-critical section) に入る前に
十分な量のロックされたスタックを確保しておく必要がある。 これを実現するには、十分な大きさの自動変数 (の配列) を確保し、
-これらのスタック用のページがメモリ上に確保されるようにこの配列に 書き込みを行う関数を用意し、これを呼び出せばよい。こうすることで、
+これらのスタック用のページがメモリー上に確保されるようにこの配列に 書き込みを行う関数を用意し、これを呼び出せばよい。こうすることで、
十分な量のページがスタックにマッピングされ、RAM にロックされる。 ダミーの書き込みを行うことによって、 時間制限の厳しい部分 (critical
section) 内では書き込み時コピーによる ページフォールトさえも発生しないことが保証される。
-メモリロックは \fBfork\fP(2) で作成された子プロセスには継承されず、 \fBexecve\fP(2) が呼ばれたり、プロセスが終了した場合は
+ã\83¡ã\83¢ã\83ªã\83¼ã\83ã\83\83ã\82¯ã\81¯ \fBfork\fP(2) ã\81§ä½\9cæ\88\90ã\81\95ã\82\8cã\81\9få\90ã\83\97ã\83ã\82»ã\82¹ã\81«ã\81¯ç¶\99æ\89¿ã\81\95ã\82\8cã\81\9aã\80\81 \fBexecve\fP(2) ã\81\8cå\91¼ã\81°ã\82\8cã\81\9fã\82\8aã\80\81ã\83\97ã\83ã\82»ã\82¹ã\81\8cçµ\82äº\86ã\81\97ã\81\9få ´å\90\88ã\81¯
自動的に削除される (ロック解除される)。 \fBmlockall\fP() の \fBMCL_FUTURE\fP 設定は \fBfork\fP(2)
で作成された子プロセスには継承されず、 \fBexecve\fP(2) の中でクリアされる。
-あるアドレス範囲に対するメモリロックは、そのアドレス範囲が \fBmunmap\fP(2) によってアンマップされた場合は削除される。
+ã\81\82ã\82\8bã\82¢ã\83\89ã\83¬ã\82¹ç¯\84å\9b²ã\81«å¯¾ã\81\99ã\82\8bã\83¡ã\83¢ã\83ªã\83¼ã\83ã\83\83ã\82¯ã\81¯ã\80\81ã\81\9dã\81®ã\82¢ã\83\89ã\83¬ã\82¹ç¯\84å\9b²ã\81\8c \fBmunmap\fP(2) ã\81«ã\82\88ã\81£ã\81¦ã\82¢ã\83³ã\83\9eã\83\83ã\83\97ã\81\95ã\82\8cã\81\9få ´å\90\88ã\81¯å\89\8aé\99¤ã\81\95ã\82\8cã\82\8bã\80\82
-メモリのロックは累積しない。 すなわち複数回 \fBmlock\fP() や \fBmlockall\fP() を呼び出してロックされたページでも、
+ã\83¡ã\83¢ã\83ªã\83¼ã\81®ã\83ã\83\83ã\82¯ã\81¯ç´¯ç©\8dã\81\97ã\81ªã\81\84ã\80\82 ã\81\99ã\81ªã\82\8fã\81¡è¤\87æ\95°å\9b\9e \fBmlock\fP() ã\82\84 \fBmlockall\fP() ã\82\92å\91¼ã\81³å\87ºã\81\97ã\81¦ã\83ã\83\83ã\82¯ã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸ã\81§ã\82\82ã\80\81
対応する範囲に対して \fBmunlock\fP() を 1 回呼び出したり \fBmunlockall\fP() を呼び出したりするだけでロック解除される。
複数の場所や複数のプロセスにマップされているページは、少なくとも一つの場所、 一つのプロセスでロックされている限りは RAM に残り続ける。
.SS "Linux での注意"
Linux 固有の \fI/proc/PID/status\fP ファイルの \fIVmLck\fP フィールドには、
\fBmlock\fP(), \fBmlockall\fP() および \fBmmap\fP(2) \fBMAP_LOCKED\fP を使って、
-ID が \fIPID\fP のプロセスがロックしているメモリ量 (キロバイト単位) が
+ID が \fIPID\fP のプロセスがロックしているメモリー量 (キロバイト単位) が
表示される。
.SS 制限と権限
-Linux 2.6.8 以前では、メモリをロックするためには特権 (\fBCAP_IPC_LOCK\fP) が必要で、 ソフト資源制限
-\fBRLIMIT_MEMLOCK\fP はプロセスがどれだけのメモリをロックできるかの制限を定義する。
+Linux 2.6.8 以å\89\8dã\81§ã\81¯ã\80\81ã\83¡ã\83¢ã\83ªã\83¼ã\82\92ã\83ã\83\83ã\82¯ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\81¯ç\89¹æ¨© (\fBCAP_IPC_LOCK\fP) ã\81\8cå¿\85è¦\81ã\81§ã\80\81 ã\82½ã\83\95ã\83\88è³\87æº\90å\88¶é\99\90
+\fBRLIMIT_MEMLOCK\fP ã\81¯ã\83\97ã\83ã\82»ã\82¹ã\81\8cã\81©ã\82\8cã\81 ã\81\91ã\81®ã\83¡ã\83¢ã\83ªã\83¼ã\82\92ã\83ã\83\83ã\82¯ã\81§ã\81\8dã\82\8bã\81\8bã\81®å\88¶é\99\90ã\82\92å®\9a義ã\81\99ã\82\8bã\80\82
-Linux 2.6.9 以降では、特権を持つプロセスがロックできるメモリ量は無制限となり、 代わりにソフト資源制限 \fBRLIMIT_MEMLOCK\fP
-は特権を持たないプロセスがロックできるメモリ量の制限を定義する。
+Linux 2.6.9 以降では、特権を持つプロセスがロックできるメモリー量は無制限となり、 代わりにソフト資源制限 \fBRLIMIT_MEMLOCK\fP
+は特権を持たないプロセスがロックできるメモリー量の制限を定義する。
.SH バグ
2.4.17 までの 2.4 シリーズの Linux カーネルには、 \fBmlockall\fP() \fBMCL_FUTURE\fP フラグが
\fBfork\fP(2) で継承されると言うバグがある。 これはカーネル 2.4.18 で修正された。
.\" 23 Jan 2006
カーネル 2.6.9 以降では、特権を持ったプロセスが \fImlockall(MCL_FUTURE)\fP を呼び出した後で、特権をなくした場合 (例えば、
実効 UID を 0 以外の値に変更するなどにより、 \fBCAP_IPC_LOCK\fP ケーパビリティを失った場合)、リソース上限
-\fBRLIMIT_MEMLOCK\fP に達すると、それ以降のメモリ割り当て (例えば \fBmmap\fP(2), \fBbrk\fP(2)) は失敗する。
+\fBRLIMIT_MEMLOCK\fP に達すると、それ以降のメモリー割り当て (例えば \fBmmap\fP(2), \fBbrk\fP(2)) は失敗する。
.SH 関連項目
\fBmmap\fP(2), \fBsetrlimit\fP(2), \fBshmctl\fP(2), \fBsysconf\fP(3), \fBproc\fP(5),
\fBcapabilities\fP(7)