Непонимаю одну вещь. Рассмотрим ситуацию: в APIС одновременно прилетают прерывание от мыши и от клавиатуры.
Правильно ли я понимаю, что обслужено будет только одно, потому как очереди прерываний для APIC контроллера не существует?
И что будет с вторым прерыванием? Оно будет перепослано через время, или просто потеряется?
Здравствуйте, algosan, Вы писали:
A>Непонимаю одну вещь. Рассмотрим ситуацию: в APIС одновременно прилетают прерывание от мыши и от клавиатуры. A>Правильно ли я понимаю, что обслужено будет только одно, потому как очереди прерываний для APIC контроллера не существует? A>И что будет с вторым прерыванием? Оно будет перепослано через время, или просто потеряется?
Почему очереди не существует? В традиционном APIC прерывания обрабатываются в несколько стадий: запрос прерывания, подтверждение прерывание, окончание прерывания. Для ожидания обработки есть соответвующие регистры.
В новых наборах системной логики есть т.н MSI — они вообще очень хорошо в очереди умеют стоять.
Здравствуйте, pykd_team, Вы писали:
_>Здравствуйте, algosan, Вы писали:
A>>Непонимаю одну вещь. Рассмотрим ситуацию: в APIС одновременно прилетают прерывание от мыши и от клавиатуры. A>>Правильно ли я понимаю, что обслужено будет только одно, потому как очереди прерываний для APIC контроллера не существует? A>>И что будет с вторым прерыванием? Оно будет перепослано через время, или просто потеряется?
_>Почему очереди не существует? В традиционном APIC прерывания обрабатываются в несколько стадий: запрос прерывания, подтверждение прерывание, окончание прерывания. Для ожидания обработки есть соответвующие регистры.
_>В новых наборах системной логики есть т.н MSI — они вообще очень хорошо в очереди умеют стоять.
В моем сообщении был пример с прерываниями от мышки и клавиатуры, это немаскируемые прерывания, а для них в интеловских мануалах сказано:
All interrupts with an NMI, SMI, INIT, ExtINT, start-up, or INIT-deassert delivery mode bypass the
IRR and ISR registers and are sent directly to the processor core for servicing.
Поэтому по прежнему не понятно, что случится, если в local apic прилетят одновременно 2 прерывания.
Здравствуйте, algosan, Вы писали:
A>Непонимаю одну вещь. Рассмотрим ситуацию: в APIС одновременно прилетают прерывание от мыши и от клавиатуры. A>Правильно ли я понимаю, что обслужено будет только одно, потому как очереди прерываний для APIC контроллера не существует? A>И что будет с вторым прерыванием? Оно будет перепослано через время, или просто потеряется?
Прерываная диспетчеризируются ( ставятся в очередь ядром ОС ) а затем из этой очереди обрабатываются обработчиками.
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Здравствуйте, algosan, Вы писали:
A>>Непонимаю одну вещь. Рассмотрим ситуацию: в APIС одновременно прилетают прерывание от мыши и от клавиатуры. A>>Правильно ли я понимаю, что обслужено будет только одно, потому как очереди прерываний для APIC контроллера не существует? A>>И что будет с вторым прерыванием? Оно будет перепослано через время, или просто потеряется?
AWW>Прерываная диспетчеризируются ( ставятся в очередь ядром ОС ) а затем из этой очереди обрабатываются обработчиками.
Здравствуйте, algosan, Вы писали:
A>Вопрос был про APIC, до ядра еще дело не дошло.
Если прерывание происходит, то второе произойти не может, просто его не удастся "выдать". Когда обработка первого будет закончена, то опять будет попытка "выдать" и так далее.
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Здравствуйте, algosan, Вы писали:
A>>Вопрос был про APIC, до ядра еще дело не дошло.
AWW>Если прерывание происходит, то второе произойти не может, просто его не удастся "выдать". Когда обработка первого будет закончена, то опять будет попытка "выдать" и так далее.
Это какое-то крайне спорное утверждение. I/O APIC это приемник всех прерываний с внешних устройств, ничего не мешает разным устройствам генерировать прерывания в один момент времени.
Собственно, похоже очередь прерываний или механизм обслуживания ситуации одновременного прилета в I/O APIC нужно искать не в доках интел, а в доках на I/O APIC.
Здравствуйте, pykd_team, Вы писали:
A>>В моем сообщении был пример с прерываниями от мышки и клавиатуры, это немаскируемые прерывания,
_>Это почему они не маскируемые? Из вашей же цитаты следует обратное.
Здравствуйте, algosan, Вы писали:
A>Непонимаю одну вещь. Рассмотрим ситуацию: в APIС одновременно прилетают прерывание от мыши и от клавиатуры. A>Правильно ли я понимаю, что обслужено будет только одно, потому как очереди прерываний для APIC контроллера не существует? A>И что будет с вторым прерыванием? Оно будет перепослано через время, или просто потеряется?
Резюмирую: очередью являются регистры IRR/ISR, причем для P6 и pentium'ов для каждого вектора в такой очереди не может быть больше 2х прерываний на вектор.
Для немаскируемых/INIT/SMI и других специфичных никаких очередей нет(оно и понятно).
Ну и приоритетность играет роль, но это отдельная тема.
Здравствуйте, algosan, Вы писали:
A>Это какое-то крайне спорное утверждение. I/O APIC это приемник всех прерываний с внешних устройств, ничего не мешает разным устройствам генерировать прерывания в один момент времени. A>Собственно, похоже очередь прерываний или механизм обслуживания ситуации одновременного прилета в I/O APIC нужно искать не в доках интел, а в доках на I/O APIC.
Следует вспомнить о передаче сигналов прерывания по шинам периферийных устройств или системной шине. По таковым
прерывания поступают в IO APIC из девайсов, последний уже разруливает их, и передаёт по системной шине в LAPIC.
И ключ к пониманию обработки, одновременно выставленных на линии прерывания шины, сигналов прерывания от разных источников,
кроется в спецификациях к этим используемым шинам. Прошивки контроллеров прерываний заняты только тем, что снимают
прерывания на линии, и передают их дальше. IO APIC передаёт в LAPIC, LAPIC дёргает CPU. Но то, как распределяются
прерывания, одновременно выставленные на одной и той де линии прерывания шины, полностью определяется реализацией
логического уровня данной шины, и к обработке прерываний отношения прямого не имеет. Например, в CPU, прерывания
поступают последовательно, друг за другом. Вся остальная работа по получению прерываний из девайсов в IO APIC, и из
IO APIC в LAPIC, происходит на уровне прошивок контроллеров прерываний, и их контроллеров тех шин, которыми они соеденены.
Здравствуйте, algosan, Вы писали:
A>Непонимаю одну вещь. Рассмотрим ситуацию: в APIС одновременно прилетают прерывание от мыши и от клавиатуры. A>Правильно ли я понимаю, что обслужено будет только одно, потому как очереди прерываний для APIC контроллера не существует? A>И что будет с вторым прерыванием? Оно будет перепослано через время, или просто потеряется?
У мышки приоритет ниже и оно пойдет после клавиатуры