EN JA
TIMECOUNTERS(4)
TIMECOUNTERS(4) FreeBSD Kernel Interfaces Manual TIMECOUNTERS(4)

名称

timecountersカーネルタイムカウンタサブシステム

書式

カーネルは、次のような、いくつかのタイプの時間に関連したデバイスを使用します: リアルタイムクロック、時間カウンタとイベントタイマです。リアルタイムクロックは、主にシステムがダウンするとき、実際の世界時間を追跡することに対して責任があります。時間カウンタは、システムが実行しているとき、効果を追跡することに対して責任があります。イベントタイマは、異なる時間に基づいたイベントを実行するために、指定された時間で、または周期的に割り込みを生成するのに対して責任があります。このページは、秒 (2 番目?) に関してです。訳注: 意味不明。

解説

時間カウンタは、カーネルの時間追跡の最低のレベルです。それらは、既知の幅と更新頻度でタイムスタンプを単調に増加させることを提供します。それらは、プロセススケジューラのような非常に制限のある性能が重要な場所でのみ使用される生 (raw) の形式で、オーバフロー、ドリフト (drift)、その他がおこるかもしれません。

より多く利用可能な時間は、選択される時間のカウンタから読み込まれ、 hardclock() 呼び出しで tc_windup() によって定期的に更新される、いくつかのオフセットと組み合わせる値をスケーリング (scaling) することによって作成されます。

異なるプラットフォームは、異なる種類のタイマハードウェアを提供します。時間カウンタサブシステムの目的は、そのハードウェアにアクセスする統一された方法を提供することです。

時間カウンタを実装している各ドライバは、サブシステムでそれらを登録します。 kern.timecounter を通して、次のように、現在の時間カウンタのリストを見ることができます:

kern.timecounter.choice: TSC-low(-100) HPET(950) i8254(0) ACPI-fast(900) dummy(-1000000) 
kern.timecounter.tc.ACPI-fast.mask: 16777215 
kern.timecounter.tc.ACPI-fast.counter: 13467909 
kern.timecounter.tc.ACPI-fast.frequency: 3579545 
kern.timecounter.tc.ACPI-fast.quality: 900 
kern.timecounter.tc.i8254.mask: 65535 
kern.timecounter.tc.i8254.counter: 62692 
kern.timecounter.tc.i8254.frequency: 1193182 
kern.timecounter.tc.i8254.quality: 0 
kern.timecounter.tc.HPET.mask: 4294967295 
kern.timecounter.tc.HPET.counter: 3013495652 
kern.timecounter.tc.HPET.frequency: 14318180 
kern.timecounter.tc.HPET.quality: 950 
kern.timecounter.tc.TSC-low.mask: 4294967295 
kern.timecounter.tc.TSC-low.counter: 4067509463 
kern.timecounter.tc.TSC-low.frequency: 11458556 
kern.timecounter.tc.TSC-low.quality: -100

ここで:

kern.timecounter.tc. X .mask
は、有効なカウンタのビットを定義するビットマスクです。
kern.timecounter.tc. X .counter
は、現在のカウンタ値です。
kern.timecounter.tc. X .frequency
は、カウンタ更新頻度です。
kern.timecounter.tc. X .quality
は、他と比較して、この時間カウンタがどれくらいよいか定義する、整数値です。負の値は、この時間カウンタが壊れていることを意味し、使用されるべきではありません。

カーネルの時間管理コードは、そのリストから時間カウンタの 1 つを選びます。 kern.timecounter.hardware 調整変数/sysctl を通して現在の選択を読み込こんで、影響することができます。

December 20, 2011 FreeBSD