Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

MS-DOS для программиста

© Александр Фролов, Григорий Фролов
Том 18, М.: Диалог-МИФИ, 1995, 254 стр.

[Назад] [Содеожание] [Дальше]

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

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

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

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

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

Например:

DEVICE=c:\dos\smartdrv.sys 120

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

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

Device Drivers Information V1.1
(C) Фролов А.В., 1995

Address    Attr  Device Name
-------    ----  -----------
011C:0048  8004  NUL     
0E5D:2192  08C2  --------> Block Device, Number of Units: 0004
DD61:0000  C053  CON      
EC03:0000  D000  IFS$HLP$
C94C:0000  C800  MITSUMI 
02CB:003A  C000  $MMXXXX0
02CB:0000  C000  EMMQXXX0
0282:0000  A000  XMSXXXX0
025D:0000  8000  SETVERXX
0070:0023  8013  CON      
0070:0035  8000  AUX      
0070:0047  A0C0  PRN      
0070:0059  8008  CLOCK$   
0070:006B  08C2  --------> Block Device, Number of Units: 0004
0070: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 , выдать инициализирующие команды на периферийное устройство, выполнить инициализацию внутренних областей данных и т. д. Перед завершением своей работы инициализирующая часть драйвера записывает в заголовок запроса размер резидентной части драйвера. Фрагмент драйвера, который выполняет инициализацию, больше не будет нужен, поэтому его не следует оставлять в памяти.

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

[Назад] [Содеожание] [Дальше]