Операционная система MSDOS

       

Процесс загрузки драйверов



6.3. Процесс загрузки драйверов

Системный файл DOS IO.SYS содержит некоторые драйверы устройств, составляющие базовую систему ввода/вывода. Эти драйверы появляются в памяти при загрузке операционной системы и связаны в цепочку через поля next в своих заголовках. Такие драйверы являются резидентными драйверами операционной системы.

Резидентные драйверы могут быть заменены драйверами пользователя, кроме того, пользователь может добавить в список драйверов новые.

Для подключения драйвера пользователя к операционной системе файл CONFIG.SYS должен содержать команду: DEVICE=<путь_файла_драйвера>_<параметры>.

Например: DEVICE=c:\dos\smartdrv.sys 120

В этом примере подключается драйвер smartdrv.sys, который находится в каталоге dos на диске C:. В качестве параметра инициализации драйверу передается число 120. (Параметры считываются драйвером один раз в процессе инициализации драйвера. Об этом мы будем говорить подробно в разделе, посвященном инициализации драйвера).

В списке драйверов драйверы пользователя находятся перед резидентными. В этом можно убедиться, посмотрев на результаты работы программы DRI.COM, описанной ранее: Device Drivers Information V1.00 Copyright (C)Frolov A.,1990


Address Attr Device Name ------- ---- ----------- 02C1:0048 8004 NUL 112F:0000 8800 RBUSDRIV 10E4:0000 0800 ------> Block Device, Number of Units: 0001 0D86:0000 C800 SMARTAAR 0CC7:0000 A000 XMSXXXX0 0BA5:0000 6842 ------> Block Device, Number of Units: 0003 0070:016E 8013 CON 0070:0180 8000 AUX 0070:0192 A040 PRN 0070:01A4 8008 CLOCK$ 0070:01B6 0842 ------> Block Device, Number of Units: 0003 0070:01CA 8000 COM1 0070:01DC A040 LPT1 0070:01EE A040 LPT2 0070:0200 A040 LPT3 0070:0212 8000 COM2 0070:0224 8000 COM3

Эта программа выдает весь список драйверов с самого его начала. Для каждого драйвера выводится адрес драйвера в памяти, слово атрибутов драйвера и имя устройства (либо количество обслуживаемых блочным драйвером устройств).

Первым в этом списке всегда идет драйвер с именем устройства NUL. Это нуль-устройство, используемое для тестовых целей. Драйвер псевдоустройства NUL не может быть переназначен, он всегда расположен непосредственно за векторной таблицей связи DOS.

Дальше идут драйверы, описанные в файле CONFIG.SYS следующим образом: device=sstor.sys device=e:\C600\BIN\himem.sys device=e:\c600\bin\smartdrv.sys 530 device=e:\c600\bin\ramdrive.sys 732 512 64 /e device=e:\vega\rbusdrv.sys 1 80 378 379 37a 37a

Начиная с драйвера консоли CON, идут резидентные драйверы, имеющие сегментный адрес 0070. Это драйвер последовательного канала связи AUX, драйвер устройства печати PRN, драйвер часов CLOCK$, драйверы последовательных каналов COM1, COM2, COM3 и драйверы устройств печати LPT1, LPT2, LPT3.

Если Ваш драйвер должен заменить стандартный, в поле имени заголовка драйвера укажите имя устройства заглавными буквами (например, LPT1). Система разместит Ваш драйвер в цепочке драйверов до стандартного с именем LPT1.

Когда операционная система загружает драйвер, она создает заголовок запроса и помещает в него команду инициализации. Затем вызывается программа стратегии драйвера, которой передается адрес подготовленного заголовка запроса. После этого вызывается программа прерывания драйвера. Эта программа просматривает заголовок запроса, определяет, что пришла команда инициализации, и начинает ее обрабатывать.

Инициализирующая часть выполняется только один раз при загрузке драйвера. Могут выполняться такие действия, как считывание параметров инициализации из файла CONFIG.SYS, выдача инициализирующих команд на обслуживаемое устройство ввода/вывода, инициализация внутренних областей данных и т.д. Перед завершением своей работы инициализирующая часть драйвера записывает в заголовок запроса размер резидентной части драйвера. Сама инициализирующая часть больше не будет нужна, поэтому эта часть драйвера не оставляется при инициализации резидентной в памяти.

Таким образом, количество памяти, отводимое драйверу при загрузке, операционная система определяет, исходя из той информации, которую сам драйвер передает операционной системе при инициализации, а не пользуется длиной файла драйвера, как это можно было бы предположить.

Более подробно процесс инициализации будет рассмотрен при описании команды инициализации драйвера.



Содержание раздела