• Персональный водитель, няня Москва

    Нужен персональный водитель Москва. Персональный водитель, няня Москва.

    ayuto.ru

  • Курсы английского языка для начинающих, английский язык интенсивно

    курсы английского языка для начинающих, английский язык интенсивно

    www.escc.ru





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


Роль флага irq replay

состоит в том, чтобы обеспечить генерирование ровно одного автопрерывания. Вспомним, что функция do iRQ сбрасывает этот флаг, когда приступает к обработке прерывания.

Служебные процедуры обработки прерываний

Как было сказано ранее, служебная процедура обрабатывает прерывание, выполняя некоторую операцию, специфичную для устройства какого-то одного типа. Когда обработчику прерываний приходится выполнять служебные процедуры, он вызывает функцию handie iRQ event . Эта функция выполняет следующие действия:
1. Включает локальные прерывания ассемблерной инструкцией sti, если флаг sa_interrupt сброшен.
2. Выполняет служебную процедуру обработки данного прерывания при помощи такого кода:
retval = 0; do {
retval |= action->handler(irq, action->dev_id, regs); action = action->next;
} while (action);
В начале цикла переменная action указывает на начало списка структур irqaction, определяющих действия, предпринимаемые после получения прерывания
3. Отключает локальные прерывания ассемблерной инструкцией cii.
4. Завершает работу, возвращая значение локальной переменной retval, т. е.0,если ни одна служебная процедура не распознала прерывание, и 1 в противном случае.

Все служебные процедуры обработки прерываний принимают одинаковый набор параметров (повторимся, они передаются через регистры еах, edx и есх соответственно):
- irq — номер прерывания;
- dev id — идентификатор устройства;
- regs — указатель на структуру pt regs, хранящуюся в стеке (исключений) режима ядра и содержащую регистры, сохраненные сразу после возникновения прерывания.

Структура pt regs состоит из 15 полей:
• первые девять полей содержат значения регистров, сохраненные макросом save_all;
• десятое поле, на которое ссылается поле по имени orig eax, содержит номер прерывания;
• остальные поля соответствуют значениям регистров, которые были автоматически сохранены управляющим блоком.
Первый параметр позволяет одной служебной процедуре работать с несколькими IRQ-линиями, второй позволяет одной служебной процедуре обслуживать несколько устройств одного типа, а третий предоставляет служебной процедуре доступ к контексту выполнения прерванного управляющего тракта ядра. На практике большинство служебных процедур обработки прерываний не пользуется этими параметрами.
Каждая служебная процедура обработки прерывания возвращает 1, если прерывание было эффективно обработано, т. е. если сигнал был послан аппаратным устройством, за обслуживание которого отвечает данная процедура (а не другим устройством, использующим ту же IRQ-линию). В противном случае служебная процедура возвращает 0. Этот код возврата позволяет ядру обновить счетчик неожиданных прерываний, упомянутый в разд.

Предыдущая страница | 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. Этот дескриптор содержит всю информацию, необходимую ядру для работы с блоком, так что перед обработкой блока ядро обязательно проверяет голову...