2043年問題

By 神居 - Posted: 2008/10/09 Last updated: 2010/06/26 - Leave a Comment

2007年問題を取り上げたのでついでにもう1つ。

2000年問題と言う世間を大きく賑わせたIT業界一大イベントがありました。昔から使われているコンピュータ・ソフトウェアは日付の年表記に下二桁を使っているから、1999年の99がMAXで2000年になると繰り上がって00となり、1900年として処理されるため世の中に大混乱が起こる。と言うものでした。それこそ飛行機が落ちるかも知れないから、1999年と2000年にまたがって飛ぶフライトは避けようなど、ちょっと大げさすぎないか?と言うような話まで尾ひれがついて飛び交っていたと思います。まぁ本当に00年として処理してしまうようなプログラムもあったり、日付の表記が変だったり、いろいろあったようですが、世界が大混乱になるような大げさなことは起きませんでした。もっとも多くの企業は事前に対応していたことも事実です。

さてメインフレームにはもう1つ日付に関する問題が残っています。それはタイトルのように2043年に起きます。S/370アーキテクチャをベースとする汎用機は時刻の制御にTOD時計(Time Of Day clock)と言うものを使っています。TOD時計は64ビットのレジスターで、先頭の52ビット(ビット0?51)が使われます。ビット51は1マイクロ秒(1/1000000)を示し、1マイクロ秒ごとにカウントアップされます。コンピュータが世に登場したのは1950年代以降ですが、この時計の計時基準(スタート時刻)はさらに50年も遡り、1900年1月1日午前0時0分0秒ジャストです。ちなみにこの日は日曜日で週初めでもあります。TOD時計の最初の状態は、x00000000-00000です。-の位置が1.048576秒(約1秒)を示します。やがてマイクロ秒ごとのカウントアップが限界に来るとTOD時計はxFFFFFFFFFFFFFとなります。そしてもう1マイクロ秒で繰り上がってx0000000000000に戻ってしまいます。99年から00年になるのと似た状況が起きるわけです。TOD時計の周期は約143年なので、2043年にこの問題が発生します。すでにIBM社はアーキテクチャでこの問題に対応した新たな仕様を決めていて、z/OS自身の日付計算モジュールや関連するAPIなどもすでに対応されているようです。COBOLやPL/Iで書かれたプログラムでは直接TOD時計を使うことはありませんのでY2Kの時ほど騒がれることはないでしょうが、アセンブラー・プログラムではTOD時計の値を直接使って日付や時刻を計算するプログラムは結構あると思います。35年後のことですからメインフレーム自体がどうなっているかわかりませんが、今と同じであればもう一騒動あるかも知れません。


Posted in つぶやき・雑感 • • Top Of Page