コンピュータの時間のはなし

コンピュータはどうやって時間を計っているのでしょうか?
マイコンの場合,
1.CPUを駆動しているクロック
2.CPU内のタイマー
PC98の場合、さらに外部の
3.カレンダー時計IC
というもので計っていました。

最近のPCのクロックは速すぎます。なにせ,1GHzでは遅いと言われるのです。簡単に1ギガヘルツといいますが,一秒間に10^9回の振動です。この世で一番速い光でさえ1秒間に進む距離は3×10^8m。つまり1GHzの1クロックである1ナノ秒の間に光が進む距離は30cmです。
 私が大学生だった1980年代初頭に聞いた話で6ナノ棒伝説というのがあります。そのころスーパーコンピューターを作っている人がいて,6ナノ秒に一回足し算をできることを目標にしていました。それは光が1.8m進む距離ですのでその長さの棒を作り,頑張って達成した時には20代?だったのに頭が真っ白になってしまったということです(いろいろ記憶が怪しいですが概してそういう話でした)。まして,今やその10倍くらいでもその辺に転がっているスマホで使われているクロックですから恐ろしいことです。

コンピュータで時間を作るのに一番簡単なのはNOP(NonOPeration)。つまり何もしないことで時間を稼ぎます。ただ,1度に1タスクしかできないCPUならただ単に待っているだけでもったいなので,別途時間を計る特別な回路を内蔵しています。それがタイマーと呼ばれ,タイマーのクロックである時間たったら特別な割り込みを発生させます。これならメインの仕事は基本的に邪魔をしません。

そして,カレンダー時計です。これはPC9800シリーズで使われていたμPD1990とμPD4990というのがあり,古いμPD1990ではうるう年が自動計算できませんでした。パソコンが使われる時間がそれほど長くないのを考えると大したことでもないようですが,改良されたなあという感じがしたものでした。

CPU(およびマザーボード)の時間のほか,重要なのは画面の描画の時間です。アニメーションの原理は短い時間の間に画面を切り替えているのであり,映画だと毎秒24コマです。TVは毎秒30コマ(正確には微妙に違うそうですが)です。
特にアニメーションが大事であるゲームでは重要です。 私はPlayStationのユーザー向け開発キットであるネットやろうぜを教えていたことがあるので,このあたりは体験をしました。
原理的に言うと画面と対応関係にあるとても速いメモリが二組あり,一方のメモリ内容を表示している間にもう一方にデータを書き,二つのメモリをあるタイミングで入れ替えます。こうすることで書き込み中で乱れることなくアニメーションが見えるというわけです。一秒間に何フレームを表示するかということでFPS(Frame Per Second)という単位で表します。簡単に言うと30FPSではこの画面切り替えを1秒間に30回行っており,1/30秒以内に画面内に存在するモノの位置を計算し,ピクセルデータあるいは3次元ならポリゴンデータを書き込んで描画しなければならないということです。PlayStationなどではクロックはMHz単位であり,3次元ポリゴン描画が1秒間に万単位なので1/30秒間に描画計算するなど楽勝のように思えるかもしれませんが,なかなかきびしかったのでした。コマ単位なら1000ポリゴン以下になってしまうし,莫大な数のオブジェクトがなくとも意外と計算に時間がかかりました。特に浮動小数点計算でSin,Cosをソフトで計算していたので数百クロックかかってしまい,Sinを二回か三回計算しただけでフレーム落ちしてしまいました。まあ,ハードウェアが貧相だったころの昔話でありますが,今でも,時間のかかる処理を気にかけないといけないことがあります。

今回はかなり昔話になりましたが,案外こういうこともどこかで役に立つかもしれないとメモしておきます。

この記事が気に入ったらサポートをしてみませんか?