下記パターンにおいて、どのようにUTCにあわせるのがベストなのか知りたいです。
OSはハードウェアのどの部分を参照して時間を知るのか/ハードウェアはどのように時間を管理しているのか など具体的に教えて下さい。
* A) マシン:ThinkPad X61, OS:WindowsXP
* B) マシン:PowerEdge T105, OS:CentOS5.3
* C) マシン:VirtualBox3.0.6上のVM(ホストは「A)」), OS:CentOS5.3
* D) マシン:MacBookPro, OS:Mac OS X Snow Leopard
一般的なPCであれば、通常マザーボード上に計時用のRTC(Real Time Clock)デバイスが実装されていて、AC電源が接続されていない間もマザーボード上に付けられたバックアップ用の電池で時刻が保持されています。
また、いわゆる「PC」(DOS/V互換機)についてはOADG(PCオープン・アーキテクチャー推進協議会)によってハードウェア仕様が規定されており、RTCの場合はI/Oポート70h/71hに接続されることになっています。(OADGテクニカル・リファレンス(ハードウェア))
制御方法としては、ポート70hにRTCレジスタ番号をライトした後、ポート71hからRTCレジスタの値をリード/ライトするという単純なものです。
※実際にはもうちょっと細かい制御が必要ですが、詳細が知りたい場合は上記OADGテクニカル・リファレンスの3-151ページあたりに書かれていますので参照してください。
なおWindowsであれば、I/Oポートはデバイスマネージャで見ることができ(システムCMOS/リアルタイムクロックなどの名称で表示されます)、「リソース」タブで実際のI/Oポートを確認できます。(I/Oの範囲:0070~0077などと表示されます)
ただ、OADGは汎用の制御仕様を規定しているだけで、実際のReal Time Clockの精度性能については各デバイスの実装に依存します。
例えばThinkPad X61の場合は、Intel ICH8チップセットを使っていますが、RTCはICH8に内蔵されています。(詳細はIntel I/O Controller Hub 8 (ICH8) Family Datasheetを参照)
この場合、Real Time Clockの性能はICH8の性能に依存します。
他のチップセットではまた性能が違ってくるでしょう。
ハードウェアに時計が実装されています。(クォーツかな?biosで設定するでしょ?)
で、XPとかはtime.windows.comとかのネットで実時間を自動的に合わせたりしますが、、、?
(日付と時刻の調整)
linuxはしらん。マックも、、
インターネット以前は、時計が狂うのは当たり前でしたよ。
有難うございます。
A) マシン:ThinkPad X61, OS:WindowsXP
のパターンは、
定期的にtime.windows.comに問い合わせて、RTCの時間を更新することによりUTCにあわせている
という認識で大丈夫でしょうか?
* RTCはクォーツ式でしょうか?他の形式もあるのでしょうか?またマシン毎にRTCの性能も違うのでしょうか?RTCの仕様(OS・BIOSとのインタフェースなど)についての情報もあったら知りたいです
* time.windows.comはどのような仕様・規格で実装されたサーバなのでしょうか?
ネットワークを利用した時刻の同期には、NTP(Network Time Protocol)という仕様があります。たぶん殆どのシステムがこれで時刻を同期しているはずです。またNTPサーバーも各所にあります。
http://ja.wikipedia.org/wiki/Network_Time_Protocol
ハードウェアのことはよくわかりませんが、下記のサイトには、BIOSの時刻管理は水晶振動子を使っていると書いてありますね。
http://home.impress.co.jp/magazine/dosvpr/q-a/0310/qa0310_2.htm
time.windows.com は NTPサーバですね。 NTPという、時計の時刻合わせをする為の通信規格にしたがったサーバです。
http://ja.wikipedia.org/wiki/Network_Time_Protocol
http://www.atmarkit.co.jp/fwin2k/win2ktips/050nettime/nettime2.h...
とりあえずパソコンの時刻合わせをされたい、ということであれば NTPのクライアントをインストールする方法が、一番簡単で、一番確実です。
RTCは、パソコンに限らず、カーナビとかいろいろな製品で利用されている、時刻モジュールの総称です。
通常のPC用RTCモジュールだと、その仕組みは水晶発振子を使う方式です。
ただし、
http://ja.wikipedia.org/wiki/%E6%B0%B4%E6%99%B6%E6%8C%AF%E5%8B%9...
にあるように水晶発振では精度があまり出ません(普通のPCだと、月あたり五秒ぐらいずれます)
そこでNTPサーバのような正確な時刻が必要なサーバでは、原子時計をRTCとして使っているそうです。たとえばこんなの。
http://www.aist.go.jp/aist_j/press_release/pr2003/pr20030609/pr2...
どの構成もハードウェアクロック(RTC)と、システムクロックという2つの時計を使用しています。
RTCを読み出すのは、システムクロックに比べて時間がかかるので、通常OS起動時と終了時のみで、OS起動中はシステムクロックを使用します。
PCがネットワークに接続していれば、NTPを使用してシステムクロックを補正します。
RTCはローカル時刻(日本時間など)を保持します。OS起動時にローカル時刻をUTCに変換して、システムクロックとします。
RTCは、UTC又はローカル時刻を保持します(どちらでも対応できる)。ただし、Windowsとの併用を考慮して、RTCはローカル時刻に設定してある可能性が高いです。コマンド「hwclock」でRTCを表示できます。
OS起動時に、RTCをUTCに変換して、システムクロックとします。
こちらもWindowsでの起動を意識して、RTCはローカル時刻が設定されているはずです。コマンド「hwclock」でRTCを表示できます。
Macの場合は、RTCにUTCが設定されているようです。
有難うございます。ここまででのイルカ賞です。
一般的なPCであれば、通常マザーボード上に計時用のRTC(Real Time Clock)デバイスが実装されていて、AC電源が接続されていない間もマザーボード上に付けられたバックアップ用の電池で時刻が保持されています。
また、いわゆる「PC」(DOS/V互換機)についてはOADG(PCオープン・アーキテクチャー推進協議会)によってハードウェア仕様が規定されており、RTCの場合はI/Oポート70h/71hに接続されることになっています。(OADGテクニカル・リファレンス(ハードウェア))
制御方法としては、ポート70hにRTCレジスタ番号をライトした後、ポート71hからRTCレジスタの値をリード/ライトするという単純なものです。
※実際にはもうちょっと細かい制御が必要ですが、詳細が知りたい場合は上記OADGテクニカル・リファレンスの3-151ページあたりに書かれていますので参照してください。
なおWindowsであれば、I/Oポートはデバイスマネージャで見ることができ(システムCMOS/リアルタイムクロックなどの名称で表示されます)、「リソース」タブで実際のI/Oポートを確認できます。(I/Oの範囲:0070~0077などと表示されます)
ただ、OADGは汎用の制御仕様を規定しているだけで、実際のReal Time Clockの精度性能については各デバイスの実装に依存します。
例えばThinkPad X61の場合は、Intel ICH8チップセットを使っていますが、RTCはICH8に内蔵されています。(詳細はIntel I/O Controller Hub 8 (ICH8) Family Datasheetを参照)
この場合、Real Time Clockの性能はICH8の性能に依存します。
他のチップセットではまた性能が違ってくるでしょう。
有難うございます。ここまででのイルカ賞です。
有難うございます。ここまででのイルカ賞です。