Обязательным элементом системной
платы компьютера является RTC ("Real-Time Clock" - часы реального времени). Эти часы имеют автономный источник питания и продолжают функционировать даже если компьютер выключен.
При включении компьютера BIOS считывает показания часов реального времени и в дальнейшем осуществляет отсчет времени самостоятельно. Операционная система при загрузке получает текущее время из BIOS и в дальнейшем также ведет
самостоятельный отсчет времени. Существует множество приложений, которые самостоятельно ведут отсчет времени или ведут свой календарь. При этом при первоначальной загрузке приложение может получать текущее время от операционной
системы, из BIOS или непосредственно из RTC.
К несчастью, изначально в конструкции часов реального времени (Motorola MC 146818A) разработчики отвели место для хранения только двух цифр года (рис. 1).
Старшие цифры года (столетие) хранятся в энергонезависимой памяти (CMOS). При загрузке BIOS получает от RTC только 2 цифры года, а столетие (цифры 19 или 20) считывает из CMOS (рис. 2).
Не смотря на то, что часы реального времени, в которых значение года хранится в виде 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, с которым хотелось бы иметь дело.
Иногда встречаются и другие варианты логики работы BIOS. Как Вам, к примеру, нравится дата "нулевой день января 1900 г."?
Справедливости ради следует заметить, что большинство компьютеров, купленных в последние год-два если и не имеют Ready 2000 RTC, то
имеют Ready 2000 BIOS. Такой BIOS, получив при загрузке от часов реального времени значение 00, увеличивает
значение столетий в регистре столетий CMOS с 19 на 20. Таким образом, проблема 2000 просто не возникает.
Счастливые обладатели таких компьютеров могут считать, что, по крайней мере, аппаратных проблем с новым тысячелетием у них нет.
Операционная система является конечной инстанцией при разрешении аппаратных проблем, связанных со сменой столетий. Именно
операционная система в большинстве случаев сообщает приложениям текущее время и дату.
Последние версии операционных систем корректно обрабатывают смену дат с 31.12.99 на 01.01.2000. Причем
это относится не только к операционным системам, получающим дату из BIOS (например, Windows 95, Windows 98), но
и к операционным системам, получающим дату непосредственно от RTC (например, Unix, Linux).
Безусловно, это может не относиться к их более ранним версиям. Однако для большинства
операционных систем существуют "заплатки", корректирующие готовность операционной системы
(или ее отдельных составляющих) к смене столетий. Что же касается многочисленных приложений,
используемых в повседневной жизни (бухгалтерские программы, базы данных и т.п.), то
вопрос совместимости с 2000 годом в каждом случае требует отдельной проверки.
Существуют и другие проблемы, которые возникнут после 1 января. В частности, если BIOS не учитывает
столетия и всегда возвращает значение 19, то "Ready 2000" Windows-98 целый год
будет каждый день корректировать дату, но 1 января 2001 года не распознает значение 01 как проблему 2000 года и
сбросит показания часов на базовый 1980 год. Не распознает она и возвращаемые "продвинутыми" BIOS значения,
лежащие в диапазоне действительных, по мнению Windows, дат (начиная с 1980г).
Есть несколько путей устранения проблемы:
- 1. Замена компьютера
- 2. Модернизация компьютера
- 3. Замена BIOS
- 4. Установка программного драйвера
- 5. Установка дополнительного устройства (аппаратное решение)
Не будем рассматривать самый простой и действенный способ - замену и модернизацию компьютера.
Тогда останется только 3 варианта: замена BIOS, программный драйвер и дополнительное устройство.
Замена BIOS является лучшим решением. Необходимую информацию для выполнения этой операции можно найти на сайтах:
http://www.ping.be/bios/
http://ixbt.stack.net/mainboard/biosfaq.html
Однако проблема 2000 чаще всего встречается в устаревших платах,
которые уже давно не поддерживаются производителями. Соответственно, очень сильно рассчитывать на новый BIOS
не приходится. Программный драйвер, как правило, это относительно дешевое решение. Третий вариант решения - установка в компьютер дополнительной
платы. Классический пример - Year 2000 BIOS Enabler, производства фирмы AMI. Year 2000 BIOS
Enabler - это плата, вставляемая в свободный ISA слот. Эта плата перехватывает обращение
операционной системы к BIOS и проверяет возвращаемое ею значение года. Если BIOS возвращает значение 00 или 80, то Enabler
возвращает значение 2000. Дополнительно к этому, Enabler записывает в CMOS правильное значение столетия. Более
того, Enabler решает также и проблему вычисления високосного года. Enabler предназначен для работы под
управлением MS-DOS, PC-DOS, DR-DOS, OS/2, Windows 3.x, Windows 95. Для других операционных систем
Enabler может не корректировать ошибку. В частности, UNIX не обращается к BIOS для получения даты и, соответственно, Enabler
не будет работать. AMI Year 2000 BIOS Enabler тестирован для решения проблемы 2000, связанной с некорректной работой BIOS и
RTC, многими признанными тестами, в том числе и NSTL Ymark2000 и AMI2000. При относительно низкой стоимости (порядка
70 USD) и высокой надежности работы такая плата будет достаточно эффективным способом решения проблемы 2000 года в аппаратном обеспечении.
Однако, ознакомившись с представленными материалами, считается практически всегда
неразумным использование аппаратных (в виде дополнительных плат) методов решения
"Проблемы 2000" на IBM PC совместимых ПК:
- Трудно придумать реальные ситуации, в которых не работали бы программные
методы решения (в виде TSR или драйверов ), и работали бы аппаратные решения.
- Аппаратные решения сравнительно дороги (особенно по сравнению с 0-ой ценой, которую в нашей стране принято платить за ПО), и
при этом не являются панацеей.
- Аппаратные решения могут (хотя и редко) приводить нарушению работы аппаратуры
и/или программного обеспечения, т.к. занимают часть адресного пространства выше 640 Кб, причем
если произойдет конфликт на уровне аппаратуры, то он будет действовать и на ОС, не пользующиеся
BIOS, т.е. те ОС, для которых коррекция "Проблемы 2000" при помощи BIOS Extension практически не работает.
- Аппаратные решения занимают ISA слот, да и наличие лишнего аппаратного компонента не повышает общую надежность.
- Аппаратные решения, не имеющих собственных RTC (таких большинство), не исправляют ряд достаточно часто встречающихся ошибок.
- Аппаратные решения почти полностью бесполезны для ОС, не пользующихся BIOS для доступа к RTC.
Единственный толк для таких систем от аппаратных решений - установка корректной даты при загрузке,
но как раз перезагрузка для большинства таких систем - редкое явление
|