Provided by: manpages-ja_0.5.0.0.20180315+dfsg-1_all
名前
time - 時間とタイマーの概要
説明
実時間 (real time) とプロセス時間 実時間は、特定の時点から計った時間と定義される。 特定の時点とは、過去の標準的な時点 (下記 の紀元 (Epoch) とカレンダ時刻の説明を参照) や、 プロセスの一生における何らかの時点 (例え ば、開始時) である (経過時間)。 プロセス時間は、プロセスによって使われた総 CPU 時間と定義される。 多くの場合、ユーザー時間 とシステム時間に分けられる。 ユーザー CPU 時間は、コードをユーザーモードで実行するのに使っ た時間である。 システム CPU 時間は、そのプロセスのために カーネルがシステムモードで実行す るのに使った時間である (例えば、システムコールを実行するのに使った時間)。 time(1) コマンド はプログラムの実行に費された総 CPU 時間を計るのに使用される。 プログラムは、自身が費した総 CPU 時間を times(2), getrusage(2), clock(3) を使って計ることができる。 ハードウェアクロック 多くのコンピュータが (電池で駆動される) ハードウェアクロックを持っている。 カーネルは起動 時にソフトウェアクロックを初期化するために ハードウェアクロックを読み込む。 より詳しい情報 は、 rtc(4) と hwclock(8) を参照すること。 ソフトウェアクロック, HZ, Jiffy タイムアウトを設定したり (例えば select(2), sigtimedwait(2))、 CPU 時間を計測したり (例え ば getrusage(2))する様々なシステムコールの精度は ソフトウェアクロック の分解能 (resolution) に制限される。 ソフトウェアクロックとは、カーネルが管理する jiffy 単位で時間 を計測するクロックのことである。 jiffy の大きさはカーネル定数 HZ の値で決定される。 HZ の値はカーネルのバージョンとハードウェアプラットフォームで異なる。 i386 の場合は以下の 通りである: 2.4.x とそれより前のカーネルでは、HZ は 100 であったので、 jiffy の値は 0.01 秒になっていた。 2.6.0 以降では、HZ は 1000 に増やされたので、jiffy の値は 0.001 秒であ る。 カーネル 2.6.13 以降では、HZ の値はカーネル設定パラメーターになり、 100, 250 (デフォ ルト), 1000 という値にできる。 それぞれ jiffy の値は 0.01, 0.004, 0.001 秒になる。 カーネ ル 2.6.20 以降では、300 も利用できるようになっている。 300 は一般的な映像フレームレートの 公倍数である (PAL, 25HZ; NTSC, 30HZ)。 times(2) システムコールは特殊なケースであり、 このシステムコールはカーネル定数 USER_HZ で 定義された粒度で時間を報告する。 ユーザー空間のアプリケーションは sysconf(_SC_CLK_TCK) を 使ってこの定数の値を知ることができる。 高精度タイマー Linux 2.6.21 より前では、タイマーやスリープ関連のシステムコールの精度も jiffy のサイズによ り制限されていた。 Linux 2.6.21 以降では、Linux は高精度タイマー (high-resolution timers; HRTs) をサポートし ており、 CONFIG_HIGH_RES_TIMERS で制御できる。 高精度タイマーをサポートしているシステムで は、タイマーとスリープ関連のシステムコール の精度はもはや jiffy に制約されることはなく、 ハードウェアが許す限りの精度となる (最近のハードウェアではマイクロ秒単位の精度が一般的であ る)。 高精度タイマーがサポートされているかは、 clock_getres(2) を呼び出して分解能を確認す るか、 /proc/timer_list 内の "resolution" エントリーを参照するかで判断できる。 高精度タイマーはすべてのハードウェアアーキテクチャーでサポートされている 訳ではない (対応 しているアーキテクチャーは x86, arm, powerpc である)。 紀元 UNIX システムは時刻を 紀元 (1970-01-01 00:00:00 +0000 (UTC)) からの秒数で表現する。 プログラムは カレンダ時刻 を gettimeofday(2) を使って計ることができる。 この関数は紀元か らの経過時間を (秒とマイクロ秒で) 返す。 time(2) は同様の情報を提供するが、最も近い秒の精 度しかない。 システム時刻は settimeofday(2) で変更できる。 要素別の時刻 ライブラリ関数の中には tm 型の構造体を使うものがある。 この構造体は要素別の時刻を表し、 時 刻の値を別々の要素 (年・月・日・時・分・秒など) に分けて格納する。 この構造体は ctime(3) に記述されており、カレンダ時刻を要素別の時刻に変換する 関数についても記述されている。 要素 別の時刻を表示可能な文字列に変換する関数については、 ctime(3), strftime(3), strptime(3) に記述されている。 タイマーのスリープと設定 様々なシステムコールと関数により、指定された一定の時間、 プログラムはスリープ (実行を停止) することが可能である。 nanosleep(2), clock_nanosleep(2), sleep(3) を参照すること。 様々なシステムコールにより、プロセスは将来のある時点で 有効期間が終了するタイマーを設定で きる。 またオプションとして繰り返し間隔が指定できるものもある。 alarm(2), getitimer(2), timerfd_create(2), timer_create(2) を参照すること。 timer slack Linux 2.6.28 以降では、スレッドの "timer slack" 値を制御することができる。 "timer slack" は、 停止中のシステムコールがタイムアウト以外で wake-up される (起こされる) 際に、 カーネ ルに許容される遅延時間である。 この遅延を認めることで、 カーネルは wake-up イベントをまと めて行うことができ、 その結果、 システム全体の wake-up 数を減らし、 電力を節約することがで きる。 詳細は prctl(2) の PR_SET_TIMERSLACK の説明を参照のこと。
関連項目
date(1), time(1), adjtimex(2), alarm(2), clock_gettime(2), clock_nanosleep(2), getitimer(2), getrlimit(2), getrusage(2), gettimeofday(2), nanosleep(2), stat(2), time(2), timer_create(2), timerfd_create(2), times(2), utime(2), adjtime(3), clock(3), clock_getcpuclockid(3), ctime(3), pthread_getcpuclockid(3), sleep(3), strftime(3), strptime(3), timeradd(3), usleep(3), rtc(4), hwclock(8)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。