Следующее относится только к архитектуре x86, но другие архитектуры вполне могут следовать той же схеме:
Существует флаг процессора, называемый IF
(Флаг прерывания), который определяет, могут ли аппаратные прерывания обрабатываться или должны быть приостановлены. Когда IF = 0, прерывания будут откладываться до повторного включения флага (за исключением NMI, немаскируемое прерывание, которое предназначено как прерывание «только для экстренных случаев», которое не может быть заблокировано).
IF
автоматически очищается процессором перед вызовом процедуры обработки прерываний. Это необходимо для того, чтобы вызовы прерывания не выходили из-под контроля. Обратите внимание, что сам код обслуживания прерываний не может сделать это сам по себе, потому что если бы IF
не было отключено до входа в подпрограмму, было бы возможно, чтобы произошло больше прерываний, прежде чем код обслуживания сможет успеть выполнить хотя бы одну инструкцию. Тогда «пожарный шланг» прерываний немедленно приведет к (во всех отношениях) переполнению стека.
Итак, в ответ на ваш прямой вопрос: обычно, когда второе аппаратное прерывание происходит во время обслуживания начального, оно прерывается до тех пор, пока не завершится первое.
Как обычно, полная история немного сложнее. Руководство разработчика программного обеспечения для архитектуры Intel на веб-сайте Intel содержит более полное описание, начиная со страницы 10-4.