|
|
|
|
Основное требование, предъявляемое к любой вычислительной системе, заключается не только в способности вычислять, но и в способности взаимодействовать с
внешним миром через периферийные устройства. Без таковой способности компьютер становится не более
чем бесполезной "железякой". Задача любой операционной системы
состоит в обеспечении средств взаимодействия для прикладных программ и для нужд самой операционной системы.
Для того, чтобы прикладная программа могла взаимодействовать с
внешним устройством, операционная система должна удовлетворять
двум основным требованиям. Во-первых, должен существовать определенный интерфейс между прикладной программой и операционной системой. Этот
интерфейс должен быть достаточно гибким, чтобы прикладная программа могла точно определить свои действия при работе
с требуемым устройством. Во-вторых, операционная система обязана уметь передавать и принимать данные от устройства и управлять его
работой. Такой интерфейс в MS-DOS обеспечивается так называемыми драйверами устройств.
В то время как операционные системы больших ЭВМ и миникомпьютеров традиционно обладают широкими возможностями по поддержке
устройств, микрокомпьютеры довольно бедны в этой области. Обычно
они имеют средства поддержки основных дисковых накопителей, системного терминала, печатающего устройства и, возможно, какого-либо дополнительного
устройства. Все что поддерживается сверх этого уровня можно рассматривать как приятную неожиданность. В старых
операционных системах, включая MS-DOS версии 1.0, обеспечивать поддержку дополнительных устройств после покупки ОС было довольно
затруднительно. Операционная система не содержала функциональных запросов прикладного уровня для нестандартных устройств и сами
драйверы были глубоко запрятаны в BIOS (базовая система ввода-вывода). Добавление или изменение драйвера устройства требовало
корректировки исходных кодов BIOS (при их наличии, разумеется), повторного ассемблирования и копирования полученных кодов на загрузочную
дорожку системного диска. Очень часто для выполнения указанных операций не было даже соответствующих утилит. Более того, такие компьютеры как
IBM PC не позволяли и этого, т.к. их BIOS записана в ПЗУ (постоянном запоминающем устройстве). Изменение содержимого ПЗУ требует наличия
специального программатора (устройства, которое записывает информацию в программируемое ПЗУ), а он имеется далеко не у каждого. И даже
после всех этих усилий прикладная программа не имела никаких средств для общения с драйвером с помощью ОС.
Все изменилось с выходом MS-DOS версии 2.0. Вероятно, самым значительным нововведением в операционных системах микрокомпьютеров с тех пор как появилась
CP/M стало то, что MS-DOS версии 2.0 и выше обеспечивают не только возможность установки драйверов без
каких-либо мучений, но и стандартный расширяемый интерфейс, который дает программам возможность взаимодействовать с драйверами. В
результате громадно возросло количество устройств, поддерживаемых MS-DOS и появились драйверы псевдоустройств, обеспечивающие
MS-DOS системы такими средствами как RAM-диски, высокоуровневые графические интерфейсы и т.п.
Драйвер устройства в MS-DOS - это подпрограмма, которая вызывается MS-DOS, с одной стороны, и взаимодействует с конкретным
устройством, с другой. Как посредник между системой и аппаратурой, драйвер устройства передает данные между программой и устройством.
Зачем нужны драйверы устройств?
Драйверы устройств решают две основные задачи. Первая заключается в обеспечении стандартного интерфейса со всеми программами,
желающими использовать определенное устройство, независимого от
конкретных особенностей устройства. Программа, выполняющая обработку текста, или электронная таблица, производящая вычисления,
может не заботиться о типе терминала, подключенного к системе,
выдавая простые команды типа "Отобразить символ" и "Получить символ". Все технические детали по пересылке символов берет на себя
драйвер, обеспечивая тем самым желанный для прикладной программы высокоуровневый интерфейс. Замена терминала может вызвать замену
драйвера, но при этом в прикладной программе не потребуется делать никаких изменений. Драйверы дисководов должны обеспечивать
стандартный интерфейс для всех используемых типов дисков, при этом программа, осуществляющая ввод/вывод с диска, будет работать
с дискетой любого формата, с жестким диском, и даже с псевдодиском в ОЗУ, не замечая никаких различий. Одним словом, первая задача драйвера
состоит в обеспечении независимого от устройства унифицированного интерфейса.
Второе целевое назначение драйверов устройств заключается в том, что они для всех прикладных программ обеспечивают сервис,
подобный библиотекам функций времени выполнения. Любая программа освобождена не только от необходимости поддержки множества разноформатных
устройств, но и от необходимости поддерживать вообще какие-либо форматы. Все заботы по поддержке устройств возложены
на драйверы устройств. В связи с тем, что все драйверы собраны в операционной системе, требуется лишь одна копия каждого драйвера.
В результате этого программы, написанные с использованием интерфейса, предоставляемого MS-DOS, вообще не содержат в себе драйверов.
В операционной системе MS-DOS версии 2.0 и выше драйверы могут
быть добавлены для того, чтобы заменить встроенные драйверы системы. Если Вам не нравится как работает системный драйвер с конкретным устройством,
Вы можете написать свой собственный драйвер. Как подчеркивалось выше, прикладные программы при этом ничего не
заметят. Конечно создание драйвера - не самое простое занятие, но, по крайней мере, такая возможность у Вас есть.
Имея такое мощное средство обеспечения работы MS-DOS с различными устройствами, недолго представить себе драйверы, не поддерживающие реальных
устройств! Другими словами, можно написать драйвер,который поддерживает несуществующее устройство, например
драйвер-эмулятор диска в ОЗУ. Такие устройства получили название "виртуальные устройства", а драйверы таких устройств, соответственно, "драйверы
виртуальных устройств" или просто "виртуальные драйверы".
Реальные или виртуальные устройства не ограничены, по сути дела, только операциями ввода/вывода. На драйвер может быть возложена любая функция по
преобразованию данных. Высокоскоростные процессоры для выполнения больших объемов вычислений с плавающей
точкой - это только один из примеров устройства преобразования информации. Кроме того, драйверы могут программно эмулировать реальные устройства,
которые отсутствуют в конкретной системе, такие как часы или сопроцессор с плавающей точкой.
|
|