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

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

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

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

4 ответов

23 просмотра

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

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

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

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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта