リアルタイムクロック

リアルタイムクロック（real-time clock、RTCと略記RTCといった場合、リアルタイム・コンピューティングを指すこともある。）は、コンピュータなどが内蔵する時計や、その機能が実装されている集積回路 (IC) のことを指す。リアルタイムクロックはシステムの電源が切られていてもバッテリバックアップなどにより「時刻」を刻み続けることが特徴である。これに対し、オペレーティングシステムが持つ時刻機能(以下システム時刻)はタイマーにより「時間」を測定しそれを積算するもので、分解能はリアルタイムクロックに勝るが、シャットダウンすると時刻情報が失われ、次にシステムを起動したときにRTCを参照して設定する必要がある。

 概要 
RTC機能を持つICは多くのコンピュータシステムで使われており、現在のパーソナルコンピュータや情報家電にはほぼ必ず組み込まれている。オペレーティングシステムによっては、システム時刻に対してハードウェアクロックと呼ぶことがある。また、組み込みシステムの分野では、RTCのことをカレンダークロックと呼ぶこともある。

RTCは、システム本体の電源から独立したバッテリー（ボタン型電池や、電気二重層コンデンサなど）から電力を得られる様にして、システムがシャットダウンしている時でも計時機能を維持する設計とすることが多い（バッテリーバックアップ）。ただし、システムが無停電電源装置などによって停電保障されている場合は、システム本体と同じ電源でRTCを駆動するような設計が行われることもある。また、一次バッテリーをバックアップに用いる場合、消耗を押さえるために、商用電源が断たれた場合のみバッテリー駆動に切り替える設計も行われる。

RTCは、コンピュータのCPUや他の周辺機器（CPUクロック、システムクロック等）からは独立に搭載したクロックジェネレータを用いて動作させるのが一般的である。クロックジェネレータには水晶振動子を用いた発振回路を使用する。周波数は32768Hz=2^15Hzなど、分周器によって1Hzを作り易く、主に時計用などとして生産・流通しているものを用いる。クロックジェネレータの回路は完全にRTCに内蔵されている製品だけでなく、水晶振動子など一部の部品について外付けとするものや回路側で選択できるものもあるため、製品毎に確認が必要となる。

典型的なRTCは「年」、「月」、「日」、「時」、「分」、「秒」をそれぞれBCDで保持し、1秒ごとに日時を更新し、機種によっては「曜日」も提供する。PC用のRTCでは8ビット幅のデータバスを持ち、これをCPUのデータバスに接続してIOポートとして扱うが、SPIやI2Cなどのシリアルインターフェースで接続するものもある。
　初期のRTCの一つであるμPD1990のように「年」情報を持っていない RTC を利用するにあたり、例えば PC-9801の場合、メモリ・スイッチ(A3FFE番地)に「年」情報を BCD で保持していた(メモリ・スイッチは二週間程度バッテリバックアップされた)。また、μPD1990の場合「月」は BCD でなくバイナリで保持しており、典型的なRTCにはない「曜日」をバイナリで保持していた。
　西暦年の4桁のうち、1の位と10の位の、下位2桁のみをBCDで保持するものもあった改良型のμPD4990では4桁に拡張されている。そのような場合、OS側で上位2桁を補う必要があり、2000年問題に通じる問題を持つ。システムが開発された時期に応じて、MS-DOS関係では、1980年を基準として、80以上99以下なら1900年代、00以上79以下ならば2000年代として扱う処理となっていたりするものが多い。

RTCの精度はクロックジェネレータの精度で概ね決まる。一般的にはシンプルな水晶発振回路を用いるので水晶振動子と同程度の精度となるが、TCXOなどを採用することにより精度を高めることができる。

付加機能として、指定した時刻が到来するとコンピュータへ通知するアラーム機能や、日付を記憶するためのメモリに余裕を持たせてコンピュータからNVRAMとして利用できる製品がしばしばある。特に後者の機能はMACアドレスなどコンピュータを識別するデータを記憶することがある。

 コンピュータでの実際の利用 
一般にRTCへの書き込み（つまり時刻あわせ）はコンピュータから見て非常に時間がかかる。そのためネットワーク上で時刻同期するような場合でも、頻繁にRTCへ書き込まないような考慮をオペレーティングシステムが行っている。

現在のOSは起動時にRTCを読み取って、別に用意された高精度（イベント）タイマーの日時と精度を校正し、以後RTCから時刻を読み出すのではなく、高精度タイマーのカウンタ値によって時刻を保持している。これはRTCの時刻精度がおよそミリ秒が限度なのに対して、高精度タイマーはナノ秒からピコ秒の精度をもっており、より正確な時刻管理が出来るためである。特にこのような精密な時刻管理はNTPの様に「時計を正確な時刻に徐々に進める・遅らせる」といった操作には必要不可欠であるいきなり時計を進めると本来ある時刻で起動されるはずのイベントがスキップされたり、いきなり時計を戻すと同じイベントが二回起動されることがある。またデータベースでジャーナルのタイムスタンプが乱れる事は致命的な障害をもたらす。。

 タイムゾーン 
PCなど多くの場合、RTCはタイムゾーンを扱う機能を持たず、読み出した日時がどのタイムゾーンの時刻であるかを直接知る術はない。OSはブート時にRTCを参照してシステム時刻を同期させるが、両者がそれぞれどのタイムゾーンであるかを把握しておかないと齟齬が生じる。OSのインストーラではRTCが保持している日時がUTCであるかローカルタイムであるか、またローカルタイムであるならどのタイムゾーン(例JST)であるか、をユーザーに質問する。このためユーザーはインストール前に何らかの方法でRTCの保持する時刻のタイムゾーンを調べなければならない。概ねBIOSのI/O コントローラー・ハブ(ICH)の設定にRTCの時刻が表示されるので、これでRTCがUTCかローカルタイムであるかを把握できる。或いはBIOSの時刻設定機能を用いて、予めRTCをUTCないしローカルタイムに合わせておいてからOSのインストーラを起動してもよい。インストーラで設定されたRTCのタイムゾーン情報はOS・システム時刻のタイムゾーン情報（Unix系OSではいわゆるtz database）とは別個に保持される。Unix系OSでは前者は/etc/adjtime、後者は/etc/localtimeという別々の設定ファイルに分けて記録されている。この後、OSブートの度にRTCを読み出しシステム時刻がこれと同期される。Unix系OSではその際/etc/adjtimeファイルを参照してRTCが何のタイムゾーンであるかを判断した上で同期するユーザーが/etc/adjtimeを操作したり、RTCのタイムゾーンが別のものであると強制的に認識させてシステム時刻を同期させることも可能。Linuxの場合は、詳しくはコマンドを参照。。逆にシャットダウン時はタイムゾーンを考慮しつつシステム時刻をRTCに書き込む。一方、Windows NT系OSでは既定値としてRTCはローカルタイムとして扱うUTCにも変更可能である。。このため両OSをマルチブートできるシステムにおいて、仮にUnix系OSでRTCのタイムゾーンをUTCと設定しておくと、両者の切替の際に齟齬が生じ、RTCの内容に信頼がおけなくなる。この問題に対して、Windows NT系ではUTCを使うという対策がある。しかし、時刻が直感的に判り難く、またローカルタイムの概念を持たないアプリケーションではタイムスタンプがUTCをローカルタイムとみなして保存するので都合が悪くなる。もしくはUnix系OS側のタイムゾーンをローカルタイムにすれば良い。

いずれの場合も、時刻源にRTCを使わず、NTPなど外部の時刻源に同期する様に設定するとほぼ問題無く時刻を参照できる（ただしMac OS X v10.4.xは時計が戻されるとFinderの動作がおかしくなるバグがある。AppleはMac OS X v10.5へのアップグレードを推奨している）。

 その他の利用 
 パチンコ機での利用 
パチンコ業界では、筐体にリアルタイムクロックを組み込み、時間に合わせて演出を作動させる「RTC機能」という物があり、2010年代の一時期にこの機能が流行していた。

この機能は、2007年にSANKYOが「CRフィーバー007」において初導入したもので、曜日や時刻によって違った演出が出せるようにしたものである（出玉に関する機能には一切影響しない）CRフィーバー007。

RTC機能が広く認知されるようになったきっかけとなった機種が2012年に発売された「CRぱちんこAKB48」（京楽産業.）で、1時間に1回すべての機体が一斉に「重力シンパシー公演」という特別演出を繰り出すというものである。当時AKB48は人気の絶頂期にあり、また機体発表から数週間は毎週新しいオリジナル楽曲が演出に登場するということもあって、同機はパチンコファンのみならずAKB48ファンにも高い注目を浴び、販売初年度の総販売数20万台以上、総売上げ約800億円という好成績を残した。この成功を受け、三洋物産は「CRスーパー海物語 IN 沖縄3」でシリーズ初となるRTC機能「スペシャル魚群タイム」を搭載、Sammyも「ぱちんこCR北斗の拳5 覇者」においてシリーズ初搭載など、業界各社がRTC機能を使用した機種を多く販売していた。

しかしこの機能は定着には至らず、2010年代の後半頃から徐々にRTC機能は採用されなくなり、一過性の物となった。

2020年以降に販売された機種にRTC機能の採用はほぼ無く、完全に廃れた状態である。

 コンピュータゲームでの利用 
一部のゲームハード、ゲームソフトにもリアルタイムクロックが組み込まれていることがあり、主にRPGで時間によって変わるイベントが発生したり、日替わりのイベントが発生したりする物があり、『天外魔境ZERO』などのハドソンのゲームソフトではPLGS（Personal Live Game System、パーソナル・ライブ・ゲーム・システム）と称される。かつてはゲームカートリッジの中にリアルタイムクロックを実現するチップと、それを駆動するバッテリーによって構成されている事が多かったが、ソフトのコストの面や、バッテリー切れになった時にリアルタイムクロックが停止することで、ゲームが正常にプレイできなくなる、イベントが制限される、更にはセーブにSRAMを使っている物はSRAMとリアルタイムクロックチップの両方に電力を食われる事でバッテリーの消耗が早く、セーブデータその物が早期で消えてしまうといったデメリットがあった。
しかしながら21世紀に入ってから発売されたほぼ全てのゲーム機には、据え置き機・携帯機問わずハード側に時計機能としてリアルタイムクロックが搭載されているため、ソフト側にリアルタイムクロックが搭載されることは殆どなくなったことで、この様な問題は収束することとなった。特に任天堂ではDS、ソニーではPS2以降に本体にバッテリーを内蔵したため対策された。

ただし、原則としてXbox One以降のXboxハードはリアルタイムクロックを搭載しておらず、インターネットへの接続がリアルタイムクロックの同期処理の前提となっている。Xbox 360以前に関してもクロックデータを充放電可能なコンデンサでのみ保存している。

 保守作業 
RTCにて日付データ等を記憶するための電源に電池を使用している場合、この電池が消耗すると交換が必要となる。

電池がRTCに対して外付けとなっている場合は、一般に容易に交換できる。一方、ワークステーションやPC向けのRTCではパッケージ内に電池もまとめて封入し、この電池が消耗した場合はメーカー保守として有償にてRTCを交換することがしばしばあった。これに対し、中古ワークステーションやPC等の愛好家が自力でRTCを交換したり Sun SPARCStation 20のRTCを自力で保守用の新品部品に交換。MACアドレスなど、RTCに記憶されていたデータの復旧作業も含んでいる。、RTCのパッケージを削り、電池やその配線を引き出して修理した マザーボードに搭載されているダラスセミコンダクターDS12887のパッケージを削り、電源の電極を引き出して修理。例がある。

 脚注 

 注釈 

 出典 

 関連項目 
 2000年問題

 外部リンク 
Intersil Real Time Clock Selection
Power Considerations for Accurate Real-Time Clocks

*