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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.