cyber205の日記: PCのパネル時計がUTCになってしまった 6
日記 by
cyber205
凝った構成のPCを買ったのがそもそも間違いだったのかもしれませんが、
前面パネルにディジタルクロックの付いたPCにUbuntu入れてみたところ、
パネルの時計が9時間遅れで表示されるようになってしまいました。
原因は言わずもがな。
PCUNIXの多くは普通にUNIXがやっているように、
RTCをUTC(協定世界時:ほぼGMTで、グリニッジ標準時だっけ?)
に合わせるため、Windowsのようにローカルな時間では時を刻まない。
ちょっと設定を追加すれば、Windowsとの共存も考えているPCUNIXでは
Localtimeで動かせるのでしょうが、クリーンインストールでは
配慮する必要を認めなかったのでしょう、インストーラにおまかせしてたし。
しかし、このパネル時計、本当に内蔵RTCとシンクロしてたのだなぁ。
時計合わせのボタンがどこにもないから変だとは思ってたけど。
おしゃれ (スコア:1)
内蔵時計を表示してくれるとはおしゃれですね! ntpで時間合わせられるし。
これは、イギリス(というかGMT+0国)に引っ越すしかないですね!(笑)
あれ、でも、Windows機でも、夏時間になったらRTCも夏時間になるのかな??
Re:おしゃれ (スコア:2)
RTCの内部レジスタに関して書かれたnika's wiki [osask.tk]を参照すると、
もともとRTCの側にはサマータイム時刻に合わせたデータ補正をする機能があるとか。
意図的にイネーブルにしない限りは動きませんが、うっかりONになると混乱するでしょうねぇ。
なんでも、ダラスセミコンのRTCにはサマータイムの始まりと終わりを設定できない重大なバグがあるとか [linux.or.jp]
>Dallas Semiconductor の RTC チップ
>(これは、Motorola チップの代わりに IBM AT 機やその互換機に搭載されるようになったチップです) は、
>実際にチップ自体に UTC を DST に変換する能力が備わっていますが、
>変更すべき日付があらかじめハード的に固定されていてそれをソフト的に変えることができないので、
>この機能は使われていません。
>最新のバージョン更新が 2000年4月の第一日曜日と 10月の最終日曜日に実施されましたが、
>それ以前のバージョンのチップでは、それぞれ異なった日時が使われています。
> (また、これは(合衆国と)違う日付を使っている国では、明らかに機能しません。)
>さらに、RTC は (単体のチップではなく) マザーボードのチップセットの中に組み込まれている場合も
>多くなっているので、それらすべてがこの能力を持っているかどうか著者には分かりません。
気になったので、オリジナルのMC146818がどうなってるか [ic-on-line.cn]チェックしてみたんですが、
どうもサマータイムへの変換を自動的に行う機能は、MC146818/Dに最初から搭載されているようです。
16Page目にある制御レジスタBの記述なんですが、
> DSE - The daylight savings enable (DSE) bit is a read/write bit which allows the
> program to enable two special updates (when DSE is a "1").
> On the last Sunday in April the time increments from 1:59:59 AM to 3:00:00 AM.
> On the last Sunday in October when the time first reaches 1:59:59 AM it changes to 1:00:00 AM.
> These special updates do not occur when the DSE bit is a "0".
> DSE is not changed by any internal operations or reset.
「夏時間」の呼称、イギリスではサマータイムだけど、アメリカではデイライトセービングスと言うのですね。
四月の最後の日曜日、深夜のAM 1:59:59から一時間吹っ飛んでAM 3:00:00になる制御でサマータイムが始まり、
十月の最後の日曜日、深夜のAM 1:59:59になるとまるまる一時間戻ってAM 1:00:00となり、元の時間に戻るという
移行日付固定の制御を行っています。(細かい設定は不可能)
これじゃ法律が変わったら対応できそうもないですね。
後継となったダラスセミコンダクタのチップでは、制御方式が何度か改訂されていると
言いたいように見えますが、実のところ訳が間違ってるような気もします。どうなんだろうな。
Re:おしゃれ (スコア:1)
夏時間の期間は毎年のように法改正で変わるのに、なんでハードワイヤード実装しちゃったんでしょうかね。
クロックはUTCにすべきだと思っていたのですが、こういう製品が出てくるとちょっと考え物ですね。あ、時計の方で時差を考えてくれればいいのか。
Re:おしゃれ (スコア:2)
IBM-PC/AT(1984年)の設計で採用されたモトローラMC146818 [funkygoods.com]ですから、
もう、なんというか、設計された時期が古いとしか言いようがないですね。
設定に使うメモリを用意して、対応ロジックを組むには、チップ面積がもったいなかったに違いない。
RTCと共に、BIOSの設定を覚えておくメモリ(バッテリバックアップされたCMOSのSRAM)を備えていたために、
以後BIOSセットアップや設定クリアのことをCMOSセットアップとかCMOSクリアと言うようになった、
そういう呼び名の理由となったチップなんで、PC-ATの中では結構重要なパーツだったりします。
当時、RTCで8ビットの広いバスを持った製品はめずらしかったそうですよ。 [rim.or.jp]
時刻なんて1桁4ビットあればアクセスできますからね。だけど、MC146818は結構RTCとしては
電流喰いだったので、そういう意味では既存の製品より数倍(消費電力面で)不利だったと書いてあります。
ちなみに、後継となるチップを作った、ダラスセミコンダクタって結構面白い半導体メーカーでした。
なんというか、一癖も二癖もある変わったアイデアの半導体を作ります。1-wireでシリアル通信 [wikipedia.org]とか。
データシートもひじょうに正直に書かれているということに定評があったりしました。
普通、半導体メーカーは自分とこの製品の弱点を書きたがらないものですが、
ダラスセミコンダクタのチップに関しては、そういうところもはっきり書いてあるのだそうで。
今はもうマキシムに買収されてしまいましたけどね。
このダラスセミコンダクタの後継チップ(DS12887A) [maxim-ic.com]も、
チップのパッケージの中に電池を内蔵しているという変わった仕組みで、(ハイブリッドIC)
電池がなくなったら簡単にソケットから抜いて、新しいモジュールに交換できるという設計になっていました。
RTCモジュラーパッケージって感じかな。 [u-tokyo.ac.jp]もしかすると、サマータイム時期が変わったらチップごと
ソケットから抜いて交換しちゃえばいいんじゃね?って思想だったのかも。
このチップを載せたマザー、まだ自分は持ってますよ。
MMX-Pentium200MHz相当のオーバードライブプロセッサを載せたSoket5でAT仕様の
V30ってマザーに載ってます。(もう使ってないのだけど)
# 当然ながらマザーボード上にCR2032(リチウム電池)を載せる場所は無いです。
# 今ではチップセットのサウスブリッジにRTCは内蔵されるので、 [mcn.oops.jp]
# このモジュールの採用例はほとんどなくなりました。
たいむぞーん (スコア:0)
Windows でも、コンパネでタイムゾーンを変更するとそれにあわせて表示時刻が切り替わりますが、RTC は書き換えていないと思いますよ。
なので UTC で設定してるのだと思いました。
Re:たいむぞーん (スコア:2)
タイムゾーン変更の時にRTCを書き換えていないという判断は間違ってないかもしれませんが、
それでも結論はちょっと違うと思います。例えば、bootCampを使ってマッキントッシュを
MacOSとWindowsの両方で相互使用して使ってみれば、内蔵RTCを解釈する方法の違いですぐ不具合が発生します。
最近のMacOSはベースがUNIX系なので、内蔵時計の解釈はUTCだと考えるUNIXスタイルなんですね。
詳しくはこちらをどうぞ [inforati.jp]
というわけで、少なくともWindows Vistaまではデフォルトでローカルタイムにて
RTCを動かしていると解釈されるようです。
マイクロソフトがRTCに現地時間を使うのは、MS-DOSの時代からの伝統ではないかと。
普通、BIOSから時刻設定する場合も使用者は現地時間で合わせると思いますし、
当時はその判断のほうが妥当だったのでしょう。なにしろRTCすら米国専用の
サマータイム切り替え日付で切り替わるぐらいですから。
でも、先のリンクではRTCをUTCで動かしていると宣言するレジストリキーを設定すれば、
その設定が解釈されて使えるとありますので、現在はUTCで動かす運用も可能らしいです。
RTCの本当の値はBIOSで見られるのが普通なので、そちらでチェックしてみてはいかがでしょうか。
UTCに設定されているなら、BIOSの表示は現地時間より9時間遅れているはずです。(日本の場合)