TIME(9)

名称
boottime, mono_time, runtime, time - システム時刻変数

書式
extern struct timeval boottime;
extern volatile struct timeval mono_time;
extern struct timeval runtime;
extern struct timeval time;

解説
time 変数はシステムの “柱時刻” クロックです。 これはブート時に inittodr(9) によって設定され、 settimeofday(2) システムコールと周期的なクロック割り込みによって更新されます。

boottime 変数はシステムのブート時刻を保持します。 これはシステムブート時に time から設定され、システム時刻が settimeofday(2) を使用して調整されたときに更新されます。

runtime 変数はシステムが現在のプロセスにスイッチした時刻を保持します。 これは個々のコンテキストスイッチの後に設定され、システム時刻が settimeofday(2) を使用して調整されたときに更新されます。 runtime はシステムのアカウンティングのために使用されているので、 time からコピーされるのではなく、高分解能な microtime(9) 関数を使用して設定されます。

mono_time 変数は単調に増加するシステムクロックです。 これはブート時に time から設定され、周期的なタイマ割り込みによって更新されます。 ((settimeofday) 2 によって更新されません。)

これらの変数の全ては、1970 年 1 月 1 日の深夜 (0 時) から経過した時間を、 秒およびマイクロ秒で表現しています。

time または mono_time の読込みまたは書込み時には、クロック割り込みはブロックされるべきです。 何故ならば、これらの変数は hardclock() によって更新されるからです。 gettime(9) 関数は不可分な方法で time 変数を読み取るために使用することができます。 mono_time にアクセスするための同等の関数はありません。 boottime および runtime 変数は特別な警戒なしに読み書きすることができます。

gettime(9) および microtime(9) によって返される時刻値は更新方法が違いますので、この 2 つの ルーチンの結果を比較すると、 時間が逆戻りするような結果となるかもしれないことに注意してください。 この問題は、一方の関数またはもう一方の関数を コンテキスト中で首尾一貫して使用することにより、避けることができます。

関連項目
settimeofday(2), gettime(9), inittodr(9), microtime(9)

バグ
マルチプロセッサシステムにおいて単一の runtime 変数を持つという考えは明らかに適切ではありません。