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

1.Обработка запросов записи-чтения от программного обеспечения управления устройствами. Постановка запросов в очередь

2.Проверка входных параметров запросов и обработка ошибок

3.Инициализация устройства и проверка статуса устройства

4.Управление энергопотреблением устройства.

5.Регистрация событий в устройстве

6.Выдача команд устройству и ожидание их выполнения возможно в блокированном состоянии до поступления прерывания от устройства

7.Проверка правильности завершения операции

8.Передача запрошенных данных и статуса завершенной операции

9.Обработка нового запроса при незавершенном предыдущем запросе (для реентерабельных драйверов)

Динамическая загрузка и выгрузка драйверов

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

Задача

Применить алгоритм обнаружения взаимоблокировки к приведенным данным.

Доступность = (2100),

2001 0010

Требования = 1010, Распределение = 2001

2100 0120

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

Система не находится в состоянии взаимоблокировки в том случае, если имеется по крайней мере одна последовательность событий, при которой все выполняемые процессы могут быть выполнены за конечное время.

Итак, будем выбирать процесс, который при данном количестве свободных ресурсов может получить необходимое ему для выполнения количество ресурсов. Выбираем строку из матрицы Требования, которая была бы меньше строки доступных ресурсов. В данном случае возможно выделение 2 единиц первого ресурса и 1 единицы второго ресурса процессу 3 (третья строка матриц). После завершения этот процесс освободит дополнительную единицу ресурса 2 и две единицы ресурса 3, занятые им на момент начала анализа состояния системы. После завершения процесса 3 вектор доступных ресурсов составит (2100) + (0120) = (2220). Пометим этот процесс как завершенный и не участвующий в дальнейшем анализе.

Вновь ищем процесс, требования которого по предоставлению ресурсов система может выполнить, находясь в текущем состоянии. Это процесс 2 (вторая строка матриц). И после завершения он освободит дополнительно две единицы ресурса 2 и одну единицу ресурса 4. Вектор доступных ресурсов после завершения процесса 2:

(2220) + (2001) = (4221) Помечаем 2 процесс выполненным. Остался лишь процесс 1, которому теперь система может предоставить требуемое количество ресурсов. Процесс 1 успешно завершается. Помечаем его выполненным. После анализа состояния с помощью алгоритма обнаружения тупиков не осталось не помеченных нами процессов. Это означает, что существует последовательность, при которой все процессы могут быть выполнены. Следовательно система не находится в состоянии взаимоблокировки.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: