Одна из наиболее часто обсуждаемых в настоящее время не только в компьютерной, но и широкой прессе тем – обеспечение корректной работы компьютеров и программ при переходе в новый век. Отметим в этой связи два момента, которые не всегда точно отражаются в печати:
- частое упоминание об ошибке 2000 года не совсем корректно, поскольку источником проблемы является не ошибка в обычном смысле этого слова, а неверное архитектурное решение, принятое на ранних этапах создания компьютеров и казавшееся в то время разумным;
- проблемы могут возникнуть не только в таких удаленных от рядового пользователя системах, как банковские программы, комплексы управления атомными станциями, прогнозы погоды и так далее, но и на любом рабочем месте.
Попробуем разобраться в этом вопросе подробнее. Известно, что в основе проблемы ошибки, названной Millenium Bug (Y2K), лежит двузначное представление года в памяти компьютера. Работая сегодня с мощными персональными компьютерами, оснащенными десятками мегабайт оперативной и гигабайтами дисковой памяти, трудно себе представить, что еще тридцать лет назад так были оснащены только немногие и самые дорогие системы, количество которых в мире было весьма ограничено.
Немного истории
Прародитель современных персональных компьютеров появился в 1975 г., когда компания Micro Instrumentation and Telemetry System (MITS) выпустила в продажу первый в мире набор для сборки мини-компьютера в домашних условиях «Altair–8800». Альтаир имел в качестве устройства ввода набор тумблеров и всего 256 байт оперативной памяти. Увеличив оперативную память до четырёх килобайт, Полу Аллену и Уильяму Гейтсу удалось создать интерпретатор языка Basic для Альтаира. А в 1976 г. Гарри Килдол основал компанию “Digital Research”, выпустившую первую операционную систему (ОС) для ПК на основе микропроцессора Intel 8080 CP/M. Естественно, что при весьма ограниченных ресурсах ПК и значительной стоимости оперативной памяти, экономия последней выходила на первое место и закладывать четырехзначное представление года в программы казалось непозволительной роскошью.
Через несколько лет в 1980 г., когда фирма IBM, обеспокоенная стремительными успехами молодой компании Apple, разработала собственный ПК IBM PC, в нём год также представлялся всего двумя цифрами. IBM PC обладал открытой нелицензируемой архитектурой (в отличие от Apple), что во многом определило появление многочисленных клонов, именно поэтому практически во всех IBM PC совместимых компьютерах, выпущенных до 1995 г., системные часы начинают отсчет с 1980 г. Таким образом, год, представленный двумя нулями на конце, для такого ПК будет восприниматься как год 1980.
С тех пор персональные компьютеры значительно изменились. Современные «персоналки» базируются на 32 и 64-битной архитектуре (сравните 8 бит IBM PC), а по оснащению памятью и периферией давно опередили «большие» компьютеры того времени. Компоненты компьютеров значительно подешевели и стали доступны более широкому кругу потребителей. Развитие процессоров, операционных систем и программ всегда шло по принципу совместимости с предыдущими моделями, так называемая «совместимость сверху вниз», поэтому многие проблемы, заложенные на заре возникновения компьютеров вместе с «совместимостью», переходили в следующие версии и поколения программ.
В начале 90-х производители программного и аппаратного обеспечения, подстёгнутые подготовкой долговременных маркетинговых планов, начинают бить тревогу. Организуется международный некоммерческий консорциум, посвященный проблемам 2000 года. Именно с этого времени проблеме начинает уделяться самое пристальное внимание всех тех, кто так или иначе связан с компьютерными технологиями.
Где в компьютере могут возникнуть проблемы
Аппаратная часть
Ошибки, связанные с некорректным определением года, могут содержаться в программе, обеспечивающей функционирование всех узлов системы на аппаратном уровне. Такая программа называется BIOS (сокращение от английской аббревиатуры «базовая система ввода – вывода»). В 1995 г. все основные производители аппаратного обеспечения объявили о поддержке совместимости своих систем с проблемой 2000 года. До этой даты год представлялся в памяти двузначным числом, первые же две цифры всегда были 19. Для коррекции сбоев и ошибок, связанных с датами, год 00 автоматически переводится в некоторый «базовый год». В IBM PC совместимых компьютерах такой датой является 1980 год (год основания Microsoft или год начала разработки IBM PC). В других системах это могут быть совершенно другие значения, так, например, в UNIX системах таким годом может быть 1975 и другие. Таким образом, следующий день за 31.12.1999 в IBM PC совместимых системах установит системный календарь в 01.01.1980.
Алгоритм определения високосного года
Високосный год определяется с помощью простого правила: год является високосным, если он делится на четыре без остатка, но не делится без остатка на 100. В то же время существует специальный случай, когда год делится без остатка на 400, он является високосным. Таким образом, 2000 год является особым високосным годом, который случается раз в 400 лет.
Специальные значения даты
В некоторых приложениях используются особые значения в поле даты, означающие специальные команды, применяемые к дате. Так, к примеру, появление в поле значения 9.9.99 могло означать в некой программе, что данные не устаревают и не изменяются и т.п. В каждом конкретном случае такие специальные значения в полях определялись разработчиком и при недостаточной документированности программ обнаружить и исправить такие ошибки практически невозможно.
Программное обеспечение
Если в предыдущих случаях проблема контролируется производителями аппаратных средств, то есть относительно узким кругом компаний, то ошибки, которые могут возникнуть в программной части, практически непредсказуемы, учитывая количество и уровень документированности программ, особенно написанных пользователями.
К чему может привести Millenium Bug
Приведем несколько примеров возможных проявлений проблемы 2000 года.
Базы данных
Как правило, фирмы — производители систем управления базами данных (СУБД) публикуют список протестированных версий и необходимых исправлений для обеспечения готовности своих программ к 2000 году. Но главная опасность кроется в программах, разработанных для этих СУБД. Банки данных – это достаточно сложные системы, включающие в себя большое количество программ для ввода, корректировки, обновления данных, системные программы, следящие за оптимальным хранением и защитой данных, проверкой связей между базами, резервным копированием, очисткой баз от устаревших или неактуальных данных и так далее. Этот комплекс программ и структура баз данных являются объектом охраны авторских прав, то есть, говоря о базах данных, в большинстве случаев речь идет именно о таких комплексах. Совершенно очевидно, что неверная интерпретация 2000 года может привести к некорректным вычислениям в программах комплекса. Вероятно нарушение связей в реляционных базах из-за неверной их индексации. Автоматическая оптимизации, репликация, резервное копирование таких баз в худшем случае может привести к нарушению связей и потере данных.
Общесистемные программы
Существует множество служебных и системных программ, проверяющих целостность файловой системы, антивирусные программы и так далее. В таких программах обычно производится проверка на корректность даты создания файла и дата последнего доступа (файловые системы UNIX, HPFS OS/2, NTFS Windows NT, FAT32 Windows 9X). Очевидно, что при анализе файловой системы в таких ОС, если они не поддерживают четырёхзначного представления года, разница между датой последнего доступа к файлу и датой его создания будет отрицательна (то есть файл читался раньше, чем был создан!). Анализирующая программа может решить, что это ошибка файловой системы и попытается скорректировать её, что может привести к непредсказуемым результатам.
Целый класс интеллектуальных контроллеров имеет аппаратно встроенные программы управления. Примером являются хост–адаптеры SCSI (Small Computer System Interface), аппаратные RAID — контроллеры дисковых массивов и др. Ошибка обработки даты в таких системах может серьёзно повлиять на работу системы в целом, вплоть до потери данных.
И, наконец, весьма распространенная проблема, с которой могут столкнуться многие системные администраторы – это проблема архивации и восстановления данных. В таких системах используются схемы автоматического циклического резервного копирования, иногда очень тесно интегрированные с аппаратной частью устройства копирования. Ошибка обработки даты в таких системах может привести к потере данных и (или) некорректному восстановлению их, что может вызвать значительные финансовые потери.
Установка программного обеспечения
Одна из ловушек, подстерегающих пользователей, может проявиться при установке нового программного обеспечения на системы, которые протестированы и удовлетворяют требованиям 2000 г.
Современное ПО проектируется в основном с помощью инструментальных средств разработки, созданных третьими фирмами. В набор таких средств, кроме собственно компилятора, входят библиотеки и модули исполнения (Run Time), дополнительные и сервисные модули, динамически загружаемые библиотеки (DLL). Все эти компоненты тесно взаимодействуют с операционной системой, иногда замещая и (или) расширяя функции ОС. Часто в программах установки закладывается функция копирования и интегрирования в систему необходимых компонентов, включая Run Time модули и системные DLL, необходимые для корректной работы программы. Часто программы установки либо переписывают файлы безусловно, либо предлагают пользователю выбор – оставить или переписать существующий файл. При этом задается вопрос, ответить на который нелегко даже искушенному пользователю, а неверный выбор может привести к замене библиотек в уже протестированной системе.
Что сделать, чтобы избежать проблем 2000 года
- Пользуйтесь только лицензионными программами. Практически все производители программного обеспечения протестировали свои программы на совместимость с 2000 годом, предоставляют легальным пользователям бесплатные исправления программ, оперативную техническую поддержку и консультации. В ряде случаев может потребоваться замена устаревшего ПО на более современное, в этом случае легальным пользователям предоставляются значительные скидки. При покупке новых программ убедитесь, что они удовлетворяют требованиям 2000 года, обычно такие программы маркируются знаком “2000 Year Ready”.
- Проведите инвентаризацию аппаратного парка и убедитесь, что используемые компьютеры не содержат неисправимых ошибок 2000 года. Во многих случаях в устаревших системах бывает достаточно произвести обновление программ BIOS. Если аппаратура не поддерживает возможности обновления, не спешите списывать и выбрасывать старый компьютер на свалку. Многие фирмы уже выпустили утилиты, исправляющие такие ситуации, причем некоторые из них совершенно бесплатны. Для ОС Windows NT 4.0 в 1998 году выпущен пакет исправлений Service Pack 4, который корректирует ошибки 2000 года даже в системах, где в аппаратной части (в BIOS) содержится Millenium Bug. В крайнем случае, можно изменить роль компьютера в вычислительной сети, например, использовать его как интеллектуальный терминал (thin client) для подготовки документов.
- Необходимо провести полную инвентаризацию и проверку программного обеспечения. Списки программ, протестированных на соответствие и рекомендации по их исправлению, вы можете найти на страницах компаний в Интернете или получить консультации в самой компании. Замените нелицензионное и устаревшее ПО, установите последние исправления операционных систем и программ. Постарайтесь свести к минимуму разнородность используемого ПО и операционных систем – это позволит свести к минимуму затраты на их сопровождение и повысить эффективность работы ваших системных администраторов. Для средних и крупных сетей используйте сетевые системы управления и инвентаризации ПО, например System Manager Server 2.0 фирмы Microsoft.
- Проверьте базы данных, форматы записей в них, регламент проверки корректности данных, программы подготовки и использования данных и так далее. Убедитесь, что все составляющие комплекса правильно обрабатывают даты и хранят корректные значения. Для этого можно воспользоваться инструментом третьих фирм или обратиться к поставщику конкретного программного продукта.
- Особое внимание следует обратить на разрабатываемые собственные программы. Во-первых, следует убедиться, что средства разработки обеспечивают полную совместимость с 2000 годом, не содержат в дистрибутивных файлах исполняемых библиотек и других системных модулей, нарушающих эту совместимость. Необходимо также разработать комплекс мер, исключающий возможные проблемы при установке вашего программного обеспечения на непроверенные компьютеры.