名 前
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/ に 書 か れ て い る 。