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

Системный файл MS-DOS с именем io.sys содержит драйверы для некоторых устройств. Эти драйверы появляются в памяти при загрузке операционной системы и связаны в цепочку через поля next в своих заголовках. Такие драйверы мы будем называть резидентными драйверами MS-DOS.

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

Для подключения драйвера к операционной системе файл config.sys должен содержать строку следующего вида:

DEVICE=<путь_файла_драйвера>_<параметры>.

Например:

DEVICE=c:dossmartdrv.sys 120

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

Загружаемые дополнительно драйверы находятся в списке драйверов перед резидентными драйверами. В этом можно убедиться, посмотрев на результаты работы программы drvlist:

Device Drivers Information V1.1 Address Attr Device Name------- ---- -----------011C:0048 8004 NUL 0E5D:2192 08C2 --------> Block Device, Number of Units: 0004DD61:0000 C053 CON EC03:0000 D000 IFS$HLP$C94C:0000 C800 MITSUMI 02CB:003A C000 $MMXXXX002CB:0000 C000 EMMQXXX00282:0000 A000 XMSXXXX0025D:0000 8000 SETVERXX0070:0023 8013 CON 0070:0035 8000 AUX 0070:0047 A0C0 PRN 0070:0059 8008 CLOCK$ 0070:006B 08C2 --------> Block Device, Number of Units: 00040070:007B 8000 COM1 0070:008D A0C0 LPT1 0070:009F A0C0 LPT2 0070:00B8 A0C0 LPT3 0070:00CA 8000 COM2 0070:00DC 8000 COM3 0070:00EE 8000 COM4

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

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

Дальше идут драйверы, описанные в файле config.sys .

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

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

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

Инициализирующая часть выполняется только один раз при загрузке драйвера. Она может считать параметры инициализации из файла config.sys , выдать инициализирующие команды на периферийное устройство, выполнить инициализацию внутренних областей данных и т. д. Перед завершением своей работы инициализирующая часть драйвера записывает в заголовок запроса размер резидентной части драйвера. Фрагмент драйвера, который выполняет инициализацию, больше не будет нужен, поэтому его не следует оставлять в памяти.