LINUX.ORG.RU

Как ядро восстанавливает обработку прерванного прерывания?

 


0

2

В момент обработки прерывания irq, это прерывание может быть прервано другим прерыванием от той же или другой железки. А как затем возвращается/восстанавливается выполнение предыдущего обработчика?
Ведь обработка прерываний ведется в контексте прерываний, а не процесса.

★

Последнее исправление: nerdogeek (всего исправлений: 1)

Процессы тут не при чем. Обработчик прерывания это callback функция которую вызывает контроллер прерываний. Собственно если происходит более приоритетное прерывание - регистры помещаются в стек и вызывается обработчик нового прерывания.

pulo
()

Смотря что называть «обработкой прерывания».

Ведь обработка прерываний ведется в контексте прерываний, а не процесса.

Загадочная фраза. AFAIK, обработка прерывания всегда ведется в контексте процесса (или idle task), но, в соременном Linux, на отдельном стеке.

tailgunner ★★★★★
()

Зависит от архитектуры

ttnl ★★★★★
()

Ну от другой железки другой обработчик , а от этой второго не будет, если сам не разрешишь.

ilovewindows ★★★★★
()
Ответ на: комментарий от tailgunner

Там вроде есть нижние и верхние прерывания. Я о верхних, которые первичные. Читаю книжку по кернелу версии 2.6.

nerdogeek ★
() автор топика
Ответ на: комментарий от nerdogeek

Там вроде есть нижние и верхние прерывания

Ыыыы... bottom halves и top halves штоле?

Читаю книжку по кернелу версии 2.6.

Точно по 2.6? Это же древний механизм.

tailgunner ★★★★★
()
Ответ на: комментарий от nerdogeek

Там вроде есть нижние и верхние прерывания. Я о верхних, которые первичные. Читаю книжку по кернелу версии 2.6.

Нижние и верхние половины. Нижняя - для отложенной обработки (тасклетами, softirq, workqueue), верхняя - для сиюминутной обработки.

Dennis7 ★
()
Ответ на: комментарий от tailgunner

Точно по 2.6? Это же древний механизм.

Если это древний механизм, то, может быть посоветуешь что можно почитать про более современный (ну кроме исходного кода)?

Dennis7 ★
()
Ответ на: комментарий от Dennis7

Если это древний механизм, то, может быть посоветуешь что можно почитать про более современный (ну кроме исходного кода)?

Смотря с какой стороны тебя это интересует - драйверописателя или абстрактного кернел хакера. Если первое, то LDD3 (глава 10); если второе... ХЗ, наверное, Роберта Лова. Хотя, честно говоря, я не думаю, что текущее состояние дел в этой области описано в какой-нибудь книге - последние годы активно пилится RT-ядро, и как раз обработка прерываний в нем другая (хотя на драйверы это особо не влияет).

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Меня это интересует как драйверописателя. LDD3 читал (правда давно).

Когда писал драйвер придерживался такой схемы:

Сильно упрощено...

прерываение_от_железки -> врехняя_половина -> нижняя_половина...

Причем, всегда думал (да и пока не было предпосылок думать иначе), что прерывания (верхняя половина) обрабатываются в контексте прерывания а не процесса.

Сейчас работает на ядре 2.6, задумываюсь, чтобы перейти на более новое ядро. В новых ядрах появились какие-то альтернативы этой схеме?

Dennis7 ★
()
Ответ на: комментарий от Dennis7

Я не понял, что ты называешь «верхней» и «нижней» половинами. В ядре есть (или были) top halves и bottom halves - ты о них? Или просто о принципе написания обработчика прерывания - «в обработчике аппаратного прерывания только успокоить устройство, а всю реальную работу сделать в отложенной процедуре»?

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

А, понятно. Да, в контексте прерывания, конечно. Но, AFAIK, current там есть.

Сейчас работает на ядре 2.6, задумываюсь, чтобы перейти на более новое ядро. В новых ядрах появились какие-то альтернативы этой схеме?

2.6 - это чертова уйма ядер %) Хотя я и сам не перешел еще на 3.x, но не думаю, что драйверный интерфейс там изменился.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Я не понял, что ты называешь «верхней» и «нижней» половинами. В ядре есть (или были) top halves и bottom halves - ты о них?

Да, я о них. Где-то в русскоязычной литературе я встречал такое их определение.

2.6 - это чертова уйма ядер

У меня 2.6.32

Хотя я и сам не перешел еще на 3.x, но не думаю, что драйверный интерфейс там изменился.

Да, я тоже так думаю.

Dennis7 ★
()
Ответ на: комментарий от Dennis7

В ядре есть (или были) top halves и bottom halves - ты о них?

Да, я о них.

Никогда ими не пользовался за много лет. Можешь привести пример, как ты их используешь?

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

BH да, а термин bottom-half встречается иногда, когда говорят не о конкретном способе, а вообще о отложенной обработке. Если верить Лаву, то BH как он есть выкинули ещё в 2.4 если не раньше.

Dark_SavanT ★★★★★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.