Ваше местоположение в сети:
Рубрика:

Системное время компьютера

Разделы сайта:

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

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

Но какие все-таки ошибки могут возникать при проблеме 2000? И грозит ли нам подобное в будущем?

Разные часы

computer time

Для начала следует сказать, что в компьютере есть разные часы. Есть аппаратные (которые идут всегда) и программные (которые работают только когда компьютер включен). Для того, чтобы аппаратные часы работали даже при отключенном питании, в компьютере имеется небольшая батарейка (CMOS Battery). Таким образом, при включении система компьютера берет время из этих часов, после чего уже может сама отсчитывать время. Если вы изменяете время системы, она сразу корректирует и время аппаратное. Заметим, что аппаратные часы хранят локальное время, а не по Гринвичу.

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

Ошибка 2000

Откуда взялась ошибка 2000? Да просто разработчики операционной системы DOS не учли, что для хранения даты может понадобиться больше двух цифр. Поэтому при наступлении 2000 года система могла начать считать, что наступил год 1900. Или, как вариант, год 1980, если система отсчитывает от него.

К каким ошибкам в реальности это приводило? Нет, техника не сошла с ума. Атомных взрывов не было. А вот некоторые программы бухгалтерского учета действительно перестали работать корректно, в том числе, первые версии . Просто попытка посчитать итоги на 2000 год приводила к тому, что система считала их на 1900 и выдавала нули. В более продвинутых была возможность задать "год начала столетия", и, тем самым, все-таки получить сдвинутый рабочий интервал в 100 лет.

Я лично столкнулся с проблемой 2000. Имевшаяся у меня версия MikTeX больше не могла устанавливаться. Для успешной установки необходимо было временно установить время до 2000 года. Так что, хоть ничего безумного и не произошло, с неудобствами пользователям столкнуться пришлось. Но тогда еще не так активно использовались компьютеры! Что же ждет нас в будущем?

Ошибка 2038

А вот эта проблема приходит к нам из Unix-подобных систем. Изначально в них было заложено 32-битное время, измеряемое в секундах, с отсчетом от 01.01.1700 - года принятия Григорианского календаря (см. комментарии, там исправление). При этом в переменной также используется знак, поэтому на деле используется только 31 бит, что приводит к тому, что время закончится в 03:14:07, вторник, 19 января 2038 года.

Что произойдет в этот момент на 32-битной Unix-системе? Время станет отрицательным. Компьютер попытается записать в аппаратные часы год 1700 (или еще меньший), биос этого не примет и запишет 1900 или 1980. Так или иначе, время снова закольцуется, приводя к сбою в программах, этого не ожидающих.

И дело даже не только в Unix-системах. Многие программы также используют такой стиль хранения времени, например, дата файла, находящегося в zip-архиве, хранится именно так. Так что проблемы будут у всех. А вот серьезность бедствия предсказать пока сложно.

Ошибка 2100

А здесь уже дело в аппаратных часах современных компьютеров. В основном, они сейчас рассчитаны, что максимальный год - это 2099. Так что даже если операционная система понимает большее время, биос запишет в свои часы что-нибудь типа 1980.

Кстати, эту уязвимость уже использовали хакеры для взлома Windows Vista. Перед установкой предлагалось установить время на конец 2099 года. В таком случае при прибавке 30 дней (периода, в течении которого можно использовать Висту без активации) получалась странная дата, что приводило к отключению таймера.

Ошибка 10000

И такое бывает. В программах, использующих 4 цифры для обозначения года. Например, во всех текущих версиях 1с. Если предположить, что они все еще будут использоваться через восемь тысяч лет, что с наступлением круглой даты проблемы неизбежны.

И напоследок...

Ошибка 292 277 026 596

А это уже совсем из разряда фантастики. В современных Unix-системах используется 64-битное время. Оно кончится лишь в 15:30:08, воскресенье, 4 декабря 292277026596 года. Доживем?

 

Надеюсь, я достаточно прояснил, как устроено системное время компьютера. Если есть вопросы, пишиьте!

← Контроль выполнения задачДефекты фотографии →
comments powered by Disqus