Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_модуль2.doc
Скачиваний:
16
Добавлен:
25.08.2019
Размер:
258.05 Кб
Скачать

Способы реализации ввода - вывода

1. Программный ввод-вывод – когда всю работу выполняет ЦП. Процесс пользователя обращается к системному вызову и получает устройство во временное пользование. Если устройство, занято, процесс ждет его освобождения. Затем в цикле происходит процесс ввода-вывода, и после его окончания управление возвращается в процесс пользователя.

Основной недостаток – много времени ЦП тратит на ожидание готовности ВУ (например, принтера).

Достоинство – очень простая реализация.

2. Управляемый прерываниями ввод-вывод – позволяет ЦП делать что-либо в то время, пока ВУ переходит в состояние готовности. Когда ВУ (принтер) готово принять следующую порцию, оно инициирует прерывание. Это прерывание вызывает остановку текущего процесса в ЦП и сохранение его состояния. Затем запускается процедура обработки прерывания, которая затем возвращает управление ЦП.

Недостаток такой схемы – прерывания происходят при вводе-выводе каждой единицы информации (например символа). Обрабатывать приходится каждое прерывание.

3. Ввод-вывод с использованием DMAЦП полностью освобождается от реализации I/O.

Недостаток такого способа – DMA медленнее ЦП.

Если ЦП не загружен, то оба первых метода будут предпочтительнее.

Драйверы

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

(Псевдоустройства: псевдофайловая система,

Изначально «Драйвер» - программный модуль, который:

  1. входит в состав ядра ОС;

  2. управляет ВУ, взаимодействуя с его контроллером с помощью команд;

  3. обрабатывает прерывания от контроллера устройства;

  4. экранирует от программиста низкоуровневые детали управления и организации данных ВУ;

  5. взаимодействует с другими модулями ядра ОС с помощью установленного интерфейса, описывающего:

  1. формат передаваемых данных,

  2. структуру буферов,

  3. способы включения драйвера в состав ОС,

  4. способы вызова драйвера,

  5. набор общих процедур подсистемы I/O, которыми драйвер может пользоваться, и т. п.

Для каждого драйвера существует 2 вида интерфейсов:

1. Драйвер – ядро;

2. Драйвер – пользовательский процесс.

Поэтому драйвер состоит минимум из 2 нитей:

  1. Основная (для обработки запросов процессов).

  2. Обработчик прерываний. ISR (Interrupt Service Routine), которая и вызывается при поступлении запроса от соответствующего устройства диспетчером прерываний.

Функции драйвера

  1. Инициализация и деинициализация драйвера (освобождение занятых им ресурсов во время работы и подготовка устройства (например парковка головок)).

  2. Проверка наличия устройства.

  3. Инициализация копии драйвера (для управления несколькими однотипными устройствами).

  4. Выгрузка драйвера как модуля (освобождение всех ресурсов).

  5. Открытие устройства и Закрытие (освобождение устройства)..

  6. Чтение и Запись данных в устройство.

  7. Задание установок устройству (например видеорежим).

  8. Отображение устройства в адресное пространство процесса (для установки прав на операции с устройством как для процесса).

Драйвер размещается в адресном пространстве ядра ОС и имеет доступ к для записи к сегментам данных как пользовательских программ, так и ядра. Из-за этого для уменьшения риска разрушения ОС драйвер пишут из двух частей:

  1. Собственно драйвер, работающий в режиме ядра (только для обмена данными с устройством).

  2. Программу, интерпретирующую полученные данные и формирующую команды для устройства (ошибка в этой программе не будет фатальной для ОС, так как исполняется в режиме пользователя).