[Armadillo:04579] Re: システムクロックの取得について
SAITOH Akinori
email@hidden
2009年 9月 5日 (土) 12:01:57 JST
齊藤です
指摘しっぱなしもなんですから,基本的なところだけ.
・UNIX/POSIX系OSでは 1970/1/1 00:00:00UTC(GMT)を
起点とする秒数カウント値を,「時刻値」としています.
あくまでも起点との差分を秒単位で持っているだけで,
この時点ではタイムゾーンとは無関係です.
これはカーネルが持っている時刻値とか,ファイルのタイムスタンプ
に用いられます.
カーネルから取得する時刻値とか,ファイルの時刻値(strtuct stat)は
全部これです.
カーネルそのものがJSTで動くような改造は聞いたことがありません.
じっさいには閏秒なんてのがあるのですがこれの説明は省略.
・コンピュータのハードウェアクロック(カレンダーチップ)は,
UTCを入れておくのが本来の方式ですが,
JSTが入っているようなコンピュータに対応も出来ます (カーネル
オプション).
windowsとのデュアルブートのPCだとJSTをカレンダーチップに入れる
しかないので,linux側でそれに合わせるようにしてます.
これはOSの起動時にカレンダーチップの
読み出し値を,システム時刻値に変換する際の動作に影響を与えます.
・タイムゾーンは 時刻値を 日時分秒という数値(strcut tmなど)
とか文字列(ctimeなど)に変換する際に関係してくるものです.
「どのタイムゾーンの表現に変換するか」ってこと.
今ではどのタイムゾーンのどの言語形式に(ロケール)変換するか,
というように複雑化しています.
ctimeはdateコマンドの中身その物ですので,
env TZ=ほげほげ date
とかいろいろやってタイムゾーンの影響を調べて
勉強することが出来ます.
・タイムゾーンは,各プロセスごとに持ちます(持てます).
指定がなければシステムデフォルト(/etc/timezoneとか)に
従いますが..
(昔のSystemVとかでは,環境変数TZなんてものはなくて,
タイムゾーンはただ1つだけ,カーネルをコンパイルするとき
に組み込んでました・・・・たしかそうだったはず)
・多くのUNIX/POSIX系OSでは,/etc/rcから
起動するデーモン類も,ログインシェルも同じ
タイムゾーンがデフォルトで与えられるようにしています
(そう僕は認識しています).
なぜかアルマジロは,rcで起動されるデーモン類は
UTCで動いていて,ログインシェルはJSTで動くという
設定になっています.
とりあえず/etc/rcの先頭に
TZ=JS-=9
export TZ
と書いてみて特に害がみられなければそれでOK,てな
ことにしてもいいかなぁ.
--
齊藤明紀 email@hidden
armadillo メーリングリストの案内