2038年の問題ウィキペディア

before-content-x4

2038年の問題 ITシステムから(数字: Y2K38 )2038年にソフトウェアの失敗につながる可能性があります。この問題は、UNIX期間を使用するITシステムに限定されています time_t 32ビット番号を定義します。

2038年の問題の表現:
1。:バイナリシステムの時間表現
2。:関連10進数
3。:時間の誤った表現
4。:正しい時間
after-content-x4

UNIX期間は、1970年1月1日以降、数秒で有効期限が切れている時間をカウントします。 [初め] 2038年1月19日火曜日午前3時14:07 AM UTC、過去の秒数は署名された32ビット数の容量になります(最大値2,147.483.647、2 最初に30 -1)超過。 [2] 条約によれば、最も重要なビット(通常は左のMSB)は、条約に従って正と負の数を区別するために使用されます(2つの補数のサイン)。 UNIX時間の日時への変換が不十分であるため、これは1901年12月13日金曜日の午後8時45分52分の値の解釈につながります。この問題は、ソフトウェア開発におけるメーターオーバーフローと呼ばれます。

特に銀行および保険環境のUNIXシステムはメインフレームと並んで標準装備の一部であるため、対策がなければ、経済的影響は有害である可能性があります。 UNIXサーバーに加えて、UNIXのようなオペレーティングシステムを備えた多くの埋め込みシステムは、多くの場合、デスクトップおよびサーバーシステム(ルーターや電子測定デバイスなど)の倍数です。少なくとも遅れましたが、長期的には、現在の企業や機関における対応するコンピューターシステムの必要な適応または近代化は、デフォルトの確率を減らすことができます。

2038年のエラーの例は、妥当性チェックが時間ごとにあることです。現在の時刻はプロセスの開始時に保存されます。これにより、プロセスの終了までに指定された時間がないことが保証されます(たとえば、虐待を避けるために数分後にオンラインバンキング中の自動登録式)。システムによって記載されているタイムスタンプがそのような期間内に1901に規定されている場合、差は常に負です。ただし、プログラムが最小サイズ(プロセスの開始から5分後に)の正の数値を期待している場合、数値が正式になるのを待っていません – たとえば、数は5分のターゲット値よりも常に小さくなります。これにより、望ましくない長いオープンなセキュリティアクセスまたは無限のループにつながる可能性があります。これは、プログラムを非反応するなどのエンドユーザー向けに自分自身を表現できます。

Unixumfallでは、32ビットから64ビットのアーキテクチャへの移行により、プログラミング言語Cの基本的なタイプの「長い」が32ビットから64ビットに拡張されることが優先されました(技術:ILP32のLP64モデルへの変換)。このデータ型は、従来の定義に対応しています time_t 「長い」基本タイプがC99およびUNIX98でデフォルトで導入される前に、利用可能な最大の基本タイプとして。 [3] したがって、このような64ビットシステムは、1970年1月1日から64ビット秒でPOSIXタイムスタンプに切り替えられており、292億年にわたって確実に機能します。

それにもかかわらず、新しい64ビットプロセッサアーキテクチャ(X64またはAMD64/EM64T、Itanium/IA-64、IBM Power 5、UltrasParc、PA-Risc、MIPS)への切り替えだけでは十分ではありません。これは、系統的調整を簡素化しませんが、すべてのプログラムと新しい翻訳を備えた新しい翻訳を備えていません。すべてのプログラムがすでに64ビット互換性があるわけではなく、システムによって配信される64ビットのタイムスタンプを32ビット値として処理するのは簡単であるため、低品質の32ビットによってのみ照会され、2038年1月19日に値が分離されました。 最初に30 = 1901年12月13日。

UNIXシステムも組み込みシステムに広がっているため、一部のオペレーティングシステムには、32ビットプロセッサアーキテクチャ用の32ビットプロセッサアーキテクチャの定義もあります。 time_t 64ビットに変換されました。これは、2012年のNetBSDのバージョン6.0、2014年のバージョン5.5、OpenBSDのLinuxです。 [4] [5] [6] ただし、古いバイナリインターフェイスは通常残っているため、新しい翻訳が必要です。アプリケーションレベルでは、64ビットの代替品の使用がすでに提案されていました。 [7] [8] [9] GNU-Cライブラリには、切り替えのための1つがありました time64_t 導入された定義。 [十] 同様の定義 __time64_t Windows環境で使用され、VisualC ++ 2005でデフォルトが開かれました 時間64 かわった。 [11]

after-content-x4

別の救済策は、UNIXタイムカウンターから新しいタイムベースへのプログラムの変換です。 64ビットカウンターを使用したミリ秒またはマイクロ秒のカウント(必ずしも64ビットアーキテクチャを必要としない)は、特にこの大きさのリアルタイム要件を備えた組み込みシステムではすでに広範囲に広がっています。新しい時間APIは常にUNIX期間よりも高い精度とスパンを使用します。たとえばJava System.CurrentTimemillis (1970年1月1日以来64ビットミリ秒、2億9,200万年間十分です)および.NET System.Datetime.Now.Ticks (1月1日以降の64ビット10テルマイクロ秒、29227年間十分です)。データベースベースのトランザクションはしばしば使用されます タイムスタンプ -Database標準SQL92で定義されているART値は、マイクロ秒(ODBC/JDBCでも非常にアクセスできます)とデータベースでの表現が、主に毎日のカウンター(SQL日付)から距離があり、毎日のカウンターが32ビットの範囲が大きくなります(ただし、デイリーメーターの根底にあるエポックはまったく異なります)。プログラムでタイムスタンプのこれらのデータ型が継続されている場合、Unixzeitカウンターの制限を解決できます。

もう1つの治療法は、ISO 8601に従って、Yyyymmdhhms-Time Temple、例えば。 B. “20140823142216”。これらは、少なくとも9999年12月31日午後11時599:59時まで免除されます。たとえば、2つのタイムスタンプの違いを計算するための内部操作が問題のあるバイナリ形式に変換されない限り。

に密接に関連しています 2038年の問題 その年です 2036 (番号: Y2K36 )。
2036年2月7日06:28:16 UTC、UNIXパス用に元々開発されたTIME同期プロトコルNTP(ネットワークタイムプロトコル)のカウンター。この問題は、最新の実装で解決されます(参照してください RFC 5905 )、しかし、多くのデバイス(特に組み込みシステム)は、古い標準に応じて機能します RFC 868

ここでも、背景は、32ビットの数字としての時間伝送が数秒で行われるが、1900年1月1日、00:00:00 UTCの開始時間では署名されていないということです。システムが非常にきれいに実装されている場合、計算中に(より大きな)問題はありません。これは、微分法を使用して時間同期が機能するはずであるためです。 [12番目] [13]

ただし、実装CANの無効な値がNTP形式とUNIX形式の両方で作業することでも発生します。これは、特にモノのインターネットのコンテキストで埋め込まれたシステムの増加に適用されます。バッテリーベースのリアルタイムクロックの欠如により、システムは、通常の表現での断面のために、通常の表現での通知のために、NTP形式でのNTP形式での開始のたびに決定する必要があります。 (頻繁ではない)故障した接続試行が0として指定され、それに応じて1900-01-01 00:00:00 UTC(UNIX期間で負の値としてのみ表示される)で指定された場合、UNIX形式の非セキュアされた変換は無効になり、(特権の場合)は、システムとその行動に匹敵する効果をもたらします。

  • 64ビットシステム時間を備えたOpenBSD 5.5 。 In:C’t 2014、Heft 12、S。50。
  1. エポックから数秒。 2010年12月16日に取得 (英語)。
  2. https://www.heise.de/ct/artikel/prozessorgefluester-285204.html
  3. データサイズの中立性と64ビットサポート。 オープングループ ; テンプレート:Web/一時を引用します
  4. NetBSD 6.0の発表。 17. 2012年10月、 2016年1月18日にアクセス テンプレート:Web/一時を引用します
  5. OpenBSD 5.5リリース(2014年5月1日)。 1. 2014年5月、 2016年1月18日にアクセス テンプレート:Web/一時を引用します
  6. LKML:Arnd Bergmann:[Git Pull] Y2038:コア、ドライバー、ファイルシステムの変更。 の: lkml.org。 2020年1月30日にアクセス テンプレート:Web/一時を引用します
  7. Linux Standard Base Core仕様4.0。 2010年12月16日に取得 (英語)。
  8. マンページセクション3:ライブラリインターフェイスとヘッダー。 (もはやオンラインで利用できなくなりました。)以前は オリジナル ; 2010年12月16日に取得 (英語)。 @初め @2 テンプレート:dead link/docs.sun.com ページは使用できなくなりました。検索してください Webarchiven ))
  9. HP-uxリファレンスボリューム5 of 5。 タイプ(5)。 2010年12月16日に取得 (英語)。
  10. GNU Cライブラリでの64ビット時間シンボル処理。 gnu.org ; テンプレート:Web/一時を引用します
  11. 時間、_time32、_time64。 マイクロソフト ; テンプレート:Web/一時を引用します
  12. VGL。 Englische Wikipedia NTPタイムスタンプ
  13. NTPタイムスケールと跳躍秒。 2015年11月30日に取得 (英語)。
after-content-x4