Можно ли прерывать обработчик прерываний? - PullRequest
4 голосов
/ 09 мая 2011

Я знаю, что linux выполняет вложенные прерывания, когда одно прерывание может "выгрузить" другое прерывание, но как насчет других задач.

Я просто пытаюсь понять, как Linux обрабатывает прерывания. Могут ли они быть вытеснены другой пользовательской задачей / задачей ядра.

Ответы [ 2 ]

8 голосов
/ 05 июля 2011

Чтение Почему код / ​​поток ядра, выполняющийся в контексте прерывания, не может спать? , который ссылается на Роберта Лавса статья , я прочитал это:

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

Таким образом, в AFIK все IRQ отключены, пока они находятся в обработчике прерываний, поэтому он не может быть прерван!?

2 голосов
/ 09 мая 2011

Простой ответ: Прерывание может быть прервано только прерываниями с более высоким приоритетом.

Поэтому прерывание может быть прервано ядром или пользовательской задачей , если приоритет прерывания ниже приоритета прерывания планировщика ядра или приоритета пользовательской задачи.

Обратите внимание, что под "пользовательской задачей" я имею в виду определяемое пользователем прерывание .

...