Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Примерные ответы.docx
Скачиваний:
9
Добавлен:
24.09.2019
Размер:
358.54 Кб
Скачать

24. Драйверы внешних устройств и функции драйверов

Драйвер – специализированный программный модуль, управляющий внешним устройством. Драйверы обеспечивают единый интерфейс к различным устройствам, тем самым изолируя пользовательские программы и ядро ОС от особенностей аппаратуры.

Большинство ОС запрещают пользовательским программам непосредственный доступ к аппаратуре. Это делается для повышения надежности и обеспечения безопасности в многопользовательских системах. В них драйверы являются для прикладных программ единственным способом доступа к внешнему миру.

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

Чаще всего драйверы являются частью ядра системы, исполняются в высшем кольце защиты и имеют доступ на запись к сегментам данных пользовательских программ, а часто и к данным самого ядра. Таким образом, большинство современных ОС предоставляет драйверам практически неконтролируемый доступ к данным пользовательских задач и ядра. Это означает, что ошибка в драйвере может привести к разрушению пользовательских программ и самой ОС.

***

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

1) Загрузка драйвера.

Драйвер регистрируется в системе, производит первичную инициализацию и т. п.

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

3) Открытие драйвера.

Начало основной работы. Обычно драйвер открывается программой как файл, функциями CreateFile() в Win32 или fopen() в UNIX-подобных системах.

4) Чтение.

5) Запись.

Программа читает или записывает данные из/в устройство, обслуживаемое драйвером.

6) Закрытие: операция, обратная открытию, освобождает занятые при открытии ресурсы и уничтожает дескриптор файла.

7) Управление вводом-выводом.

Зачастую драйвер поддерживает интерфейс ввода-вывода, специфичный для данного устройства. С помощью этого интерфейса программа может послать специальную команду, которую поддерживает данное устройство.

В UNIX:

– int open(char * fname, int flags, mode_t mode) – процедура инициализации устройства, возвращает дескриптор файла;

– int read(int handle, char * where, size_t how_much) – чтение данных с устройства;

– int write(int handle, char * what, size_t how_much) – запись данных на устройство;

– void close(int handle) – процедура закрытия (освобождения) устройства;

– int ioctl(int handle, int cmd, ...) – процедура задания специальной команды, которая не может бытьсведена к операциям чтения и записи;

– off_t lseek(int handle, off_t offset, int whence)Long seek – команда перемещения головки чтения/записи к заданной позиции. Некоторые устройства, например модемы или принтеры, могут не иметь этой функции.

– caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int handle, off_t offset) Memory Map – отображение устройства в адресное пространство процесса.