X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=release%2Fman7%2Ffutex.7;h=f71f8fea847b7eb3f1e21da3ec23736e239fd032;hb=83f9e5d087c3464d5131604d3c9893479e6228eb;hp=6b3d8dea1f25c6fe87c3ccf35e6bbfbb2251a2ca;hpb=385329a00e7910812cffee7720cbd7ae0321afc5;p=linuxjm%2FLDP_man-pages.git diff --git a/release/man7/futex.7 b/release/man7/futex.7 index 6b3d8dea..f71f8fea 100644 --- a/release/man7/futex.7 +++ b/release/man7/futex.7 @@ -21,47 +21,47 @@ .\" .TH FUTEX 7 2012\-08\-05 Linux "Linux Programmer's Manual" .SH 名前 -futex \- 高速ユーザ空間ロック機構 +futex \- 高速ユーザー空間ロック機構 .SH 書式 .nf \fB#include \fP .fi .SH 説明 .PP -Linux カーネルは、ユーザ空間で高速なロック機構やセマフォを使用するための 基礎的要素として futex ("Fast user\-space -mutexes"; 高速ユーザ空間 mutex) を 提供している。 futex は非常に基本的なもので、 POSIX mutex +Linux カーネルは、ユーザー空間で高速なロック機構やセマフォを使用するための 基礎的要素として futex ("Fast user\-space +mutexes"; 高速ユーザー空間 mutex) を 提供している。 futex は非常に基本的なもので、 POSIX mutex のような高度なロック機構の概念を構築するのに役立っている。 .PP このページはすべての設計決定を記述するようにはなっておらず、 アプリケーションやライブラリの開発に関係することがらに限っている。 実際にはプログラマの多くは直接は futex を扱わないが、その代わり futex に基づいて構築されたシステムライブラリ (例えば NPTL スレッド) に 依存することになるだろう。 .PP -futex は異なるプロセス間で共有することのできるメモリ片で識別される。 これらの異なるプロセスでは、同じアドレスが付与されている必要はない。 +futex は異なるプロセス間で共有することのできるメモリー片で識別される。 これらの異なるプロセスでは、同じアドレスが付与されている必要はない。 裸の姿では futex のセマンティクスはセマフォと同じである。 futex は不可分操作で (atomically) -インクリメントしたりデクリメントしたりできる カウンタで、プロセスは値が正になるのを待つことができる。 +インクリメントしたりデクリメントしたりできる カウンターで、プロセスは値が正になるのを待つことができる。 .PP -futex の操作は、競合がない場合には完全にユーザ空間で行なわれる。 カーネルは競合が起こった場合の仲裁に関与するだけである。 +futex の操作は、競合がない場合には完全にユーザー空間で行なわれる。 カーネルは競合が起こった場合の仲裁に関与するだけである。 良識ある設計では競合が起こらないよう努力するが、 futex も競合状態に関して最適化されている。 .PP 裸の姿では、 futex は不可分なアセンブリ命令でのみ操作される アラインメントの揃った int 型の変数である。 複数のプロセスはこの int -型変数を、 \fBmmap\fP(2) を用いるか、 共有メモリセグメントを介するか、 メモリ空間を共有する (この場合、 -アプリケーションは一般的にマルチ・スレッドであると呼ばれる) か方法で共有する。 +型変数を、 \fBmmap\fP(2) を用いるか、 共有メモリーセグメントを介するか、 メモリー空間を共有する (この場合、 +アプリケーションは一般的にマルチスレッドであると呼ばれる) か方法で共有する。 .SS セマンティクス .PP -futex の操作はすべてユーザ空間から始まるが、必要に応じて \fBfutex\fP(2) システムコールを用いてカーネルと通信する。 +futex の操作はすべてユーザー空間から始まるが、必要に応じて \fBfutex\fP(2) システムコールを用いてカーネルと通信する。 .PP futex を "up" するには、 ホスト CPU に対し int 型変数を不可分操作でインクリメントするような、 適切なアセンブリ命令を実行する。 そのあと、実際に 0 から 1 に変化したかどうかをチェックし、 変化していれば待ちプロセス (waiter) はないということであり、操作は完了する。 これは競合のない場合であり、高速でよく起こるはずである。 .PP -競合がある場合、不可分操作のインクリメントでカウンタは \-1 (または他の負の数) -から変化する。これが検出されると、待ちプロセスがあるということである。 ユーザ空間ではカウンタを 1 に設定し、 \fBFUTEX_WAKE\fP +競合がある場合、不可分操作のインクリメントでカウンターは \-1 (または他の負の数) +から変化する。これが検出されると、待ちプロセスがあるということである。 ユーザー空間ではカウンターを 1 に設定し、 \fBFUTEX_WAKE\fP を用いてカーネルに待ちプロセスを wake (起床) させるよう指示する。 .PP -futex の獲得を待つ、すなわち futex を "down" するには反対の操作を行なう。 不可分操作でカウンタをデクリメントし、カウンタが 0 +futex の獲得を待つ、すなわち futex を "down" するには反対の操作を行なう。 不可分操作でカウンターをデクリメントし、カウンターが 0 に変化したかどうかを チェックする。変化していれば操作は完了し futex は競合していないということである。 0 -にならなかった場合、プロセスはカウンタを \-1 に設定し、 他のプロセスがその futex を up するのを待つようカーネルに要求しなければならない。 -これは \fBFUTEX_WAIT\fP を行なうことで実現される。 +にならなかった場合、プロセスはカウンターを \-1 に設定し、 他のプロセスがその futex を up +するのを待つようカーネルに要求しなければならない。 これは \fBFUTEX_WAIT\fP を行なうことで実現される。 .PP \fBfutex\fP(2) システムコールには、省略可能な引数としてタイムアウトを渡すことができ、 カーネルはその futex が up されるのをどれくらいの期間待つべきかを 指定することができる。この場合、セマンティクスはもっと複雑になるため、 より詳細な情報を得るにはプログラマは @@ -72,8 +72,8 @@ futex の獲得を待つ、すなわち futex を "down" するには反対の 2.5.40 以降で利用可能である。 .SH 注意 .PP -再び繰り返しておくが、裸の futex はエンドユーザが容易に使える概念として 意図されたものではない。 -実装者は、アセンブリ言語に慣れており、以下に挙げる futex ユーザ空間ライブラリの ソースを読み終えていることが要求される。 +再び繰り返しておくが、裸の futex はエンドユーザーが容易に使える概念として 意図されたものではない。 +実装者は、アセンブリ言語に慣れており、以下に挙げる futex ユーザー空間ライブラリの ソースを読み終えていることが要求される。 .PP .\" .SH "AUTHORS" .\" .PP @@ -91,6 +91,6 @@ of the Ottawa Linux Symposium 2002), futex の使用例ライブラリ, futex\-* .UR ftp://ftp.kernel.org\:/pub\:/linux\:/kernel\:/people\:/rusty/ .UE . .SH この文書について -この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.68 の一部 +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man\-pages/ に書かれている。