Проблема 2038 года что это

Проблема 2038 года: что делать, когда кончится время?

Авторизуйтесь

Проблема 2038 года: что делать, когда кончится время?

В полночь первого января 1970 года началась «Эпоха Unix». В Unix и других POSIX-совместимых ОС приняли систему описания моментов времени. Но одновременно с новой эпохой у инженеров и разработчиков возникли новые проблемы. Одна из них — «Проблема 2038 года». Рассказываем, что это такое и ждёт ли нас «Апокалипсис» через 18 лет.

Минутка истории

Ошибка Y2K заключалась в следующем. В 1950-х и 60-х годах, когда создавался софт для первых компьютеров, разработчики отображали год в дате двумя последними цифрами. Для экономии ресурсов. Поэтому они переживали, что 1 января 2000 года компьютеры, отображающие новую дату «00», ошибочно решат, что это 1900 год.

Это звучало правдоподобно, и многие люди сделали бизнес на консультациях по этому вопросу. Вырос спрос на COBOL-разработчиков — им приходилось исправлять старые приложения. По мере приближения Миллениума люди готовились к глупым коммунальным платежам, гаснущим фонарям и падающим самолётам

В конце концов, появились Y2K-совместимые системы, и 2000 год начался почти без шума. Но «проблема 2038 года» немного сложнее.

Что произойдёт в 2038 году

Время Unix — это количество секунд, начиная с полуночи 1 января 1970 года. Отсчёт начался с 0, и любое значение времени или даты выражается числом секунд, следующих за 0. Так, значение 919642718 равно 919 642 718 секундам после 00:00:00 часов 1 января 1970 года. То есть воскресенью 16:18:38 21 февраля 1999 года.

Это удобный формат, потому что если вы вычтете любые два значения, то получите количество секунд — то есть разницу во времени — между ними. Так можно определить, сколько минут, часов, дней, месяцев или лет прошло между двумя любыми датами.

Старые 32-разрядные процессоры способны считать только до 2 147 483 647. Таким образом, 19 января 2038 года в 03:14:07 по Всемирному времени (UTC) они достигнут максимальной мощности.

Проблема 2038 года приведёт к тому, что часы на некоторых устройствах перестанут работать. По одной из теорий, время обернётся назад к «началу» и будет храниться в виде отрицательных чисел. И из-за того, как написан код, компьютеры будут интерпретировать это время как происходящее 13 декабря 1901 года, а не 19 января.

Всё не так плохо

Большинство компьютеров и смартфонов, сделанных в последнее время, 64-разрядные и могут содержать числа размером 9 223 372 036 854 775 807. То есть будут отсчитывать время до 292 277 026 596 года. Так что их основная часть (за исключением действительно старых) не пострадает.

Что касается банкоматов, медицинской и военной техники и прочего, то к 2038 году, вполне вероятно, большинство (если не все) 32-битных устройств не будут использовать. Им на замену придут более современные системы, которые не нужно исправлять. Главной головной болью может стать модернизация оборудования. Но инженеров есть ещё 18 лет, чтобы с ней справиться.

Источник

Проблема 2038 года. Когда закончится время

Проблема 2038 года что это

Проблема 2038 года, ее еще называют Unix Millennium bug или Y2K38. Что это такое и почему она возникнет?

Смотрите видео, посвященное проблеме 2038 года

19 января 2038 года или на кануне этой даты могут произойти сбои в различном программном обеспечении.

Почему

Время и дату в компьютерных программах можно хранить по разному. Один из способов хранения даты — это использование стандарта POSIX (UNIX timestamp, Unix epoch).

В стандарте POSIX время записывается как количество секунд, прошедших с 0 часов 0 минут 0 секунд 1 января 1970 года по Всемирному времени (UTC). Для Unix-подобных операционных систем — это стандарт представления времени.

Дата в таком формате записывается как обычное целое число — число секунд. Очевидно, что чем позднее дата от даты 1 января 1970, тем больше секунд прошло с этой даты. Значит тем большее значение нужно сохранять в программах, использующие даты.

Например:
Для 01.01.1970 00:00:05 это число + 5 (сек).
Для 31.08.1970 12:10:33 это число + 20952633 (сек).
Для 19.01.2038 00:00:00 это число + 2147472000 (сек).
Для 19.01.2038 03:14:07 это число + 2147483647 (сек).

В старых программах (а иногда даже в новых) дата часто хранится в целочисленном 32-х битном знаковом формате — signed int. Это означает, что под число выделяется 32 бита:
0 0000000 00000000 00000000 00000000

Максимальное число, которое можно сохранить, используя 31 бит, это число 2147483647. В 32-х битном знаковом целочисленном формате записывается оно следующим образом:
0 1111111 11111111 11111111 11111111
В POSIX это число соответствует дате 19.01.2038 03:14:07. Как видим, это и есть «роковое» 19 января 2038 года.

Проблема 2038 года что это

Что произойдет 19 января 2038

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

Что будет внутри программ

Рассмотрим, что именно произойдет внутри программ. Числа больше 2147483647 не влезают в 31-бит.

Например, для числа 2147483647+1= 2147483648 нужно уже 32 бита. Это число записывается в двоичной системе, как единица в старшем разряде и 31 ноль:
1 0000000 00000000 00000000 00000000
Для 32-х битного типа signed integer — это число соответствует числу: −2147483648. Как было сказано выше, 1 в первом разряде обозначает отрицательное число.

Получается, что числа больше 2147483647 уже нельзя записать в 31 бит, но так как у нас есть еще один бит для хранения знака, программа запишет эти числа в память, но в программе они будут трактоваться как отрицательные числа.

Происходит как бы зацикливание числа. Если говорить о количестве секунд, увеличивающихся на 1, то они достигают значения 2147483647, а потом переходят в отрицательную область: −2147483648, −2147483647, −2147483646 и т.д. В программах такие числа будут трактоваться как 1970-й или 1901-й год (зависит от реализации).

Как это повлияет на работу программ

Все зависит от того, насколько дата и время важны в конкретной программе. Если работа программы зависит от времени, то скорее всего могут произойти сбои в работе программы или потери данных.

Например, если в табличных данных используется сортировка по времени, а для новых данных оно будет трактоваться, как отрицательное число, то эти данные будут трактоваться как старые данные, и сортировка будет нарушена.

Или, например, если программа очищает, какие-нибудь данные спустя определенное время, то при неверной трактовки времени, могут быть удалены еще актуальные данные.

Получается, что, чем больше работа программа зависит от времени, хранимого 32-х битном типе signed integer, то тем серьезнее могут быть последствия.

Так ли все серьезно

И да и нет. На самом деле — да!

Современные 64-х разрядные системы не подвержены данное проблеме, поэтому на них она никак не повлияет.

Для существующих 32-разрядных программ и систем уже выпущено множество патчей для исправления данной проблемы. Например, Microsoft, как он утверждает, уже обнаружил и исправил проблемы в 32-х разрядных версиях Windows.

Но все программы не исправить, поэтому многие из них остаются в зоне риска. Более того, даже сейчас выпускается множество 32-х битных систем, особенно встраиваемых.

Наибольшую опасность здесь представляет программное обеспечение, которое используется в промышленных областях. Для управления станками, машинами, отвечает за работу заводов, электростанций, медицинских приборов, военных устройств и других важных объектов.

Проблема 2038 года что это

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

Конечно, до 2038 года еще много времени и многие из них будут заменены на новые. Но все мы знаем, как быстро идет время, поэтому расслабляться не стоит. Более того, есть программы, которые уже сейчас могут использовать даты в будущем. Проблемы в таких программах могут начаться намного раньше.

Источник

Проблема—2038: «сойдут ли с ума» компьютеры через 23 года

19 января 2038 года в 03:14:07 по Гринвичу компьютеры и другие устройства с 32-битной системой не смогут больше верно отсчитывать время. Такую новость обсуждают многие СМИ мира. Гипотетическую ситуацию, по примеру «проблемы 2000 года», когда ожидались возможные сбои из-за смены тысячелетия, назвали «проблемой 2038 года». Впрочем, она будет актуальна, только если к этому моменту ещё останутся компьютеры, использующие нынешний принцип отсчёта времени.

Не хватит цифр

Как поясняют специалисты, дело в том, что очень многие вычислительные устройства, в том числе использующие операционные системы Windows, Android, Macintosh, — отсчитывают системное время с 1 января 1970 года в секундах, используя 32-битное значение. 19 января 2038 года наступит момент, когда у них просто не найдётся числа, чтобы записать наступление 2 147 483 648-й секунды. И счётчик «обнулится» до 1970 или 1901 года, в зависимости от установок. Это может привести к системным ошибкам.

С подобной ситуацией уже столкнулся Google на своём сервисе YouTube. Проблему вызвало самое популярное видео в интернете — клип Gangnam Style южнокорейского исполнителя Psy. Когда количество его просмотров достигло 2 147 483 647, счётчик просто перестал работать. Программистам Google пришлось его переписывать. Починили с большим заделом — теперь допустимое количество просмотров составляет 9 223 372 036 854 775 808 (более 9 триллионов).

Насколько серьёзна проблема

Программисты знают о существующем ограничении 32-битных систем и готовятся к 2038 году. К примеру, введение 64-битного отсчёта времени в современных системах отодвигает «проблему 2038 года» сразу на 290 миллиардов лет. Но в мире остаётся ещё много 32-битных систем. К тому же, эта проблема таится ещё и во многих нынешних широко распространённых форматах файлов.

«Современные версии операционных систем решают эту проблемы переходом к 64-битной схеме отсчёта времени, но некоторые старые устройства, или те, на которых установлено старое програмное обеспечение, могут повести себя непредсказуемо», — отметил журналист издания The Economist Гленн Флейшман.

«На самом деле, решение заключается в том, что в течение 23 лет многие 32-битные системы устареют и будут подлежать замене. На смену им придут те, которым не потребуется исправление», — пишет The Guardian.

«Самой большой головной болью, видимо, станет модернизация оборудования, к примеру, на энергетических объектах. Но если планировать эту работу заранее, то можно избежать больших проблем», — отмечает издание.

Одно можно сказать определённо: у человечества достаточно времени, чтобы разобраться с этим вопросом. К тому же, «проблема 2000 года» в итоге так и не вызвала того, что многие предрекали. К примеру, массового отключения АЭС и падения самолётов.

Источник

2038: остался всего 21 год

Проблема 2038 года что этоПорой кажется, что на фронте борьбы с проблемой 2038 года наступило относительное затишье. Однако время идет, и тот день, когда 32-битные значения типа time_t больше не смогут корректно отображать даты, наступит уже меньше чем через 21 год. Этот срок может показаться большим, однако сравнительно долгий жизненный цикл многих встраиваемых систем подразумевает, что некоторые из них, будучи введенными в строй в наше время, все еще будут работать, когда наступит критический момент. Арнд Бергманн — один из основных разработчиков, занимающихся этой проблемой. На конференции Linaro Connect 2017 он поделился новостями о текущем положении дел в этой области.

Согласно Бергманну, работа ведется сразу в трех независимых направлениях, первое из которых — само ядро Linux. В течение последних пяти лет он искал способы подготовить ядро к 2038 году. Значительная часть этой работы подразумевает конвертирование 32-битных меток времени (timestamps) в 64-битные значения — даже на 32-битных системах. Некоторые 32-битные метки времени также используются в пользовательских API, что значительно усложняет проблему. У Бергманна есть план по улучшению таких API за счет приспособленных к 2038 году версий проблемных системных вызовов, но эти изменения еще не были применены, за исключением недавно добавленного системного вызова statx() в версии 4.11, которыйзаменит семейство вызовов stat(). В то же время остается немало других системных вызовов, нуждающихся в такой замене.

Дипа Динамани также занимается решением проблем, связанных с ядром. Она начинала в качестве стажера по программе Outreachy и по окончании стажировки продолжила работать над этой задачей. Динамани решила одну из самых сложных проблем, разработав собственный набор патчей для прослойки виртуальной файловой системы, и также планирует заняться другими системными вызовами. Вызов setsockopt(), среди прочих, может представлять особую трудность: его не так-то легко поправить или эмулировать на уровне glibc. Заметный прогресс есть в работе по созданию патчей для модуля device mapper и подсистемы ввода. Бергманн также написал патч для подсистемы video4linux, но он был отклонён и требует другого подхода. Примерно так же обстоят дела со звуковой подсистемой. Другими проблемными компонентами ядра являются система управления ключами и часы реального времени.

Некоторые системные вызовы не получат замены, поскольку для них лучшим решением оказывается эмуляция в библиотеках C — это второе направление в подготовке к 2038 году. Бергманн отметил, что сообщество glibc проделало особенно большую работу в этой области. На уровне библиотек планируется обеспечить полную обратную совместимость. Это означает, что можно будет собирать программы как с 32-битными, так и с 64-битными метками времени, при этом последние можно использовать даже в старых версиях ядра. Другими словами, разработчики glibc ищут решения, которые бы работали на всех платформах и с минимальными искажениями. (Подробности можно узнать из черновика проекта).

Третье направление связано со сборками дистрибутивов, причем настоящий прогресс здесь возможен только после того, как будут решены первые две задачи. По мнению Бергманна, маловероятно, что авторы дистрибутивов все еще будут поддерживать 32-битные системы в 2038 году, так что у них нет причин для беспокойства. Единственным исключением может стать дистрибутив Debian, авторы которого, похоже, заинтересованы в продолжении поддержки, даже несмотря на очевидную трудоемкость этого процесса. В какой-то момент может потребоваться полная пересборка, что едва ли обрадует как авторов, так и пользователей, но это решение, по крайней мере, гарантированно работает. В такой системе ключевым условием является обеспечение совместимости; сейчас в эксплуатацию вводится код, который может быть не приспособлен к наступлению 2038 года, но хочется, чтобы он, по возможности, работал и дальше.

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

В то же время с исправлением некоторых компонентов возникнут трудности, даже когда задачи по подготовке ядра, библиотек C и дистрибутивов будут в основном решены. Многие из этих трудностей связаны с использованием 32-битных значений типа time_t в форматах файлов. Например, cpio сломается, что вызовет определенные проблемы, так как он используется в формате RPM-пакетов. В файловых системах NFSv3, ext3 и XFS тоже будут наблюдаться сбои из-за использования 32-битных меток времени. Первые две системы, вероятно, выйдут из употребления задолго до начала 2038 года, а для XFS уже разрабатываются варианты решений. Наконец, есть множество приложений, пока не попавших в поле зрения разработчиков, а также корпоративных систем, к которым у сообщества нет доступа.

Когда Бергманна спросили, какими инструментами он пользуется в своей работе, он ответил, что основной подход заключается в сборке ядра с полностью удаленными 32-битными типами, отвечающими за представление времени: так можно сразу выявить места, подлежащие правке. В остальном же исправления осуществляются по большей части вручную. Предполагается, что плагины для sparse или GCC могут помочь в решении этой задачи.

В конце выступления Джон Шульц спросил, могут ли наработки сообщества BSD, которое (в некоторых версиях) уже решило проблему 2038 года, помочь Linux. Бергманн ответил, что помощь будет «незначительной». У BSD-дистрибутивов есть то преимущество, что они могут пересобраться с нуля, так что у них нет необходимости поддерживать совместимость с пользовательскими ABI тем же способом. Их опыт по подготовке приложений к 2038 году не лишен ценности, но неизвестно, насколько полезным он окажется для сообщества Linux.

Источник

В чем суть проблемы 2038 года? Это как Y2K?

Проблема 2038 года что это

Проблема 2000 года

Мир приближался к оцепенению, когда приближался 2000 год. Это было не только изменение всех четырех цифр, но также помешало возникновение серьезных проблем для программного обеспечения и программ, разработанных в эпоху с 1960-х по 1980-е годы.

Те, кто забыл о Y2K, или все еще не знают об этом; Y2K была компьютерная ошибка. Ошибка могла бы вызвать проблемы для программного обеспечения и компьютерных программ после даты 31 декабря 1999 года. Y2K также называется « ошибка тысячелетия », так как буква k обозначает килограмм (используется для обозначения номер 1000); таким образом, «2k» представляет 2000 год.

Ошибка 2000 года была проблемой с датами, так как компьютерные программы, разработанные в 20-м веке, использовали двузначный код для года. Например, за 1978 год 19 не было учтено в дате. Только последние две цифры; то есть, 78 представляли год. Причиной короткой формы дат было дорогостоящее хранение данных того времени. Однако эта система дат не будет работать с 1 января 2000 года. Инженеры поняли, что программы и программное обеспечение могут интерпретировать не 00 как 2000, а как 1900. Таким образом, дата 1 января 2000 года будет интерпретироваться как 1 января 1900, по компьютерным программам. Предполагалось, что системы, которые полагаются на точный расчет данных, определенно потерпят неудачу из-за этой неверной интерпретации.

Однако когда приближался 2000 год, компьютерных программ и областей, которые зависели от них, было очень мало и ничтожно мало проблем. Главного беспорядка можно было избежать, просто изменив поле года на 4 цифры вместо 2 цифр. Таким образом, в итоге вся проблема 2000 года оказалась менее катастрофической, чем предполагалось.

В чем проблема 2038 года

Чтобы понять серьезность проблемы Y2K38 или проблемы 2038 года, важно знать, что именно.

Это так называется, потому что проблема 2038 года возникнет 19 января 2038 года. Предполагается, что проблема Y2038 возникнет из-за ограничений 32-разрядных процессоров и систем, которые на них работают.

Исследователи говорят, что в 03:14:07 UTC 19 января 2038 года системы, работающие на 32-разрядных процессорах, не смогут справиться с изменением даты и времени. Компьютеры начали отсчитывать время в секундах с 1 января 1970 года. Но 32-разрядные системы способны рассчитывать только до числа 2 147 483 647 ; таким образом, за время он может рассчитать только эти много секунд. А в 03:14:07 UTC 19 января 2038 года счет достигнет 2 147 483 647 секунд.

Таким образом, вопрос в том, что произойдет, когда тактовая частота 32-разрядных систем превысит порог в 2 147 483 647 секунд? Некоторые предполагают, что эти компьютеры просто сломаются и вообще перестанут работать. В самом деле!?

Конечно, нет! В течение следующих 20 лет (т. Е. До 2038 года) в индустрии компьютеров и программного обеспечения произойдет много изменений. Говорят, что профессионалы в области безопасности данных должны будут изменить методы работы в таких областях, как национальная безопасность, шифрование SSL, устройства Интернета вещей и криптовалюта.

На самом деле, многие новейшие ПК и системы работают на 64-битной платформе. Windows-машины Microsoft работают на 64-битной версии с тех пор, как в 2005 году была выпущена 64-битная версия Windows XP Professional. Даже настольное программное обеспечение Apple OS X работает исключительно на 64-битной версии после того, как Apple выпустила Mac OS X 10.7 Lion в 2011 году. Unix-системы, которые питают веб-серверы и другое серверное оборудование, все еще используют 32-битные системы; большинство из них могут быть обновлены до 64-битных систем с течением времени.

Любопытный случай с видео Gangnam Style

Обновление систем до 64-битных процессоров является доказанным фактом; потому что та же техника была использована YouTube в декабре 2014 года. 3 декабря 2014 года видео южнокорейской поп-звезды Psy «Gangnam Style» побило все рекорды просмотров.Настолько, что количество просмотров превысило 2 147 483 647. Но YouTube, работающий на 32-битных процессорах, не смог рассчитать дальше этого числа, и сайт потерпел крах. Инженеры YouTube смогли быстро решить проблему, обновив систему до 64-битной.

Заключение

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

Единственные компьютеры, которые могут столкнуться с некоторыми проблемами из-за проблемы 2038 года, – это компьютеры со встроенными системами. Многие из этих встроенных систем используются в системах с длительным сроком службы, таких как транспортные системы, некоторые изолированные компьютерные системы и системы контроля устойчивости. В результате встроенные системы нуждаются в полной замене, поскольку их программное обеспечение не может быть обновлено.

Так что, в конечном итоге, нет необходимости паниковать из-за проблемы 2038 года!

Источник

Добавить комментарий

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