2038年問題をご存じですか
皆様、あけましておめでとうございます。PCSSサポーターの将軍です。本年もよろしくお願いいたします。
さて、今回が2022年初の投稿となります。年も変わって、刻一刻とタイトルにもある2038年に近づいてきています。
では、2038年問題とはどういう事なのでしょうか。
2038年問題とは…
まず、2038年問題とは、2038年にコンピュータが誤動作を起こしてしまうかもしれないということです。では、なぜ誤動作を起こしてしまうのでしょうか。
原因
コンピュータは全てのデータを2進数で表しています。2進数とは,0と1の2数であらわされる数字のことです。普段我々は10進数というものをよく使っていて、0から9の10個の数字で表現されています。例えば、10進数で表されたものを2進数に変換すると以下の表のようになります。
10進数表記 | 2進数表記 |
0 | 0 |
1 | 1 |
2 | 10 |
3 | 11 |
更に、コンピュータには、32bitのOSを使用しているものがあります。bitとは、情報量の最小の単位のことで、要するに2進数の1桁のことです。32bitとは、それが32桁あることを意味します。今回問題となるのは、この32bitのOSを搭載した機器です。
こうした機器は、世界標準時間である1970年1月1日0時0分0秒から何秒経過したかで、日時を把握しています。要するに、世界標準時を起点にカウントアップしているということです。どんどんカウントアップしていくと、32桁しかないので最終的にオーバーフローしてしまいます。その最大となるのが、2038年1月19日12時14分7秒(JST)で、これを過ぎると時間が戻ってしまうということです。「時を戻そう!」が現実のものとなるわけですね。
時間の導出の仕方を以下に示しておきますが、こういうものが嫌いな方は飛ばしてください。
32bit表記の最大値は、
$$\mathrm{2}^{31} – 1 = 2147483647$$ (先頭の1桁は符号を表すので、指数部は31)
となり、標準時から2147483647秒後が2038年1月19日3時14分07秒でこれを日本時間に直すと、2038年1月19日12時14分7秒(JST)となるわけです。
対策
こうなってしまっては困ります。では、どのようにすればこのような事態は避けられるのでしょうか。
①OSを64bitにする。
こうすれば、桁数が単純に倍になりますので、遅らせることができます。
②プログラムを修正する。
最後に
今回の記事と同じ内容を分かりやすく動画にされていらっしゃる方がいらっしゃいましたので、ご紹介して終わりたいと思います。
ラムダ技術部 / Yoidea 様 [2038年問題] 世界中のシステムがぶっ壊れる?
今回もご覧いただきありがとうございました。それではまたお会いしましょう。