リアルタイムクロック
出典: フリー百科事典『ウィキペディア(Wikipedia)』
リアルタイムクロック(real-time clock、RTCと略記)は、コンピュータの時計であり、コンピュータの電源が切られていても現在時刻を刻み続ける機能のことを指す。また、その機能を持つ集積回路のことを指す場合もある。
目次 |
[編集] 概要
多くのコンピュータシステムで使われており、現在のパーソナルコンピュータや情報家電にはほぼ必ず組み込まれている。 組み込みシステムの分野では、リアルタイムクロックのことをカレンダークロックと呼ぶこともある。また、希であるが同分野でRTCといった場合、リアルタイム・コンピューティングを指すこともある。
リアルタイムクロックは、システム本体の電源装置とは直接はつながっていない特別なバッテリー(ボタン型電池や、電気二重層コンデンサなど)で駆動される(バッテリーバックアップ)。 つまり、リアルタイムクロック以外の機能はコンピュータの電源がオフの時は動作していないが、リアルタイムクロックの時計機能だけは、常にバッテリーで動作している。 リアルタイムクロックはコンピュータのCPUクロックとは別系統のクロック(通常32768Hzなど、分周器によって1Hzを作り易いクロック)で動作している。
リアルタイムクロックは「年」、「月」、「日」、「時」、「分」、「秒」をそれぞれデータとして提供する。つまり、一般にコンピュータ内で秒単位の時刻(C言語で用意されている標準変数time_t型など)を保持しているのとは全く別の方式である。これは同じチップをデジタル時計などにも利用しているためである。たとえば、あるリアルタイムクロックはそれぞれの値を2桁のBCDで保持している。このため使う側が20世紀なのか21世紀なのか判断しなければならない(これも2000年問題の一種である)。たとえば1980年を基準とすると、80以上99以下なら1900年代、00以上79以下ならば2000年代といった処理を行うが、将来的に変更される可能性がある。 また、100年以上使われることは考慮していない。
[編集] コンピュータでの実際の利用
一般にリアルタイムクロックへの書き込み(つまり時刻あわせ)はコンピュータから見て非常に時間がかかる。 そのためネットワーク上で時刻同期するような場合でも、頻繁にリアルタイムクロックへ書き込まないような考慮をオペレーティングシステムが行っている。
現在のOSは起動時にリアルタイムクロックを読み取って、CPUの高精度タイマーの精度を校正し、以後リアルタイムクロックから時刻を読み出すのではなく、高精度タイマーのカウンタ値によって時刻を保持している。これはRTCの時刻精度がおよそミリ秒が限度なのに対して、高精度タイマーはナノ秒からピコ秒の精度をもっており、より正確な時刻管理が出来る為である。特にこのような精密な時刻管理はNTPの様に「時計を正確な時刻に徐々に進める・遅らせる」といった操作には必要不可欠である(いきなり時計を戻すと、動作がおかしくなってしまうプログラムは多い。特にデータベースでジャーナルのタイムスタンプが乱れる事は、致命的な障害をもたらす)。
Windows NT系のOSではリアルタイムクロックにローカルタイムを書き込む。それに対して、UNIX系OSでは一般的にUTCで書き込む。その為、両者の間をデュアルブートで往復すると時計がタイムゾーンに応じて狂ってしまう。この問題に対して、Windows NT系ではUTCを使うという対策がある。しかし、時刻が直感的に判り難く、またローカルタイムの概念を持たないアプリケーションではタイムスタンプがUTCをローカルタイムとみなして保存するので都合が悪くなる。UNIX系OSの一部では、RCのシャットダウンシーケンスの一部でUTCをローカルタイムに直してリアルタイムクロックに書き込み、Windowsを起動しても時計が狂わない様にした物もある(あまり良いアプローチではないので評判は芳しくない)。
いずれの場合も、時刻源にリアルタイムクロックを使わず、NTPなど外部の時刻源に同期する様に設定するとほぼ問題無く時刻を参照できる(ただしMac OS X 10.4.xは時計が戻されるとFinderの動作がおかしくなるバグがある。AppleはMac OS X 10.5 Leopardへのアップグレードを推奨している)。