
- •Лекция 1. Введение. Системное программное обеспечение. Состав системного программного обеспечения
- •Лекция 2. Принципы функционирования систем программирования
- •Этапы подготовки программы
- •Трансляторы и интерпретаторы – общая схема работы
- •Лекция 4. Назначение и функции компоновщика.
- •Раздельная компиляция
- •Переместимые коды и абсолютные коды
- •Редактирование связей с оверлеями
- •Связывание с динамически подсоединяемыми библиотеками (dll)
- •Лекция 5. Назначение и функции программы загрузчика
- •Виды загрузчиков. Загрузчики типа «компиляция-выполнение».
- •Абсолютный загрузчик
- •Настраивающий загрузчик
- •Непосредственно связывающий загрузчик
- •Динамический загрузчик
- •Программные отладчики и их эксплуатация
- •Лекция 6. Базовые понятия языка.
- •Лекция 7. Базовые понятия языка.
- •Лекция 8. Команды и алгоритмы языка.
- •Лекция 9.1. Сложные структуры данных.
- •Команда loop
- •Лекция 9.2. Сложные структуры данных. Структуры
- •Объединения
- •Лекция 2.4. Организация и использование подпрограмм
- •Передача параметров по значению
- •Передача параметров по ссылке
- •Передача параметров по возвращаемому значению
- •Передача параметров по результату
- •Передача параметров по имени
- •Передача параметров отложенным вычислением
- •Передача параметров в регистрах
- •Передача параметров в глобальных переменных
- •Передача параметров в стеке
- •Передача параметров в потоке кода
- •Передача параметров в блоке параметров
- •Лекция 2.5. Макросредства языка Ассемблер
- •Лекция 2.6. Работа с файлами, каталогами и дисками под управлением ms-dos
- •Лекция 3.1. Структура и программирование контроллера прерываний.
- •Лекция 4.1. Работа с консолью. Организация ввода/вывода информации.
- •Лекция 5.1. Системные средства управления памятью
- •Окружение dos
- •Лекция 6.1. Основы организации резидентных программ
- •7.1. Функции драйвера
- •7.2. Архитектура драйвера
- •Процесс загрузки драйверов
- •7.3 Команды драйвера
Процесс загрузки драйверов
Системный файл 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 , выдать инициализирующие команды на периферийное устройство, выполнить инициализацию внутренних областей данных и т. д. Перед завершением своей работы инициализирующая часть драйвера записывает в заголовок запроса размер резидентной части драйвера. Фрагмент драйвера, который выполняет инициализацию, больше не будет нужен, поэтому его не следует оставлять в памяти.