Константин Пшеничный
В ПК значения даты и времени задаются микросхемой часов реального времени RTC (Real Time Clock), которая позволяет установить их значения при первом запуске системы, а затем поддерживать автоматически. Правда, RTC обслуживает только две последние цифры в поле текущего года, поэтому при переходе от 1999 к 2000 году первые две цифры останутся неизменными, и значение года окажется равным 1900 или 1980 (в зависимости от того, какой год принят за начало отсчета в конкретной реализации RTC).
При каждой загрузке ОС устанавливает значения системных времени и даты на основании показаний RTC, используя функции Int1a BIOS. Например, при помощи функции BIOS “Прочитать дату из RTC” ОС может установить системную дату при загрузке, а благодаря другой - “Установить дату в RTC” - модифицировать информацию в RTC (например, при завершении работы).
Механизм модификации даты/времени в ПК
От того, насколько правильно написан обработчик прерывания BIOS, зависит одно из возможных решений проблемы Y2K. Например, до середины 90-х годов встречались BIOS, у которых при вызове функции “Прочитать дату из RTC“ значение столетия было константой и равнялось 19. Поэтому в ПК с таким BIOS 2000 год не наступит никогда. Например, компания Award Software (www.award.com) заявила, что все AwardBIOS, выпущенные до 31 мая 1995 г., имеют этот недостаток.
В начале 90-х годов в энергонезависимой памяти (CMOS RAM) был выделен байт для хранения информации о текущем столетии (Century Byte - 32h байт). Таким образом, параметр столетия стал переменной и ответственность за правильность представления даты переложена на BIOS. Теперь даже без усовершенствованных обработчиков прерывания RTC такой BIOS позволяет установить правильную дату вручную (например, через Setup - программу установки параметров BIOS или используя средства операционной системы).
Что же представляет собой усовершенствованный BIOS?
Во-первых, при включении питания определяется, произошел ли переход к новому столетию. Если да - то значение Century Byte устанавливается равным 20.
Во-вторых, те же действия проводятся при каждом вызове функции “Прочитать дату из RTC”.
Очевидно, что прямое обращение к RTC минуя BIOS даст ошибочный результат. Однако эту проблему можно решить, используя дополнительную плату расширения. Подробнее о ней будет рассказано ниже.
Надо признать, что большинство рядовых пользователей смогут избежать последствий проблемы Y2K на своих ПК, если вручную установят “правильную” дату в новом году, используя либо средства операционной системы, либо программу BIOS Setup. Сложнее дело обстоит со встроенными системами, использующими в своем контуре ПК. Однако существует достаточно много консультационных центров (www.ptti.gov.ru/gk-doc/2000/index.htm) и различного тестового программного обеспечения (www.mitre.org), а самое главное, еще есть время до 2000 года, так что каждый сможет выбрать необходимые меры защиты.
На уровне ОС для ПК проблема Y2K решена довольно давно. Полноформатное хранение даты, в том числе и в качестве атрибутов файлов, было заложено уже в самые первые версии MS-DOS. Точнее, там предусмотрено хранение года в диапазоне 1980 - 2099. Тем не менее, по заявлениям компании Microsoft, все версии MS-DOS, до пятой включительно, несовместимы с Y2K.
Доступные средства для тестирования
Сейчас существует огромное количество программ тестирования, как коммерческих, так и свободно распространяемых. В частности, на узле www.mitre.org приведены ссылки на множество страниц, с которых можно получить программы для тестирования, в том числе и свободно распространяемые. Наилучшим выбором, по всей видимости, будет программа YMARK2000 (y2000.exe), разработанная Национальной лабораторией тестирования программного обеспечения National Software Testing Laboratories - NSTL (www.nstl.com/index.html), независимой международной организацией с почти двадцатилетней историей. Эта программа считается де-факто стандартом для проверки готовности к 2000 году компьютеров на платформе Intel. Кроме того, на узле NSTL приводится список системных плат, полностью совместимых с 2000 годом.
Еще хотелось бы упомянуть программы DOSCHK.EXE компании Saphena Computing (http://ourworld.compuserve.com/homepages/saphena/year2000.htm) и AMI2000.EXE компании American Megatrends (www.megatrends.com), одного из ведущих производителей BIOS. Кстати, все эти программы компания American Megatrends использует для тестирования своих плат.
На сервере Российской национальной библиотеки (www.nlr.ru/2000/2000.htm) находится документ “Методические рекомендации по решению "Проблемы 2000"”, разработанный согласно распоряжению Правительства РФ №671-р от 30 мая 1998 г.
Методы модернизации
Самый простой способ избежать всех проблем - установить новую системную плату с Y2K-совместимой микросхемой RTC, которая напрямую обновляет Century Byte. Но такие платы появились сравнительно недавно и их очень немного.
Близким по смыслу решением может быть замена BIOS на Y2K-совместимый. Компания American Megatrends заявила, что начиная с версии 6.31.01 AmiBIOS полностью Y2K-совместим. Другой крупнейший производитель BIOS, компания Phoenix Technologies, считает готовой к Y2K свою версию 4.0.5 PhoenixBIOS.
Можно также использовать платы-расширения BIOS. При включении питания BIOS системной платы проводит так называемую процедуру ROM-scan, которая заключается в поиске в определенном адресном пространстве модулей со своим собственным внутренним программным обеспечением. При обнаружении такого модуля по известной сигнатуре BIOS передает ему управление, т. е. происходит замена стандартных обработчиков прерываний BIOS на обработчики, учитывающие все особенности конкретных модулей.
НИИСИ РАН разработал ISA-плату для работы в операционных системах MS-DOS, PC-DOS, Dr.DOS, OS/2, Windows 3.1, Windows 95, Windows NT 3.5 и выше. Данная плата заменяет функцию BIOS для работы с RTC на Y2K-совместимую. Более того, использование платы позволит решить проблемы с приложениями, работающими с RTC напрямую. Таким образом, проблема Y2K решается на аппаратном уровне без замены микросхемы BIOS.