172 похожих чатов

О, товарищи линуксодевы (кхм... сам не понял что написал), короче,

есть такой вопрос насчёт драйверов.
Понимаю, что проще проверить на живом железе, но пока возможности нет.
Вот допустим, я в драйвере заявил, что он умеет обрабатывать IRQ прерывания. Допустим, PCI-ная плата дёрнула какую-то INT# ногу, сообщив компу, что у неё возникло прерывание, и надо бы его обработать. Как я понимаю, комп +- в этот момент вызовет обработчик прерывания, зарегенный в драйвере.

Вопрос в том: Что случится дальше, если плата не "отпустит" INT#? Комп будет дёргать обработчик прерывания "до победного" и зависнит к хренам? Или это как-то штатно разруливается?

4 ответов

27 просмотров

В общем, именно так. Если к моменту подачи команду EOI в APIC сигнал прерывания ещё висит -- то он вызовет следующее прерывание сразу (ну, сразу как только процэссор скажэт STI, поскольку EOI в APIC обычно подают при заблокированных прерываниях, разблокируют их только по IRET из вектора).

И да, правильная последовательность действий -- внутриядерный обработчик обнаружывает номер прерывания в APIC, по очереди вызывает каждый из драйверов-обработчиков такого прерывания (в PCI они могли мультиплексироваться между несколькими устройствами, потому заранее неизвестно, какое устройство его вызвало), каждый обработчик проверяет свою плату, сбрасывает состояние прерывания (если есть) и делает всё, что ему интересно. После всех обработчиков ядро посылает EOI в APIC.

S.E.- Автор вопроса
Ilya Anfimov
И да, правильная последовательность действий -- вн...

А, то есть у меня может вызваться обработчик просто так? Еще лучше

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта