Linux Kernel (Ядро линукса) (часть 1)


"Структуры данных для IRQ-линий"

Флаг sa interrupt главного дескриптора прерывания определяет, должны ли прерывания быть включены или выключены, когда функция do iRQ вызывает служебную процедуру обработки прерывания. Служебной процедуре, которая была вызвана при одном состоянии прерываний, разрешается перевести их в противоположное состояние. В однопроцессорной системе это достигается ассемблерными инструкциями cii (запретить прерывания) и sti (разрешить прерывания).

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

Динамическое выделение IRQ-линий

Как было сказано в разд. "Векторы прерываний", несколько векторов зарезервированы для конкретных устройств, а остальные обрабатываются динамически. Таким образом, имеется способ предоставить одну IRQ-линию нескольким аппаратным устройствам, даже если они не допускают совместного использования IRQ-линии. Решение состоит в том, чтобы сериализовать активизацию аппаратных устройств так, чтобы только одно владело IRQ- линией в каждый момент времени.

Перед активизацией устройства, которое будет использовать IRQ-линию, соответствующий драйвер вызывает функцию request irqO. Эта функция создает новый дескриптор irqaction и инициализирует его значениями своих параметров. Затем она вызывает функцию setup irqo, чтобы занести дескриптор в соответствующий список. Драйвер устройства отменяет операцию, если функция setup irqo возвращает код ошибки, который обычно означает, что линия IRQ уже используется другим устройством, не допускающим совместное использование линии. Когда операция, выполняемая устройством, заканчивается, драйвер вызывает функцию free irq , чтобы удалить дескриптор из списка и освободить область памяти.

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без проблем

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга для вас. А так как к книге прилагается компакт- диск с готовой к работе операционной системой Knoppix Live CD, то лишь достаточно вставить его в привод и перегрузить компьютер,...

Linux Kernel (Ядро линукса) (часть 1)

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

Linux Kernel (Ядро линукса) (часть 2)

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно неуклюже: получив системный вызов fork о, ядро в буквальном смысле дублировало все адресное пространство родителя и присваивало копию процессу-потомку. Такая операция...

Linux Kernel (Ядро линукса) (часть 3)

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer head. Этот дескриптор содержит всю информацию, необходимую ядру для работы с блоком, так что перед обработкой блока ядро обязательно проверяет голову...