67
− заголовок драйвера, содержащий информацию о самом драйвере и
указатель на следующий драйвер в цепочке;
− область памяти для хранения локальных данных и процедур;
− процедура стратегии, которая при первом вызове драйвера сохраняет
адрес заголовка запроса в области локальных данных;
− процедура прерывания, использующаяся DOS для вызова драйвера и
обрабатывающая заголовок запроса, чтобы передать хранящуюся в нем
информацию в программы обработки команд;
− программы обработки (обработчики) команд устройства, осуществ-
ляющие фактическое управление устройством.
Каждый драйвер содержит имя соответствующего ему устройства, по ко-
торому DOS находит нужный ей драйвер среди других установленных драйве-
ров, образующих общий связанный список
23
. Первым в этом списке располага-
ется драйвер фиктивного устройства NUL:, содержащий указатель на следую-
щий драйвер в списке (устройство CON:), тот, в свою очередь, содержит указа-
тель на следующий драйвер (устройство AUX:) и т.д. Указатель последнего
драйвера содержит значение –1, означающее конец списка.
Использование динамической структуры данных “связанный список” уп-
рощает для DOS выполнение процедур поиска существующего и установки но-
вого драйверов. Поиск нужного драйвера всегда начинается с начала списка,
при этом проверяется соответствующее драйверу имя устройства. Переход к
следующему элементу списка осуществляется по указателю, представляющему
фактически адрес следующего элемента. Установка нового драйвера выполня-
ется также легко − перенастройкой указателей в соответствующих элементах
связанного списка. Столь же просто выполняется и замена существующего
драйвера новым − более совершенным; для этого необходимо оборвать “связь”
с прежним стандартным драйвером, перенаправив указатель на новый драйвер.
Как отмечалось выше, стандартный драйвер устройства в DOS имеет в
своем составе две процедуры: стратегии и прерывания. Они необходимы для
реализации двухступенчатой схемы вызова драйвера устройства. Согласно этой
схеме, DOS вызывает драйвер дважды. При этом сначала управление передает-
ся процедуре стратегии, а затем − процедуре прерывания.
Процедура стратегии осуществляет так называемую инициализацию драй-
вера, подготавливая его к вызову процедуры прерывания. В частности, проце-
дура стратегии сохраняет адрес заголовка запроса в области локальных данных.
Процедура прерывания фактически начинает работу драйвера, извлекая инфор-
мацию из сохраненного заголовка запроса и передавая управление соответст-
вующему обработчику команд.
23
Связанный список − это динамическая структура данных, в которой каждый элемент со-
держит указатель на следующий элемент (т.е. фактически его адрес). Существуют также
двусвязные списки, у которых каждый элемент имеет два указателя: на следующий и на
предшествующий элементы списка, что позволяет свободно перемещаться по списку в
обоих направлениях (в начало и конец списка).