MS-DOS для программиста© Александр Фролов, Григорий ФроловТом 18, М.: Диалог-МИФИ, 1995, 254 стр. 6. Драйверы
Если бы все программы обращались для обмена данными непосредственно к портам периферийных устройств компьютера, программирование превратилось бы в чрезвычайно сложную задачу. В самом деле, во всем мире выпускаются десятки модификаций видеоконтроллеров, принтеров, контроллеров диска и другой аппаратуры, предназначенной для оснащения так называемых "компьютеров, совместимых с IBM PC". На деле ни о какой полной совместимости на уровне портов ввода/вывода и протоколов обмена данными говорить не приходится. Поэтому, например, вместе с текстовым процессором Microsoft Word for MS-DOS поставляются десятки принтерных драйверов, по одному для каждой модели принтера или семейства моделей принтеров. Может ли программист учесть все особенности существующей аппаратуры, а также той, что появится в будущем? Очевидно, не может, если, конечно, у него нет дара ясновидения, а также неограниченного запаса времени на тестирование своей программы для бесконечных конфигураций и моделей аппаратного обеспечения. Нам встречалось множество программ, которые могли работать только с той аппаратурой, что имелась в наличии у разработчика. Например, бухгалтерские программы, которые "умели" печатать документы только на принтере Epson FX-850, программы, которые устанавливались только с диска A: емкостью 360 Кбайт и т. д. Есть ли какой-нибудь способ изолировать разработчика программного обеспечения от аппаратуры компьютера? Базовая система ввода/вывода BIOS в некоторой степени делает это для дисковых устройств, видеоконтроллера , последовательного и параллельного адаптера. Однако возможности BIOS очень ограничены. Несмотря на то что MS-DOS в какой-то степени расширяет функции BIOS (главным образом, организуя программный интерфейс с файловой системой), мало кто из программистов не использует прямую запись в видеопамять или порты последовательного адаптера. Причина - недостаточная скорость работы, а также чрезвычайно слабые возможности соответствующих средств MS-DOS и BIOS. Все современные операционные системы обращаются к периферийным устройствам через специальные программные модули - драйверы. В таких операционных системах, как Windows NT, OS/2 или UNIX , обычная программа не может вызывать команды ввода/вывода. Для обращения к периферийному устройству она прямо или косвенно (через операционную систему) должна вызвать драйвер. В составе операционной системы всегда имеется набор драйверов для стандартного оборудования компьютера, такого как дисковые устройства или видеоконтроллеры VGA . Все прочие устройства, как правило, должны комплектоваться драйверами, созданными разработчиками этих устройств. Так как драйвер устройства создается разработчиком устройства, все особенности аппаратуры остаются скрытыми для операционной системы и программиста. Пользуясь стандартным для каждой операционной системы интерфейсом, программа пользователя или сама операционная система обращается к драйверу для выполнения операций управления, ввода или вывода. Операционная система MS-DOS тоже использует механизм драйверов. Однако драйверы MS-DOS не всегда обращаются напрямую к аппаратуре. Обычно они вызывают функции BIOS , и уже BIOS выполняет все операции ввода/вывода. Конечно, BIOS содержит программы обслуживания только для стандартной периферии, нестандартные устройства обслуживаются драйверами напрямую. Использование BIOS как дополнительного интерфейса между драйверами стандартных устройств и аппаратурой резко повышает "живучесть" MS-DOS на персональных компьютерах, не вполне совместимых с IBM PC. И это действительно так - самая распространенная на сегодняшний день операционная система MS-DOS работает на всех компьютерах, хоть сколько-нибудь совместимых с IBM PC. Это возможно благодаря тому, что производители совместимых компьютеров учитывают в BIOS все аппаратные особенности, и MS-DOS "не видит" отличий. А прикладная программа, работающая с устройством через драйвер, - и подавно. Тем не менее, BIOS не используется в операционных системах Windows NT , UNIX или OS/2. Почему? Дело в том, что, к сожалению, BIOS не является реентерабельным. Это не имеет значения для однозадачной MS-DOS, но мультизадачные операционные системы вынуждены сами организовывать обслуживание аппаратуры реентерабельным способом. Существуют еще проблемы разделения ресурсов между параллельно работающими процессами, которые тоже не решаются в рамках BIOS. Пользователи могут легко дополнять операционную систему своими драйверами, составленными для нестандартных устройств. Возможна также замена стандартных драйверов, использование драйверов для замены или расширения функций MS-DOS и BIOS . |