Проблема 2038 года: где правда

Проблема 2038 года занимает умы многих пользователей — реальна ли она и насколько вероятна угроза?…

Проблема 2038 года заключается в ожидаемых сбоях, которые могут затронуть компьютеры использующие стандарт POSIX.

Интересно, что в ожидании миллениума многие эксперты говорили о проблеме 2000, которая должна была затронуть всю вычислительную технику — проблему 2038 можно отнести к этой же категории.

[adace-ad id=»5173″]

Сбой может произойти 19 января 2038 года в 3 часа ночи — в этот момент возможен коллапс компьютерных систем, которые используют POSIX-время. POSIX использует в качестве точки отсчета сумму всех секунд, начиная с нуля часов 1 января 1970 год. POSIX-время используется во всех языках семейства С.

До девяностых годов прошлого века повсеместно использовались исключительно 32-битные системы. Временной тип данных time_t и сегодня активно используется — в нём секунды хранятся в виде целого тридцати двух битного числа со знаком (один бит при этом отводится под знак)

Крайняя дата, которую можно представить в современном стандарте POSIX — 19 января 2038 года (3 часа 14 минут 7 секунд). После этой даты значение времени в POSIX становится отрицательным и кольцо времени замкнется. Время с «минусом» в POSIX будет трактоваться компьютером как дата 20 века.

Таким образом, начиная с 19 января 2038 года, возможен сбой любых программ, которые используют систему времени POSIX. Сбой также может привести к некорректным вычислениям в самих программах и стать причиной потери данных.

Моментального решения проблемы 2038 года на сегодняшний день не существует. Безусловно, решения для массовых операционных систем, платформ и программ сегодня существуют — выпускаются патчи, которые устраняют проблемы POSIX-времени, но предусмотреть все сценарии развития событий невозможно.

Увеличение стандарта time_t с 32 на 64 бита может привести к нарушению совместимости программ, а превращение данного типа в целое число без знака может и вовсе разрушить алгоритм работы различных программ и систем, которые высчитывают временную разницу

В основе современных 64-битных платформ представление о целом во временном типе заложено изначально. Планируется, что полный переход на подобные архитектуры должен быть завершен к 2040 году. Несмотря на это до сих пор продолжается выпуск 32-битных платформ и программ.

Согласно закону Мура все современные компьютеры могут подвергаться усовершенствованию только один раз в течение полутора-двух лет, а встроенные в оборудование компьютерные системы и вовсе могут обходиться без доработки весь срок эксплуатации. К примеру, на одной из канадских АЭС до 2010 года все еще работала вычислительная машина IBM 1800 — удивительно, но она была выпущена ещё в 1965 году

Временной тип данных time_t предназначался именно для 32-битных архитектур, кроме этого сегодня time_t используется в файловых форматах. Здесь всё несколько сложнее, отметим лишь, что временной тип данных задействован во всех файловых расширениях, например — в файловых форматах .zip. Именно поэтому разговоры о том, что проблема может изжить себя сама собой некорректны — файловые форматы использующие time_t живут минимум несколько десятилетий. Данное обстоятельство выдвигает проблему 2038 года на новый уровень и делает её более острой.

Специально для Вас:  Нападающий «Пари Сен-Жермен» стал амбассадором PUBG: Battlegrounds

Повсеместный переход на 64-битные платформы способен решить проблему — тогда прогнозируемая проблема будет отодвинута на 300 миллиардов лет вперед. Если быть точным новый сбой случиться в 292277026596 году 4 декабря — в 15 часов 30 минут и 8 секунд.

Кого затронет проблема 2038

Для 32-битных платформ Windows проблема 2038 года стоит особенно остро — большая часть современных операционных систем и их программных надстроек написаны на языках группы С.

Microsoft до сих пор не даёт гарантий, что сторонние программы будут работать после января 2038 года. Тем не менее разработчик сделал всё возможное и попытался исправить все проблемные места в коде, но как поведёт себя программное обеспечение сторонних разработчиков не знает никто

Определенно можно сказать одно — конфликты программ и операционных систем после 2038 года неизбежны.

MySQL

Система управления базами данных SQL Server, а также MySQL, имеют ограничение по временным значениями — доступный диапазон включает в себя период с 01 января 1970 года 00:00:00 по 19 января 2038 года 03:14:07.

Специально для Вас:  Степа умер: что будет со Сливки шоу

В чём причины проблемы 2038

Глобальные сбои вычислительной техники ожидаются не только в 2038 году, но и за несколько лет до этой даты.

Дело в том, что в программном обеспечении параметр время/дата реализуются в различных форматах. Самым распространенным видом хранения и представлением этих величин является стандарт POSIX. Здесь всё просто: время отражается как общее значение — в нашем случае как общее количество секунд (важно, что отсчёт происходит именно с 1 января 1970 года)

Стоит отметить, что для систем семейства POSIX/UNIX дата является уже, непосредственно, целым числом — здесь она реализована в качестве суммарного числа, которое указывает количество секунд.

[adace-ad id=»5168″]

Отталкиваясь от 1970 года число времени (а проще говоря — секунд) постоянно увеличивается — с каждым годом все большее значение накапливается внутри программ:

Таким образом, проблема 2038 была рассчитана математически и сомневаться в её реалистичности не приходиться.

Последствия проблемы 2038

Ответить что будет в 2038 году с основной массой вычислительной техники довольно сложно — в силу большого разнообразия конфигураций подобных систем и архитектур.

Ожидаются следующие сбои:

  • Утрата данных;
  • Различные ошибки ПО и операционных систем;
  • Нарушение функционирования промышленного и медицинского оборудования.

Почему же сбои произойдут именно в 2038 году и как удалось рассчитать точную дату? Дело в том, что число секунд от 1 января 1970 года до 19 января 2038 года равняется 2147483647 — данное число никаким образом не может уместиться в тридцать одном бите, но если к нему всё же прибавить 1, то получится 2147483648 и потребуется уже 32 бита.

Указанное значение должно уложиться в двоичную систему — выглядит оно как единица с тридцатью одним нулём. Единица на месте первого разряда означает минус — число станет отрицательным и будет означать уже — 2147483648

Таким образом, вместить в тридцать один бит число больше 2147483647 невозможно. Кстати, один бит зарезервирован под знак данного числа, и программа может записать такое число в виде его отрицательного значения. Происходит так называемое числовое зацикливание — если и далее секунды будут увеличиваться на единицу, то итоговое число все время будет находиться в отрицательной области и уменьшать свое значение:

  • 2147483647 +1 секунда = − 2147483648;
  • + 1 секунда = − 2147483647;
  • + 1 секунда = − 2147483646.
Специально для Вас:  Уроки фортепиано в Саратове: от профессионального пианиста в консерватории

Проблема 2038 года заключается в том, что программы и операционные системы считывают отрицательные числа некорректно, а точнее как 1970-й год, либо — как 1901-й. Такая разница в трактовке вызвана различиями при реализации time_t.

Вышеуказанные изменения приведут к некорректным расчетам внутри самих программ и данные могут трактоваться операционной системой как устаревшие — они периодически удаляются.

Автоматическая «сортировка» внутри программ, вполне возможно, будет нарушена и спустя определенный период необходимые для работы программы данные, в самом широком смысле, могут быть удалены. Последствия таких сбоев могут быть необратимыми и весьма разрушительными для финансовых структур и технических производств.

Для 64-разрядных версий Windows потенциальная проблема 2038 года стоит не так остро, но всё равно является потенциально опасной. Для 32-разрядных систем уже разработано большое количество патчей, которые в теории могут защитить данные от удаления, но избежать конфликтов программного обеспечения данные патчи не помогут

Microsoft подтверждает, что все дыры в 32-разрядных системах Windows практически исправлены, но остается множество программ, которые писались именно под 32-разрядные архитектуры — исправить их уже невозможно. Именно поэтому проблема 2038 года не может быть устранена полностью.

Самый большой риск существует для медицинского оборудования, а также для техники, которая используется на производстве и в банковской сфере. Как поведет себя программное обеспечение, написанное под конкретный станок или промышленный автомат не знает никто и последствия могут быть весьма серьезными 

Конечно, мнения о том, что «остановятся» электронные платежи, заводы и предприятия, атомные станций и прочие потенциально опасные объекты сегодня звучат не совсем реалистично.

Мы отлично помним о том, что накануне миллениума звучали похожие мнения, самые пессимистичные из которых гласили, что упадут самолёты и мир впадёт в глобальный блэкаут — к счатью, ничего подобного так и не случилось…

Leave a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *

МирДоступа Яндекс.Метрика