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

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

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

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

4 ответов

7 просмотров

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

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

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

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

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

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

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
Помогите, пожалуйста, делаю программу для для подсчёта корней квадратного уравнения, знаю, что есть куча недочётов, недоработок, но основная проблема в том, что почему-то при ...
NYC
13
#include <stdio.h> int main(void) { int n; scanf("%d", &n); int digits1[n] = {0}; int digits2[n] = {0}; я не могу таким образом заранее массив нулями заполнить?
Linus
12
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
я про форму записи. смысл указывать что 8 байтный регистр 8 байт?
Aiwan \ (•◡•) / _bot
10
Вроде бы вопрос уже заезжанный, но тем не менее У меня есть функция menu() которая выводит набор возможных действий, а затем спрашивает у пользователя что он хотел бы сделать....
David Golovatin
3
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
14
Карта сайта