Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции СП.doc
Скачиваний:
9
Добавлен:
01.03.2025
Размер:
1.98 Mб
Скачать

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

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

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

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

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

Например:

DEVICE=c:\dos\smartdrv.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: 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 , выдать инициализирующие команды на периферийное устройство, выполнить инициализацию внутренних областей данных и т. д. Перед завершением своей работы инициализирующая часть драйвера записывает в заголовок запроса размер резидентной части драйвера. Фрагмент драйвера, который выполняет инициализацию, больше не будет нужен, поэтому его не следует оставлять в памяти.