• Clock is the Daughter of Time

コンピュータの「時計」とはカウンタである。クロック信号をカウンタ回路で計測しておき、その値を使って現在の日時を計算する。1964年に発表されたIBMのSystem/360では、交流電源周波数を「クロック信号」として使っていて、1/60秒あるいは1/50秒単位で32bitのカウンタを増加させていた。多くの国で交流電源周波数は管理されているが、送電網の規模が小さいと周波数を高精度に保つことが難しくなる。米国などでは比較的精度を高くできるが、日本では変動が大きくなりやすい。また、一国の中に50Hzと60Hzの地域があるため、日本では、アナログテレビの同期方式など、交流電源周波数に頼らない方法が使われてきた。

日付や時刻を保持するカウンタを「Real Time Clock」(RTC)と呼ぶ。専用のデバイスも作られたが、汎用のカウンタ回路(CPUの周辺デバイス)を使う場合や、割り込みを使いソフトウェア的に実現する方法もある。

1979年のPC-8001には、NECのμPD1990というRTCデバイスが搭載されていたのだが、バッテリバックアップはされていなかった。このμPD1990では、水晶発振回路を使い32.768kHz(2の15乗Hz)をクロック信号としていた。

バッテリバックアップになったのは1981年のPC-8801から。ただしμPD1990は年を記憶せず、閏年にも対応していなかった。そのため、年まで含め正確な日時が必要な場合には、ユーザーが日付を設定する必要があった。

1984年のIBM PC/ATは、50バイトのメモリ(これがいわゆるPCのCMOSの始まり)を含むRTCモトローラMC146818を搭載した。このあたりからパソコンにはバッテリバックアップされたRTCが搭載されるのが普通になった。

Windowsを含め、最近のオペレーティングシステムでは、起動時にRTCを読んで、そのあとはソフトウェアを使ったカウンタを使って日時を計算する。というのも、RTCは低消費電力を優先して作られる半導体デバイスであり、高速に読み書きができない、高精度の時間測定ができないという問題がある。

Windowsの前身たるMS-DOSでは日付時刻が必要なとき直接RTCやソフトウェア・カウンタを読み出していた。MS-DOS Ver.2.0では、この機能はデバイスドライバー化された。起動時に組み込まれるCLOCKデバイス(CLOCK$という名前にする場合もあった)の中で行い、ハードウェアの違いやあとから追加されるハードウェアに対応できるようになった。

インターネットが普及すると、NTP(Network Time Protocol)を使って、インターネットに公開されているNTPサーバーと時刻を同期できるようになる。WindowsにNTPが導入され、非ドメイン環境でもユーザーが時計を合わせなくてもいいようになったのは、Windows 2000からである(NTドメイン環境では独自の時刻同期プロトコルがあった)。

なお、Windows 10以降で強制的にNTPサーバーと同期させて時刻合わせを行うには、設定アプリの「時刻と言語→日付と時刻→今すぐ同期ボタン」を使うか、管理者権限でコンソールを開き、以下のコマンドを実行する(写真01)。


w32tm.exe /config /syncfromflags:manual /manualpeerlist:time.windows.com
  • 写真01: w32tm.exeを使うとコマンドラインからもNTPサーバーとの時刻同期を強制的に開始することが可能。w32tm.exeにはその他にもさまざまな機能がある。詳細は“/?”でオンラインヘルプを参照のこと

NTPによる時計合わせは、実は完全な方法ではない。実生活で使われる時計には「時差」あるいは「タイムゾーン」が必ず適用されているからだ。Windowsがタイムゾーンの自動設定に対応したのはWindows 10から。それ以前は、手動でタイムゾーンを設定する必要があった。Androidなどのスマートフォンがタイムゾーンを自動切り替えできるのは、携帯電話ネットワークからタイムゾーン情報を得ているからだ。タイムゾーンは、国家、地域が定めるものであるため、その境界は複雑。GPSなどを使って緯度経度を測定してもタイムゾーンを「推測」することしかできな。WindowsではIPアドレスから地域を推測している。ただし、これは必ずしも確実な方法ではない。

Linuxでは、タイムゾーンを手動設定するようになっていることが多い。デスクトップマシンなら稼働中にタイムゾーンが切り替わる可能性は低いからだ。Chromebookは時刻設定は完全に自動(GoogleのNTPサーバーを使う)だが、やはりタイムゾーン設定だけはユーザーが手動で行えるようになっている。

今回のタイトルの元ネタは、Josephine Teyの「The Daughter of Time」(邦題 時の娘。ハヤカワ・ミステリ文庫)である。「ベット・ディテクティブ」スタイルを確立させた作品であり、歴史上の出来事を検証する「歴史ミステリ」としても有名。ミステリには、安楽椅子に座ったまま事件を解決してしまう「アームチェア・ディテクティブ」(安楽椅子探偵とも)と呼ばれるジャンルがある。ベット・ディテクティブはその1つのパターンで、入院中の探偵がベットの上で事件を解決するというもの。病床探偵とでも言うべきか。この本の題名は“Truth is the daughter of time”を意味するラテン語の成句にちなむ。

最初、「時は準宝石の螺旋のように」をネタにしようかと思ったのだが「またサンリオ文庫かよ」という苦情が聞こえてきそうなのでやめることにした。そのほか、「定刻の逆襲」、「時計じかけのなんとか」(映画にもなったA Clockwork Orangeがネタなのだが、手塚治虫が「時計仕掛けのりんご」、山上たつひこが「ゼンマイ仕掛けのまくわうり」という作品を書いている)などを思いついたのだが……。