OS

【UNIX時間】2038年問題について整理する

【※ 当記事は2020年7月2日時点の情報です】

ペイヴメント(@pavement1234)です。

エンジニア
エンジニア
いまさらですが
UNIX時間における2038年問題について知りたい。

UNIX時間とは?

UNIX時間(Wikipedia)を読んでみました。

UNIX時間(ユニックスじかん)または
UNIX時刻(ユニックスじこく)、
UNIX time(ユニックスタイム)、
POSIX time(ポジックスタイム)
とはコンピューターシステム上での時刻表現の一種。
UNIXエポック、すなわち協定世界時 (UTC) での1970年1月1日午前0時0分0秒から
形式的な経過秒数(すなわち、実質的な経過秒数から、その間に挿入された閏秒を引き、削除された閏秒を加えたもの)として表される。
GPS時刻などとは異なり、大多数のシステムでは、
本当の経過秒数を表すものではない。
UNIX系のオペレーティングシステム(データ型はtime_t)だけでなく、
他の多くのオペレーティングシステムにおいてもこの表現方法が用いられている。
システム内部では32ビットまたは64ビットの符号付整数 (signed int) で
扱われていることが普通である。
ここで、以前は多かった32ビットで扱われている場合で、符号付きであった場合、
その最大値 2,147,483,647 を超えると負の値になり、
正しく時刻を扱えなくなるという問題がある。
これを2038年問題という。

出典:UNIX時間(Wikipedia)

2038年に発生すると言われている問題です。
今2019年なのであと19弱年しか残されていません。

2038年問題とは

2025年問題の次は2038年問題!コンピュータの暦問題を探る(後編)
を読んでみました。
カンタンに言うと32ビットOSは2038年問題を乗り切れないということに尽きます。

ちょっと細かく言うと、
コンピュータの時間はUTC(世界協定時)の
1970年1月1日0時0分からの経過秒数でカウントしていますが、
32ビット(符号あり、signed)の最大値である2,147,483,648秒が最大値。

つまり1970年1月1日0時0分から2,147,483,648秒後の2038年1月19日3時14分7秒
(日本時間では2038年1月19日12時14分7秒)にオーバーフローし、
1秒後に1901年12月13日20時45分52秒に戻ってしまうそう。

これが、64ビットになると西暦3000億年まで行けるそうなので、
当面先送りにできるというわけです。

まとめ

2038年に32ビットCPUのパソコンは
殆ど消滅していると思うのですが、怖いのはIoTデバイス。
中途半端に組み込まれた低スペックのマイコンたちが、
RTCとかで時間管理しちゃってると、ヤバいですね。
きっと2038年IoTデバイス問題はいつか騒ぎになると思うし、
それを飯のタネにする人も出てくるだろうとも思います。

しかし、
実は車とか飛行機の奥深くに32ビットマイコンが隠れてて
誤動作しちゃう、みたいなのが本当に怖い。
2038年問題はメーカー責任で早めに対策される
(直せないなら回収するとか)ことを祈ります。

ABOUT ME
ペイヴメント
ペイヴメントのエンジニア塾(当ブログ)では20年以上の経験から得られたプログラミング系ノウハウについてベテランにも満足して頂けるような内容の濃いコンテンツを初心者にも分かりやすい形で日々発信しています。【経歴】ベンチャーのソフトハウスで4年勤務後、精密機器メーカーのソフト開発部門に勤務し今に至ります。
error: Content is protected !!