[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 メーリングリストの案内