JM プロジェクトは、主に Linux 関連のマニュアルページの日本語ページを翻訳・公開しています。
... () システムコールは、 指定したアドレスの値が変更されるのをプログラムが待つ手段や 特定のアドレスに対して待機中のプロセスを wake (起床) させる手段を提供する (プロセスが異なれば同じメモリーに対するアドレスも同じではないかもしれないが、 カーネルは異なる ... るためにシステムコールを呼ぶ必要がある。 仲裁というのは、呼び出しプロセスを sleep (起床待ち) させたり、反対に 待ちプロセスを wake させたりすることを意味する。 この関数を呼び出すプロセスは futex (7) に記述されているセマンティクスに忠実であることが要求さ ... uaddr に指定された値 val がまだ格納されているかどうかを不可分操作で検証し、 sleep 状態で この futex アドレスに対して FUTEX_WAKE が実行されるのを待つ。 timeout 引き数が NULL でない場合、その内容は待ち時間の最大値を表す (この停止時間はシステムクロックの ... ... れば、 clear_child_tid で指定されたアドレスに 0 が書き込まれ、カーネルは以下の処理を実行する。 futex(clear_child_tid, FUTEX_WAKE, 1, NULL, NULL, 0); この処理の結果、このメモリーアドレスに対する futex wait を実行しているスレッドを一つ起こす (wake)。 fu ... tex wake 操作でのエラーは無視される。 返り値 set_tid_address () は常に呼び出し元のスレッド ID を返す。 エラー set_tid_address () は ... ... 以降では、スレッドの "timer slack" 値を制御することができます "timer slack" は、 停止中のシステムコールがタイムアウト以外で wake-up される (起こされる) 際に、カーネルに許容される遅延時間です。この遅延を認めることで、カーネルは wake-up イベントをまとめ ... て行うことができ、その結果、システム全体の wake-up 数を減らし、電力を節約することができます。詳細は prctl (2) の PR_SET_TIMERSLACK の説明を参照してください。 関連項目 dat ... ... の数) から変化する。これが検出されると、待ちプロセスがあるということである。 ユーザー空間ではカウンターを 1 に設定し、 FUTEX_WAKE を用いてカーネルに待ちプロセスを wake (起床) させるよう指示する。 futex の獲得を待つ、すなわち futex を "down" するには反対 ... ... フォの値の変更により、他のプロセス内でブロックされている semop (2) コールの続行が許可されると、それらのプロセスは起こされる (wake up)。 semnum 引数は無視される。 呼び出したプロセスはそのセマフォ集合に 変更 (書き込み) 許可を持たなければならない。 SETVAL ... フォの値の変更により、他のプロセス内でブロックされている semop (2) コールの続行が許可されると、それらのプロセスは起こされる (wake up)。 呼び出したプロセスはそのセマフォ集合に 変更 (書き込み) 許可を持たなければならない。 返り値 失敗した場合、 semctl () ... ... e threads (or processes) is awoken from epoll_wait (2). This provides a useful optimization for avoiding "thundering herd" wake-ups in some scenarios. autosleep との関係 システムが /sys/power/autosleep 経由で autosleep モードになっていて、 デバイスを ... そのイベントがキューに入るまでだけである。 イベントが処理されるまでデバイスを起こしたままにしておくには、 epoll_ctl (2) EPOLLWAKEUP フラグを使う必要がある。 EPOLLWAKEUP フラグが struct epoll_event の events フィールドでセットされた場合、 イベントがキュ ... 上記の時間の範囲を超えてシステムを起きたままの状態にしておく必要がある場合は、 2 番目の epoll_wait (2) の呼び出しの前に別の wake_lock を取る必要がある。 /proc インターフェース epoll が消費するカーネルメモリーの量を制限するために、 以下のインターフェー ... ... レコードを書き込む。 CAP_BLOCK_SUSPEND (Linux 3.5 以降) システムのサスペンドをブロックできる機能を使用する ( epoll (7) EPOLLWAKEUP , /proc/sys/wake_lock )。 CAP_CHOWN ファイルの UID とGID を任意に変更する ( chown (2) 参照)。 CAP_DAC_OVERRIDE ファイルの ... /proc や他のインターフェース経由で公開されているカーネルアドレスを参照する ( proc (5) の kptr_restrict の議論を参照)。 CAP_WAKE_ALARM (Linux 3.0 以降) システムを起こすトリガーを有効にする (タイマー CLOCK_REALTIME_ALARM や CLOCK_BOOTTIME_ALARM を設定す ... ... x (x <= 10) には、ある状況においてセマフォ値が 0 になるのを 待っているスレッドが、セマフォ値が実際に 0 になったときに起床 (wake up) されない、というバグがある。このバグはカーネル 2.6.11 で修正されている。 例 以下の部分的なコードは、 セマフォ 0 の値が ... ... x (x <= 10) には、ある状況においてセマフォ値が 0 になるのを 待っているスレッドが、セマフォ値が実際に 0 になったときに起床 (wake up) されない、というバグがある。このバグはカーネル 2.6.11 で修正されている。 例 以下の部分的なコードは、 セマフォ 0 の値が ... ... セスが終了したときに子プロセスのメモリー内の ctid が指す場所にある子プロセスのスレッド ID を消去し、 そのアドレスで futex を wake (起床) させる。 このアドレスは set_tid_address (2) システムコールで変更することができる。 この機能はスレッドライブラリで使 ... 日本語の文書やマニュアルを配布している個人/プロジェクトへのリンクです。