ページ 11

2038年問題について

Posted: 2013年7月18日(木) 08:59
by 秋模様
今回はじめてこの掲示板を利用させていただきます、秋模様と申します。

この問題について、疑問を持ったのはとある民放番組からで
その番組では、問題内容の紹介として、32bitOSでは扱えるデータ長が4Byteであり
これを秒数で利用すると、最大2,147,483,647秒。コンピュータは1970年1月1日から秒数をカウントしており
同日付からの2,147,483,647秒後の2038年に問題が起きると説明し、64bitOSならこの問題を解決できるんですよ!という内容でした。
その他に64bitOSの利点を説明はしていたものの、この説明の端折り方、問題点の内容に納得できずにおります。(符号付き整数だから4Byte=2,147,483,647秒なのだという点を端折ってたり)

この問題、time_t型が符号付き4Byteであるからであれば、32bitOSでも8Byte長の整数型を利用したりして回避できる問題なのではと思い
色々しらべた結果、32bitOSの問題として紹介しているところもあれば、wikipediaでは『対策としては、time_t型を符号つき64ビット整数型(一般にはlong long int型)にするという方法がある。』という記述があり32bitOSが抱える問題という扱いであはありませんした。

以上の点から、time_t型を8Byteで扱えば32bitOSでもOSやファイルシステムの日付の扱いを打ち直せば(その価値があるか別として)乗り越えられる問題なのではないかという解釈なのですがどうでしょうか?陳腐な質問やもしれませんが、是非みなさんの意見をお聞かせ願えませんでしょうか。

ちなみに、Windows7 64bit版VC++2010Expressではsizeof(time_t)は8Byte
FreeBSD8.0 RELEASE i386 gccでは sizeof(time_t)は4Byteでした。

Re: 2038年問題について

Posted: 2013年7月18日(木) 11:09
by softya(ソフト屋)
この問題は、2000年問題と同様に既に書かれたコードと無頓着に今も生産されているコードが問題なので64bitOSに変えれば解決ってわけではありません。
C言語のtime_t型の規格自体で何ビットなのか実装まかせなので、これ自体が2038年問題を起こしているといっても過言ではないと思います。
LinuxやUnixではtime_t型がext2、ext3などのファイルシステムレベルで使われているのでファイル日付自体が2038年を持っているのも特徴です。

Re: 2038年問題について

Posted: 2013年7月18日(木) 12:45
by 秋模様
ご返答ありがとうございます。
softya(ソフト屋) さんが書きました:この問題は、2000年問題と同様に既に書かれたコードと無頓着に今も生産されているコードが問題なので64bitOSに変えれば解決ってわけではありません。

そうですね、OSを64bitOSにきりかえても、作成されたアプリケーションが2038年問題に対応していなれば元も子もないですよね。

softya(ソフト屋) さんが書きました: C言語のtime_t型の規格自体で何ビットなのか実装まかせなので、これ自体が2038年問題を起こしているといっても過言ではないと思います。
LinuxやUnixではtime_t型がext2、ext3などのファイルシステムレベルで使われているのでファイル日付自体が2038年を持っているのも特徴です。
最終的に、打ち直しを行った32bitOSとそれらのハード、ファイルシステムなどを利用すれば
32bitOSでも2038年後も利用可能という認識で問題ないでしょうか?(2038年にこれらのOSが利用価値があるのかは別として)
そうであれば、やはり32bitOSが抱える問題というよりは、実装の問題ということで番組の紹介方法は誤解を招くものということになりますね。

Re: 2038年問題について

Posted: 2013年7月18日(木) 13:56
by softya(ソフト屋)
>最終的に、打ち直しを行った32bitOSとそれらのハード、ファイルシステムなどを利用すれば
>32bitOSでも2038年後も利用可能という認識で問題ないでしょうか?(2038年にこれらのOSが利用価値があるのかは別として)

約20年後ですから現代のシステムが残っている可能性は十分にあります。特に組み込まれている機器は動いている限り利用され続ける事が多いです。
なにより問題は年数が経過して開発会社が消滅したりして誰も中身がわからないシステムを誰が更新しテストを行うのか?これでしょう。
アプリ、ハード、OS、ファームウェアのレベルで見直しが必要ですので、作業工数は相当大きい事になります。
※ time_tはC言語の問題でも有るので、組み込み機器にも問題は潜んでいます。

2000年の時も大きな問題でしたが大半は基幹システム(大型コンピュータ)の問題だったので大手が困っても一般市民が困ることが少なかったんで予算的には何とかなったんです。
こういう問題の解消は経済問題なしに語れませんので、個人から中小企業まで果たして何とか成るのか? 私には予想出来ません。
人命に関わる交通機関や医療機器にも問題は潜んでいるかもしれませんね。

>そうであれば、やはり32bitOSが抱える問題というよりは、実装の問題ということで番組の紹介方法は誤解を招くものということになりますね。

まぁ、ソフトやOSを変えないといけないと認識が広がるだけでも意味はあります。TV報道の偏向は何時もの事ですが。

Re: 2038年問題について

Posted: 2013年7月18日(木) 14:20
by 秋模様
>約20年後ですから現代のシステムが残っている可能性は十分にあります。特に組み込まれている機器は動いている限り利用され続ける事が多いです。
>なにより問題は年数が経過して開発会社が消滅したりして誰も中身がわからないシステムを誰が更新しテストを行うのか?これでしょう。
>アプリ、ハード、OS、ファームウェアのレベルで見直しが必要ですので、作業工数は相当大きい事になります。
>※ time_tはC言語の問題でも有るので、組み込み機器にも問題は潜んでいます。

なるほど、何年経過しようがビンテージとして活躍するハードはありますよね。
コンシューマー向けPCばかりに意識が行き、組み込み側のことは考えていませんでした。

>2000年の時も大きな問題でしたが大半は基幹システム(大型コンピュータ)の問題だったので大手が困っても一般市民が困ることが少なかったんで予算的には何とかなったんです。
>こういう問題の解消は経済問題なしに語れませんので、個人から中小企業まで果たして何とか成るのか? 私には予想出来ません。
>人命に関わる交通機関や医療機器にも問題は潜んでいるかもしれませんね。

記憶はうすいですが、たしか2000年問題のときも病院側が自家発電機などを準備するという報道をみたことがあります。
人命にかかわるとなると、問題ですね。

>まぁ、ソフトやOSを変えないといけないと認識が広がるだけでも意味はあります。TV報道の偏向は何時もの事ですが。

この件にかんしては、自分の解釈が間違いなのか、番組が間違いなのかすごいモヤモヤしたものがあり、すごく気持ち悪いものでした。
確信するに至るには、自分の知識では足りず、こちらでお力をお借りするに至りました。おかげですっきりです。


私も、こういった問題を普遍的に正しく理解をうながすのは難しいとおもいます。ですので、どういう形であれまず知ってもらうという事は大事ですよね。
リテラシーが~なんて言って、問題周知に及ばなければ意味がないですね。
そういった点は理解してはいるつもりでも、今回の件では中途半端に理解してる私としては、どうもモヤモヤを生む結果となったようです。丁寧に説明してくださりありがとうございました!これで解決とさせていただきます。