ГлавнаяКонтактыКарта сайта
ЕПОС
О компанииКомпьютерная криминалистикаВосстановление информацииЗащита информацииПроизводство и ITСервисНаши разработки

Расследование инцидентов, компьютерная криминалистика, информационная безопасность

Книжная серия Взгляд на жесткий диск изнутри




Архив статей


24.03.1999
«Железная» проблема 2000 года

Вячеслав ОВСЯННИКОВ
ведущий специалист фирмы «ЕПОС»

Проблема 2000 года уже становится избитой темой. Тем более что до ее наступления осталось чуть более 200 дней. Речь идет о том, что в силу ряда причин в компьютерных системах очень широко применяется сокращенное обозначение года – в виде двух цифр. До сих пор это не приводило к путанице: первые две цифры года всегда были «19». С наступлением 2000 года неизбежно наступит путаница в интерпретации значения года. Статьи об этой проблеме изобилуют страшными ужасами последствий наступления 2000 года. Многие после таких статьей начинают считать, что это надуманная проблема. Другие действительно обеспокоены надвигающейся проблемой. К сожалению, основное их внимание, как правило, обращено на устранение проблемы в компьютере. Преобладает мнение, что именно персональный компьютер и является источником проблемы. На самом деле опасность, исходящая непосредственно от компьютера («железа») – это только небольшая часть в общем объеме проблем, связанных с 2000 годом. Более того, эта проблема легко разрешима. Именно проблеме 2000 года, возникающей по вине аппаратных средств, и посвящена данная статья.

В чем суть «железной проблемы»?

Обязательным элементом системной платы компьютера является RTC ("Real-Time Clock" – часы реального времени). Эти часы имеют автономный источник питания и продолжают функционировать, даже если компьютер выключен. При включении компьютера BIOS считывает показания часов реального времени и в дальнейшем осуществляет отсчет времени самостоятельно. Операционная система при загрузке получает текущее время из BIOS и в дальнейшем также ведет самостоятельный отсчет времени. Существует множество приложений, которые самостоятельно ведут отсчет времени или ведут свой календарь. При этом при первоначальной загрузке приложение может получать текущее время от операционной системы, из BIOS или непосредственно из RTC.

К несчастью, изначально в конструкции часов реального времени (Motorola MC 146818A) разработчики отвели место для хранения только двух цифр года (рис. 1).

Регистры часов реального времени

Рис. 1. Регистры часов реального времени

Старшие цифры года (столетие) хранятся в энергонезависимой памяти (CMOS). При загрузке BIOS получает от RTC только 2 цифры года, а столетие (цифры 19 или 20) считывает из CMOS (рис. 2).

Схема взаимодействия

Рис. 2. Схема взаимодействия CMOS-BIOS-операционная система

Несмотря на то, что часы реального времени, в которых значение года хранится в виде 4 цифр, появились еще в 1992 году (Dallas Semiconductor), приведенная на рис. 2 конфигурация и до настоящего времени часто встречается даже в новых компьютерах.

Все это не очень приятные факты. Однако и не повод для паники. Если у вас используются компьютеры с часами реального времени не "Ready 2000", это еще не дает оснований считать, что компьютер не "ready".

Изначально в конструкции часов реального времени было заложено, что за правильное значение столетия отвечает BIOS. Поэтому компьютер, BIOS которого правильно корректирует значение года, является "ready".

Рассматривая вопрос, каким образом BIOS отсчитывает столетия, мы второй раз должны сказать «к сожалению...». К сожалению, далеко не все версии BIOS правильно реагируют на смену столетий. До сих пор в эксплуатации находится большое количество компьютеров, BIOS которых никак не реагирует на смену столетий. В этих компьютерах BIOS только считывает значение столетия из CMOS. Придя на работу 3 января 2000 года и включив такой компьютер, вы узнаете, что наступил 1900 год. Забегая вперед, замечу, что это еще не самая большая проблема. В конце концов, 3 января можно установить вручную показания системных часов на 3 января 2000 года, и в дальнейшем компьютер с таким BIOS будет работать правильно.

Однако существуют версии BIOS, которые вообще не опрашивают значение столетия, а всегда возвращают 19. К таким, в частности, относятся версии BIOS от Award в период с апреля 1994 г. по май 1995 г. Против происков таких BIOS ручная установка даты не спасает.

И, наконец, существует множество вариантов «продвинутых» BIOS, в которых полученное от часов реального времени значение года проверяется на корректность. Однако корректным считается значение года больше 1980. Получив от часов реального времени значение 00, BIOS считает такое значение некорректным и устанавливает значение 1980 г. Любопытно, что в большинстве случаев устанавливается дата 1 апреля 1980 г. Может быть, это просто дружеская шутка? Тем не менее это не самый лучший вариант BIOS, с которым хотелось бы иметь дело в ближайшие, по крайней мере, 300 дней.

Иногда встречаются и другие варианты логики работы BIOS. Как вам, к примеру, нравится дата «нулевой день января 1900 г.»?

Справедливости ради следует заметить, что большинство компьютеров, купленных в последние год-два, если и не имеют Ready 2000 RTC, то имеют Ready 2000 BIOS. Такой BIOS, получив при загрузке от часов реального времени значение 00, увеличивает значение столетий в регистре столетий CMOS с 19 на 20. Таким образом, проблема 2000 просто не возникает. Счастливые обладатели таких компьютеров могут считать, что, по крайней мере, аппаратных проблем с новым тысячелетием у них нет.

Роль операционной системы

Операционная система является конечной инстанцией при разрешении аппаратных проблем, связанных со сменой столетий. Именно операционная система в большинстве случаев сообщает приложениям текущее время и дату. Последние версии операционных систем корректно обрабатывают смену дат с 31.12.99 на 01.01.2000. Причем это относится не только к операционным системам, получающим дату из BIOS (например, Windows 98, Windows NT 4.0), но и к операционным системам, получающим дату непосредственно от RTC (например, Unix, Linux). Безусловно, это может не относиться к их более ранним версиям. Однако для большинства операционных систем существуют «заплатки», корректирующие готовность операционной системы (или ее отдельных составляющих) к смене столетий. Что же касается многочисленных приложений, используемых в повседневной жизни (бухгалтерские программы, базы данных и т.п.), то вопрос совместимости с 2000 годом в каждом случае требует отдельной проверки.

Отложенные проблемы

Третий раз «к сожалению...». К сожалению, «железные» проблемы не заканчиваются после первого января 2000 г. Существует опасность того, что какие-то из часов в их длинной цепочке (RTC, BIOS, OS, приложения) неправильно определят високосность 2000 года. Тогда после 28 февраля (а это произойдет очень скоро) потеряется один день. Год считается високосным, если он делится на 4 без остатка, но не делится без остатка на 100. Однако если он делится без остатка на 400, то это високосный год. Таким образом, 2000 год является таким високосным годом, который бывает раз в 400 лет. Встречаются отдельные приложения, неправильно определяющие, что 2000 год является високосным. Тем не менее, очень редко хаос в подсчете дней наступит по вине аппаратных средств. Часы реального времени, не являющиеся «Ready 2000», как мы уже выяснили, не содержат регистра столетий. Соответственно, в них, как правило, применяется сокращенный алгоритм: если порядковый номер года делится без остатка на 4, то год считается високосным. Для такого алгоритма 2000 год будет правильно определен как високосный. Тем не менее обольщаться не стоит. Автору приходилось тестировать 386SX, BIOS которой определил, что 2000 год не является високосным.

Существуют и другие проблемы, которые возникнут после 1 января. В частности, если BIOS не учитывает столетия и всегда возвращает значение 19, то "Ready 2000" Windows 98 целый год будет каждый день корректировать дату, но 1 января 2001 года не распознает значение 01 как проблему 2000 года и сбросит показания часов на базовый 1980 год. Не распознает она и возвращаемые «продвинутыми» BIOS значения, лежащие в диапазоне действительных, по мнению Windows, дат (начиная с 1980 г.). Следующий очень серьезный удар наступит в 2080 году. С этого года и 1980 и 2080 годы будут считаться действительными, и просто не существует методов исправления ошибки, если в RTC значение текущего года не будет сохраняться в формате "yyyy". Кажется, что это очень далеко. Но ведь мы не знаем, до каких пор производители материнских плат будут комплектовать их реликтовыми RTC.

Что же делать?

Не паниковать.

Не откладывая в долгий ящик, проверить все компьютеры на совместимость с 2000 годом. Для этого существуют программы, в том числе и свободно распространяемые. Получить их можно через Интернет. В частности, на узле www.mitre.org приведены ссылки на очень большое количество узлов, с которых можно получить программы для тестирования, в том числе и бесплатно распространяемые, и даже для программного исправления ошибки. Конечно, не все эти программы равноценны. Наилучшим выбором, по всей видимости, будет программа YMARK2000. Эта программа разработана NSTL (National Software Testing Laboratories) и считается стандартом de facto для проверки готовности к 2000 году компьютеров на платформе Intel. На узле NSTL приводится список материнских плат, полностью совместимых с 2000 годом. Такие платы считаются "Year 2000 Capable" – NSTL Certified. Основанием для отнесения материнской платы к данной категории является выполнение всех тестов YMARK2000. Выделить стоит, наверное, также тестовую программу AMI200 фирмы AMI, хотя хороших программ очень много, можно выбрать по своему вкусу. Как правило, такие программы есть также в фирмах, в которых вы покупали компьютеры. Ряд фирм за весьма умеренную плату оказывает услуги по квалифицированной оценке готовности аппаратных средств к 2000 году.

Устранить выявленные проблемы. Есть несколько путей устранения проблемы. Не будем рассматривать самый простой и действенный – замену компьютера. Тогда останется только 3 варианта: замена BIOS, программный драйвер и дополнительное устройство. Замена BIOS является лучшим решением. Однако проблема 2000 чаще всего встречается в устаревших платах, которые уже давно не поддерживаются производителями. Соответственно, очень сильно рассчитывать на новый BIOS не приходится. Программный драйвер, как правило, – это относительно дешевое решение. Однако и самое ненадежное. Самым надежным решением будет установка в компьютер дополнительной платы. Классический пример – Year 2000 BIOS Enabler производства фирмы AMI. Year 2000 BIOS Enabler – это плата, вставляемая в свободный ISA слот (рис. 3).

Плата Year 2000 BIOS Enabler

Рис. 3. Плата Year 2000 BIOS Enabler производства фирмы AMI

Эта плата перехватывает обращение операционной системы к BIOS и проверяет возвращаемое ею значение года. Если BIOS возвращает значение 00 или 80, то Enabler возвращает значение 2000. Дополнительно Enabler записывает в CMOS правильное значение столетия. Более того, Enabler решает также и проблему вычисления високосного года. Enabler предназначен для работы под управлением MS-DOS, PC-DOS, DR-DOS, OS/2, Windows 3.x, Windows 95, Windows NT 3.0 и выше. Для других операционных систем Enabler может не корректировать ошибку. В частности, UNIX не обращается к BIOS для получения даты и, соответственно, Enabler не будет работать. AMI Year 2000 BIOS Enabler тестирован для решения проблемы 2000, связанной с некорректной работой BIOS и RTC, многими признанными тестами, в том числе и рекомендованными выше NSTL Ymark2000 и AMI2000. При относительно низкой стоимости (порядка $70) и высокой надежности работы такая плата будет самым эффективным способом решения проблемы 2000 года в аппаратном обеспечении.

После проверки всех компьютеров и установки, где необходимо, рекомендованных плат проблема 2000 будет решена?

Нет, конечно! Останется большая часть проблем. Опасность проблемы 2000 заключается в том, что за последние годы в любой организации накопились очень большие базы данных. В этих базах огромную долю занимают даты. В большинстве случаев даты хранятся в формате с представлением года двумя цифрами. После наступления 2000 года наступит путаница как с интерпретацией значения года, так и, самое главное, с обработкой этих данных. Ситуация усугубляется тем, что в эксплуатации находится значительное количество программ, составленных без учета 2000 года. В этих программах даты хранятся и обрабатываются в сокращенном формате. Более того, сведения о датах могут храниться как в формате даты, так и в числовом или символьном формате. Интерпретация даты и их обработка в этом случае полностью зависят от алгоритма, заложенного разработчиком. Чаще всего эти программы перестанут корректно работать после 2000 года. Многие программы ведут свои календари. При этом далеко не все из них корректно вычисляют високосные годы. Календари в программе с представлением года двумя цифрами не в состоянии правильно определить день недели после 2000 года. Общепринятой является практика для архивных файлов назначать имена, в которые составной частью входит дата архива. Везде год представляется двумя цифрами. Это краткое перечисление только очень небольшой части проблем, которые необходимо решить для подготовки к 2000 году.

Рассмотренные же в статье решения, относящиеся к аппаратным средствам, устраняют только одну проблему: получение правильного значения текущей даты. Если она не решена то сомнительно, что какая-либо система будет функционировать правильно. Однако, решив ее, нужно немедленно приступать к решению проблемы 2000, связанной с недостатками программного обеспечения.

Тех, кто не принимает мер по подготовке к 2000 году, можно понять. Законы Мерфи гласят, что 80% проблем решаются сами собой, а остальные 20% вообще не разрешимы. Но в данной ситуации лучше все же немного подсуетиться. И начинать надо немедленно, с решения «железных» проблем. Установив своевременно на устаревшие компьютеры платы AMI Year 2000 BIOS Enabler, вы получите существенный выигрыш по времени для решения других проблем.


Поделиться информацией