Архитектура современных операционных систем

131 Каждый процессор в системе имеет свой текущий уровень IRQL процессо- ра IRQL Р , который определяет, на каком уровне IRQL в данный момент работа- ет процессор. Все прерывания с IRQL≤IRQL Р маскируются (откладываются). Каждый процессор в мультипроцессорной системе в каждый момент вре- мени может иметь свой уровень IRQL. Когда диспетчер прерываний получает управление, он поднимает текущий уровень IRQL процессора, на котором он работает, до IRQL возникшего преры- вания, тем самым запрещая прерывания такого же и более низких уровней, по- сле чего диспетчер прерываний отыскивает обработчик соответствующего пре- рывания (ISR – Interrupt Source Routine). Для этого он просматривает таблицу IDT, используя в качестве индекса в таблице IRQL возникшего прерывания, а каждый элемент таблицы содержит шлюз на обработчик соответствующего прерывания. Таким образом, управление получает ISR в режиме с запрещенными пре- рываниями своего уровня и более низких уровней. После завершения обработчика управление опять получает диспетчер пре- рываний. Он понижает текущий IRQL процессора до уровня, который был на момент возникновения прерывания, и восстанавливает состояние машины, ко- торое было сохранено в момент прерывания. Управление получает поток, который был прерван на момент обработки прерывания. За время обработки прерывания могли возникнуть другие прерывания та- кого же или более низкого уровня. В результате понижения текущего IRQL процессора, эти прерывания раз- маскируются и поток может быть снова прерван для обработки других преры- ваний.

RkJQdWJsaXNoZXIy MTY0OTYy