OSDN Git Service

Update README
[linuxjm/LDP_man-pages.git] / release / man7 / futex.7
index 14236d4..f71f8fe 100644 (file)
-.\" This page is made available under the MIT license.
-.\"
 .\" This manpage has been automatically generated by docbook2man
 .\" from a DocBook document.  This tool can be found at:
 .\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
 .\" Please send any bug reports, improvements, comments, patches,
 .\" etc. to Steve Cheng <steve@ggi-project.org>.
 .\"
+.\" %%%LICENSE_START(MIT)
+.\" This page is made available under the MIT license.
+.\" %%%LICENSE_END
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.\"
 .\" Japanese Version Copyright(C) 2003 Suzuki Takashi
 .\"         all rights reserved.
 .\" Translated Fri Oct 24 10:37:10 JST 2003
 .\"         by Suzuki Takashi.
 .\"
-.\"WORD: contend                ¶¥¹ç¤¹¤ë
-.\"WORD: sleep                  µ¯¾²ÂÔ¤Á¤¹¤ë
-.\"WORD: wake                   µ¯¾²¤¹¤ë
-.\"WORD: wake up                µ¯¾²¤¹¤ë
-.\"
-.TH FUTEX 7 2002-12-31 "Linux" "Linux Programmer's Manual"
-.SH Ì¾Á°
-futex - ¹â®¥æ¡¼¥¶¶õ´Ö¥í¥Ã¥¯µ¡¹½
-.SH ½ñ¼°
+.TH FUTEX 7 2012\-08\-05 Linux "Linux Programmer's Manual"
+.SH 名前
+futex \- 高速ユーザー空間ロック機構
+.SH 書式
 .nf
-.B #include <linux/futex.h>
+\fB#include <linux/futex.h>\fP
 .fi
-.SH ÀâÌÀ
+.SH 説明
 .PP
-Linux ¥«¡¼¥Í¥ë¤Ï¡¢¥æ¡¼¥¶¶õ´Ö¤Ç¹â®¤Ê¥í¥Ã¥¯µ¡¹½¤ä¥»¥Þ¥Õ¥©¤ò»ÈÍѤ¹¤ë¤¿¤á¤Î
-´ðÁÃŪÍ×ÁǤȤ·¤Æ futex ("Fast Userspace muTexes"; ¹â®¥æ¡¼¥¶¶õ´Ö mutex) ¤ò
-Ä󶡤·¤Æ¤¤¤ë¡£
-futex ¤ÏÈó¾ï¤Ë´ðËÜŪ¤Ê¤â¤Î¤Ç¡¢ POSIX mutex ¤Î¤è¤¦¤Ê¹âÅ٤ʥí¥Ã¥¯µ¡¹½¤Î³µÇ°¤ò
-¹½ÃÛ¤¹¤ë¤Î¤ËÌòΩ¤Ã¤Æ¤¤¤ë¡£
+Linux カーネルは、ユーザー空間で高速なロック機構やセマフォを使用するための 基礎的要素として futex ("Fast user\-space
+mutexes"; 高速ユーザー空間 mutex) を 提供している。 futex は非常に基本的なもので、 POSIX mutex
+のような高度なロック機構の概念を構築するのに役立っている。
 .PP
-¤³¤Î¥Ú¡¼¥¸¤Ï¤¹¤Ù¤Æ¤ÎÀß·×·èÄê¤òµ­½Ò¤¹¤ë¤è¤¦¤Ë¤Ï¤Ê¤Ã¤Æ¤ª¤é¤º¡¢
-¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ä¥é¥¤¥Ö¥é¥ê¤Î³«È¯¤Ë´Ø·¸¤¹¤ë¤³¤È¤¬¤é¤Ë¸Â¤Ã¤Æ¤¤¤ë¡£
-¼ÂºÝ¤Ë¤Ï¥×¥í¥°¥é¥Þ¤Î¿¤¯¤ÏľÀܤϠfutex ¤ò°·¤ï¤Ê¤¤¤¬¡¢¤½¤ÎÂå¤ï¤ê
-futex ¤Ë´ð¤Å¤¤¤Æ¹½ÃÛ¤µ¤ì¤¿¥·¥¹¥Æ¥à¥é¥¤¥Ö¥é¥ê (Î㤨¤Ð NPTL ¥¹¥ì¥Ã¥É) ¤Ë
-°Í¸¤¹¤ë¤³¤È¤Ë¤Ê¤ë¤À¤í¤¦¡£
+このページはすべての設計決定を記述するようにはなっておらず、 アプリケーションやライブラリの開発に関係することがらに限っている。
+実際にはプログラマの多くは直接は futex を扱わないが、その代わり futex に基づいて構築されたシステムライブラリ (例えば NPTL
+スレッド) に 依存することになるだろう。
 .PP
-futex ¤Ï°Û¤Ê¤ë¥×¥í¥»¥¹´Ö¤Ç¶¦Í­¤¹¤ë¤³¤È¤Î¤Ç¤­¤ë¥á¥â¥êÊҤǼ±Ê̤µ¤ì¤ë¡£
-¤³¤ì¤é¤Î°Û¤Ê¤ë¥×¥í¥»¥¹¤Ç¤Ï¡¢Æ±¤¸¥¢¥É¥ì¥¹¤¬ÉÕÍ¿¤µ¤ì¤Æ¤¤¤ëɬÍפϤʤ¤¡£
-Íç¤Î»Ñ¤Ç¤Ï futex ¤Î¥»¥Þ¥ó¥Æ¥£¥¯¥¹¤Ï¥»¥Þ¥Õ¥©¤ÈƱ¤¸¤Ç¤¢¤ë¡£
-futex ¤ÏÉÔ²ÄʬÁàºî¤Ç (atomically) ¥¤¥ó¥¯¥ê¥á¥ó¥È¤·¤¿¤ê¥Ç¥¯¥ê¥á¥ó¥È¤·¤¿¤ê¤Ç¤­¤ë
-¥«¥¦¥ó¥¿¤Ç¡¢¥×¥í¥»¥¹¤ÏÃͤ¬Àµ¤Ë¤Ê¤ë¤Î¤òÂԤĤ³¤È¤¬¤Ç¤­¤ë¡£
+futex は異なるプロセス間で共有することのできるメモリー片で識別される。 これらの異なるプロセスでは、同じアドレスが付与されている必要はない。
+裸の姿では futex のセマンティクスはセマフォと同じである。 futex は不可分操作で (atomically)
+インクリメントしたりデクリメントしたりできる カウンターで、プロセスは値が正になるのを待つことができる。
 .PP
-futex ¤ÎÁàºî¤Ï¡¢¶¥¹ç¤¬¤Ê¤¤¾ì¹ç¤Ë¤Ï´°Á´¤Ë¥æ¡¼¥¶¶õ´Ö¤Ç¹Ô¤Ê¤ï¤ì¤ë¡£
-¥«¡¼¥Í¥ë¤Ï¶¥¹ç¤¬µ¯¤³¤Ã¤¿¾ì¹ç¤ÎÃçºÛ¤Ë´ØÍ¿¤¹¤ë¤À¤±¤Ç¤¢¤ë¡£
-Îɼ±¤¢¤ëÀ߷פǤ϶¥¹ç¤¬µ¯¤³¤é¤Ê¤¤¤è¤¦ÅØÎϤ¹¤ë¤¬¡¢
-futex ¤â¶¥¹ç¾õÂ֤˴ؤ·¤ÆºÇŬ²½¤µ¤ì¤Æ¤¤¤ë¡£
+futex の操作は、競合がない場合には完全にユーザー空間で行なわれる。 カーネルは競合が起こった場合の仲裁に関与するだけである。
+良識ある設計では競合が起こらないよう努力するが、 futex も競合状態に関して最適化されている。
 .PP
-Íç¤Î»Ñ¤Ç¤Ï¡¢ futex ¤ÏÉÔ²Äʬ¤Ê¥¢¥»¥ó¥Ö¥êÌ¿Îá¤Ç¤Î¤ßÁàºî¤µ¤ì¤ë
-¥¢¥é¥¤¥ó¥á¥ó¥È¤Î·¤Ã¤¿ int ·¿¤ÎÊÑ¿ô¤Ç¤¢¤ë¡£
-Ê£¿ô¤Î¥×¥í¥»¥¹¤Ï¤³¤Î int ·¿ÊÑ¿ô¤ò¡¢
-.BR mmap (2)
-¤òÍѤ¤¤ë¤«¡¢
-¶¦Í­¥á¥â¥ê¥»¥°¥á¥ó¥È¤ò²ð¤¹¤ë¤«¡¢
-¥á¥â¥ê¶õ´Ö¤ò¶¦Í­¤¹¤ë (¤³¤Î¾ì¹ç¡¢
-¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï°ìÈÌŪ¤Ë¥Þ¥ë¥Á¡¦¥¹¥ì¥Ã¥É¤Ç¤¢¤ë¤È¸Æ¤Ð¤ì¤ë) ¤«ÊýË¡¤Ç¶¦Í­¤¹¤ë¡£
-.SS "¥»¥Þ¥ó¥Æ¥£¥¯¥¹"
+裸の姿では、 futex は不可分なアセンブリ命令でのみ操作される アラインメントの揃った int 型の変数である。 複数のプロセスはこの int
+型変数を、 \fBmmap\fP(2)  を用いるか、 共有メモリーセグメントを介するか、 メモリー空間を共有する (この場合、
+アプリケーションは一般的にマルチスレッドであると呼ばれる) か方法で共有する。
+.SS セマンティクス
 .PP
-futex ¤ÎÁàºî¤Ï¤¹¤Ù¤Æ¥æ¡¼¥¶¶õ´Ö¤«¤é»Ï¤Þ¤ë¤¬¡¢É¬Íפ˱þ¤¸¤Æ
-.BR futex (2)
-¥·¥¹¥Æ¥à¥³¡¼¥ë¤òÍѤ¤¤Æ¥«¡¼¥Í¥ë¤ÈÄÌ¿®¤¹¤ë¡£
+futex の操作はすべてユーザー空間から始まるが、必要に応じて \fBfutex\fP(2)  システムコールを用いてカーネルと通信する。
 .PP
-futex ¤ò "up" ¤¹¤ë¤Ë¤Ï¡¢
-¥Û¥¹¥È CPU ¤ËÂФ· int ·¿ÊÑ¿ô¤òÉÔ²ÄʬÁàºî¤Ç¥¤¥ó¥¯¥ê¥á¥ó¥È¤¹¤ë¤è¤¦¤Ê¡¢
-ŬÀڤʥ¢¥»¥ó¥Ö¥êÌ¿Îá¤ò¼Â¹Ô¤¹¤ë¡£
-¤½¤Î¤¢¤È¡¢¼ÂºÝ¤Ë 0 ¤«¤é 1 ¤ËÊѲ½¤·¤¿¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤·¡¢
-ÊѲ½¤·¤Æ¤¤¤ì¤ÐÂÔ¤Á¥×¥í¥»¥¹ (waiter) ¤Ï¤Ê¤¤¤È¤¤¤¦¤³¤È¤Ç¤¢¤ê¡¢Áàºî¤Ï´°Î»¤¹¤ë¡£
-¤³¤ì¤Ï¶¥¹ç¤Î¤Ê¤¤¾ì¹ç¤Ç¤¢¤ê¡¢¹â®¤Ç¤è¤¯µ¯¤³¤ë¤Ï¤º¤Ç¤¢¤ë¡£
+futex を "up" するには、 ホスト CPU に対し int 型変数を不可分操作でインクリメントするような、 適切なアセンブリ命令を実行する。
+そのあと、実際に 0 から 1 に変化したかどうかをチェックし、 変化していれば待ちプロセス (waiter) はないということであり、操作は完了する。
+これは競合のない場合であり、高速でよく起こるはずである。
 .PP
-¶¥¹ç¤¬¤¢¤ë¾ì¹ç¡¢ÉÔ²ÄʬÁàºî¤Î¥¤¥ó¥¯¥ê¥á¥ó¥È¤Ç¥«¥¦¥ó¥¿¤Ï \-1 (¤Þ¤¿¤Ï¾¤ÎÉé¤Î¿ô)
-¤«¤éÊѲ½¤¹¤ë¡£¤³¤ì¤¬¸¡½Ð¤µ¤ì¤ë¤È¡¢ÂÔ¤Á¥×¥í¥»¥¹¤¬¤¢¤ë¤È¤¤¤¦¤³¤È¤Ç¤¢¤ë¡£
-¥æ¡¼¥¶¶õ´Ö¤Ç¤Ï¥«¥¦¥ó¥¿¤ò 1 ¤ËÀßÄꤷ¡¢
-.B FUTEX_WAKE
-¤òÍѤ¤¤Æ¥«¡¼¥Í¥ë¤ËÂÔ¤Á¥×¥í¥»¥¹¤ò wake (µ¯¾²) ¤µ¤»¤ë¤è¤¦»Ø¼¨¤¹¤ë¡£
+競合がある場合、不可分操作のインクリメントでカウンターは \-1 (または他の負の数)
+から変化する。これが検出されると、待ちプロセスがあるということである。 ユーザー空間ではカウンターを 1 に設定し、 \fBFUTEX_WAKE\fP
+を用いてカーネルに待ちプロセスを wake (起床) させるよう指示する。
 .PP
-futex ¤Î³ÍÆÀ¤òÂԤġ¢¤¹¤Ê¤ï¤Á futex ¤ò "down" ¤¹¤ë¤Ë¤ÏÈ¿ÂФÎÁàºî¤ò¹Ô¤Ê¤¦¡£
-ÉÔ²ÄʬÁàºî¤Ç¥«¥¦¥ó¥¿¤ò¥Ç¥¯¥ê¥á¥ó¥È¤·¡¢¥«¥¦¥ó¥¿¤¬ 0 ¤ËÊѲ½¤·¤¿¤«¤É¤¦¤«¤ò
-¥Á¥§¥Ã¥¯¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ì¤ÐÁàºî¤Ï´°Î»¤· futex ¤Ï¶¥¹ç¤·¤Æ¤¤¤Ê¤¤¤È¤¤¤¦¤³¤È¤Ç¤¢¤ë¡£
-0 ¤Ë¤Ê¤é¤Ê¤«¤Ã¤¿¾ì¹ç¡¢¥×¥í¥»¥¹¤Ï¥«¥¦¥ó¥¿¤ò \-1 ¤ËÀßÄꤷ¡¢
-¾¤Î¥×¥í¥»¥¹¤¬¤½¤Î futex ¤ò up ¤¹¤ë¤Î¤òÂԤĤ褦¥«¡¼¥Í¥ë¤ËÍ׵ᤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-¤³¤ì¤Ï
-.B FUTEX_WAIT
-¤ò¹Ô¤Ê¤¦¤³¤È¤Ç¼Â¸½¤µ¤ì¤ë¡£
+futex の獲得を待つ、すなわち futex を "down" するには反対の操作を行なう。 不可分操作でカウンターをデクリメントし、カウンターが 0
+に変化したかどうかを チェックする。変化していれば操作は完了し futex は競合していないということである。 0
+にならなかった場合、プロセスはカウンターを \-1 に設定し、 他のプロセスがその futex を up
+するのを待つようカーネルに要求しなければならない。 これは \fBFUTEX_WAIT\fP を行なうことで実現される。
 .PP
-.BR futex (2)
-¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ë¤Ï¡¢¾Êά²Äǽ¤Ê°ú¿ô¤È¤·¤Æ¥¿¥¤¥à¥¢¥¦¥È¤òÅϤ¹¤³¤È¤¬¤Ç¤­¡¢
-¥«¡¼¥Í¥ë¤Ï¤½¤Î futex ¤¬ up ¤µ¤ì¤ë¤Î¤ò¤É¤ì¤¯¤é¤¤¤Î´ü´ÖÂԤĤ٤­¤«¤ò
-»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£¤³¤Î¾ì¹ç¡¢¥»¥Þ¥ó¥Æ¥£¥¯¥¹¤Ï¤â¤Ã¤ÈÊ£»¨¤Ë¤Ê¤ë¤¿¤á¡¢
-¤è¤ê¾ÜºÙ¤Ê¾ðÊó¤òÆÀ¤ë¤Ë¤Ï¥×¥í¥°¥é¥Þ¤Ï
-.BR futex (2)
-¤ò»²¾È¤¹¤ë¤³¤È¡£
-Ʊ¤¸¥Ú¡¼¥¸¤ËÈóƱ´ü¤Î futex ÂÔ¤Á¤Ë¤Ä¤¤¤Æ¤âµ­¤µ¤ì¤Æ¤¤¤ë¡£
-.SH ¥Ð¡¼¥¸¥ç¥ó
+\fBfutex\fP(2)  システムコールには、省略可能な引数としてタイムアウトを渡すことができ、 カーネルはその futex が up
+されるのをどれくらいの期間待つべきかを 指定することができる。この場合、セマンティクスはもっと複雑になるため、 より詳細な情報を得るにはプログラマは
+\fBfutex\fP(2)  を参照すること。 同じページに非同期の futex 待ちについても記されている。
+.SH バージョン
 .PP
-ºÇ½é¤Î futex Âбþ¤Ï Linux 2.5.7 ¤ÇÁȤ߹þ¤Þ¤ì¤¿¤¬¡¢
-¾åµ­¤Î¥»¥Þ¥ó¥Æ¥£¥¯¥¹¤È¤Ï°Û¤Ê¤ë¡£
-¸½ºß¤Î¥»¥Þ¥ó¥Æ¥£¥¯¥¹¤Ï Linux 2.5.40 °Ê¹ß¤ÇÍøÍѲÄǽ¤Ç¤¢¤ë¡£
-.SH Ãí°Õ
+最初の futex 対応は Linux 2.5.7 で組み込まれたが、 上記のセマンティクスとは異なる。 現在のセマンティクスは Linux
+2.5.40 以降で利用可能である。
+.SH 注意
 .PP
-ºÆ¤Ó·«¤êÊÖ¤·¤Æ¤ª¤¯¤¬¡¢Íç¤Î futex ¤Ï¥¨¥ó¥É¥æ¡¼¥¶¤¬Íưפ˻Ȥ¨¤ë³µÇ°¤È¤·¤Æ
-°Õ¿Þ¤µ¤ì¤¿¤â¤Î¤Ç¤Ï¤Ê¤¤¡£
-¼ÂÁõ¼Ô¤Ï¡¢¥¢¥»¥ó¥Ö¥ê¸À¸ì¤Ë´·¤ì¤Æ¤ª¤ê¡¢°Ê²¼¤Ëµó¤²¤ë futex ¥æ¡¼¥¶¶õ´Ö¥é¥¤¥Ö¥é¥ê¤Î
-¥½¡¼¥¹¤òÆɤ߽ª¤¨¤Æ¤¤¤ë¤³¤È¤¬Í׵ᤵ¤ì¤ë¡£
+再び繰り返しておくが、裸の futex はエンドユーザーが容易に使える概念として 意図されたものではない。
+実装者は、アセンブリ言語に慣れており、以下に挙げる futex ユーザー空間ライブラリの ソースを読み終えていることが要求される。
 .PP
-¤³¤Î¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤Ë¤Ï
-.BR futex (2)
-¥×¥ê¥ß¥Æ¥£¥Ö¤ÎºÇ¤â°ìÈÌŪ¤Ê»ÈÍÑË¡¤¬
-µ­¤µ¤ì¤Æ¤¤¤ë¡£¤³¤ì¤Ï·è¤·¤ÆÍ£°ì¤Î»ÈÍÑË¡¤Ç¤Ï¤Ê¤¤¡£
-.\" .SH Ãø¼Ô
+.\" .SH "AUTHORS"
 .\" .PP
-.\" futex ¤Ï Hubertus Franke (IBM Thomas J. Watson Research Center) ¤È
-.\" Matthew Kirkwood ¡¢ Ingo Molnar (Red Hat) ¡¢
-.\" Rusty Russell (IBM Linux Technology Center) ¤¬À߷פ·¡¢¸¡Æ¤¤·¤¿¡£
-.\" ¤³¤Î¥Ú¡¼¥¸¤Ï bert hubert ¤¬µ­¤·¤¿¡£
-.SH ´ØÏ¢¹àÌÜ
-.BR futex (2)
-.PP
-.IR "Fuss, Futexes and Furwocks: Fast Userlevel Locking in Linux"
-(proceedings of the Ottawa Linux Symposium 2002),
-futex ¤Î»ÈÍÑÎã¥é¥¤¥Ö¥é¥ê, futex-*.tar.bz2
-<URL:ftp://ftp.kernel.org/pub/linux/kernel/people/rusty/>.
+.\" Futexes were designed and worked on by Hubertus Franke
+.\" (IBM Thomas J. Watson Research Center),
+.\" Matthew Kirkwood, Ingo Molnar (Red Hat) and
+.\" Rusty Russell (IBM Linux Technology Center).
+.\" This page written by bert hubert.
+このマニュアルページには \fBfutex\fP(2)  プリミティブの最も一般的な使用法が 記されている。これは決して唯一の使用法ではない。
+.SH 関連項目
+\fBfutex\fP(2)
+
+\fIFuss, Futexes and Furwocks: Fast Userlevel Locking in Linux\fP (proceedings
+of the Ottawa Linux Symposium 2002), futex の使用例ライブラリ, futex\-*.tar.bz2
+.UR ftp://ftp.kernel.org\:/pub\:/linux\:/kernel\:/people\:/rusty/
+.UE .
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。