日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
EVENTTIMERS(9) FreeBSD カーネル開発者マニュアル EVENTTIMERS(9) 名称 eventtimers -- カーネルイベントタイマサブシステム 書式 #include <sys/timeet.h> struct eventtimer; typedef int et_start_t(struct eventtimer *et, sbintime_t first, sbintime_t period); typedef int et_stop_t(struct eventtimer *et); typedef void et_event_cb_t(struct eventtimer *et, void *arg); typedef int et_deregister_cb_t(struct eventtimer *et, void *arg); struct eventtimer { SLIST_ENTRY(eventtimer) et_all; char *et_name; int et_flags; #define ET_FLAGS_PERIODIC 1 #define ET_FLAGS_ONESHOT 2 #define ET_FLAGS_PERCPU 4 #define ET_FLAGS_C3STOP 8 #define ET_FLAGS_POW2DIV 16 int et_quality; int et_active; uint64_t et_frequency; sbintime_t et_min_period; sbintime_t et_max_period; et_start_t *et_start; et_stop_t *et_stop; et_event_cb_t *et_event_cb; et_deregister_cb_t *et_deregister_cb; void *et_arg; void *et_priv; struct sysctl_oid *et_sysctl; }; int et_register(struct eventtimer *et); int et_deregister(struct eventtimer *et); void et_change_frequency(struct eventtimer *et, uint64_t newfreq); ET_LOCK(); ET_UNLOCK(); struct eventtimer * et_find(const char *name, int check, int want); int et_init(struct eventtimer *et, et_event_cb_t *event, et_deregister_cb_t *deregister, void *arg); int et_start(struct eventtimer *et, sbintime_t first, sbintime_t period); int et_stop(struct eventtimer *et); int et_ban(struct eventtimer *et); int et_free(struct eventtimer *et); 解説 イベントタイマは、異なる時間に基づいたイベントを実行するために、指定され た時間または周期的に割り込みを生成することに対して責任があります。サブシ ステムは、次の 3 つの主要な部分から成ります: Drivers 要求された時間のイベントを生成するためにハードウェアを管理しま す。 Consumers sys/kern/kern_clocksource.c は、hardclock(), statclock() と profclock() タイムイベントでカーネルに供給するイベントタイマを 使用します。 Glue code sys/sys/timeet.h, sys/kern/kern_et.c は、イベントタイマドライ バと消費者 (consumer) に API を提供しています。 ドライバ API ドライバ API は、eventtimer 構造体の周囲で構築されます。その機能性を登録 するために、ドライバは、その構造体を割り付けて et_register() 呼び出しま す。ドライバは、次のフィールドに書き込むべきです: et_name 管理的のためのイベントタイマのユニークな名前。 et_flags タイマのケーパビリティを記述するフラグの組は、次の通りです: ET_FLAGS_PERIODIC 周期的なモードをサポート。 ET_FLAGS_ONESHOT 1 回限りのモードをサポート。 ET_FLAGS_PERCPU タイマは、CPU ごとです。 ET_FLAGS_C3STOP タイマは、CPU のスリープ状態で停止するか もしれません。 ET_FLAGS_POW2DIV タイマは、2^n 除数のみをサポートします。 et_quality このタイムカウンタ (timecounter) が他のものよりよいかどうか を認証する抽象的な値。より高い値は、より良いことを意味しま す。 et_frequency 適用可能で、知られているなら、タイマ発信器の基本的な周波 数。それを割ることによって取得することができた利用可能な周 波数の組を予測するために消費者によって使用されます。適用可 能でないか未知であるなら、0 であるべきです。 et_min_period, et_max_period 最小と最大の信頼できるプログラマブルな期間 (time period)。 et_start ドライバのタイマ開始関数ポインタ。 et_stop ドライバのタイマ停止関数ポインタ。 et_priv ドライバのプライベートデータの記憶域。 イベントタイマの機能が登録された後、それは、et_start と et_stop メソッド を通して制御されます。et_start メソッドは、指定されたイベントタイマを開始 するために呼び出されます。最後の 2 つの引数は、イベントが生成されるべきで あるとき、指定するために使用されます。first 引数は、最初のイベントが生成 される前に、期間 (time period) を指定します。周期的なモードで、NULL の値 は、最初の期間が period 引数の値と等しいことを指定します。period 引数は、 周期的なモードのための次のイベントの間の期間 (time period) を指定します。 NULL の値は、1 回限りのモードを指定します。少なくとも、これらの 2 つの引 数の 1 つは、NULL であってはいけません。イベントタイムに到着するとき、ド ライバは、2 番目の引数として et_arg を渡す et_event_cb コールバック関数を 呼び出すべきです。et_stop メソッドは、指定されたイベントタイマを停止する ために呼び出されます。CPU ごとのイベントタイマについて、et_start と et_stop メソッドは、現在の CPU に関連したタイマを制御します。 ドライバは、et_deregister() を呼び出すことによってその機能の登録を取り消 します。 実行している間に (例えば、省電力モードの間に) クロックハードウェアの周波 数を変更するかもしれないなら、ドライバは、各変更ごとに et_change_frequency() を呼び出さなければなりません。与えられたイベントタ イマがアクティブなタイマであるなら、et_change_frequency() は、すべての CPU のタイマを停止し、et->frequency を更新し、次に、すべての現在のイベン トが、新しい周波数を使用してスケジュールできるように、すべての CPU のタイ マを再開します。与えられたタイマが現在アクティブでないなら、 et_change_frequency() は、単に et->frequency を更新します。 消費者 (consumer) API et_find() によって消費者は、オプションで指定された名前および/またはケーパ ビリティフラグに一致する利用可能なイベントタイマを見つけることができま す。消費者は、返された eventtimer 構造体を読み込みますが、それを修正する べきではありません。必要とされるイベントタイマが見つかるとき、et_init() は、event とオプションで deregister コールバック関数と不透明な引数 arg を 提出して、呼び出されるべきです。その引数は、コールバックへの引数として渡 されます。イベントコールバック関数は、スケジュールされたタイムイベントで 呼び出されます。それは、ハードウェア割り込みコンテキストから呼び出される ので、スリープは、そこで許可されません。登録を取り消しコールバック関数 は、イベントタイマの機能がもはや利用可能ではない、消費者に報告するために 呼び出されます。この呼び出しにおいて、消費者は、返る前にイベントタイマを 使用して停止するべきです。 タイマが見つかり初期化される後に、et_start() と et_stop() によって、それ を制御することができます。引数は、ドライバ API に記述されているもののと同 じです。CPU ごとのイベントタイマは、特定の CPU からのみ制御することができ ます。 et_ban() によって、消費者は、どういうわけか検出されたなら、1 回限りと周期 的なケーパビリティフラグの両方をクリアすることによって、壊れているような イベントタイマをマークすることができます。et_free() は、et_init() の反対 です。それは、他の消費者の使用のためのイベントタイマを解放します。 ET_LOCK() と ET_UNLOCK() マクロは、et_find() によって返された登記されたイ ベントタイマとポインタのリストへの連続したアクセスのために et_find(), et_init() と et_free() の周囲の mutex(9) ロックを管理するために使用される べきです。et_start() と et_stop() 呼び出しは、同時にタイマのハードウェア をアクセスすることを回避するために消費者の内部の方法で順番になされるべき です。 関連項目 eventtimers(4) 作者 Alexander Motin <mav@FreeBSD.org> FreeBSD 11.4 April 2, 2014 FreeBSD 11.4