Представьте, что ваш процессор сейчас находится в обработчике "int3", и в это время происходит "int2", а недавно появившееся "int2" имеет более низкий приоритет по сравнению с "int3". Как бы мы справились с этой ситуацией?
В случае обработки «int3» мы маскируем другие прерыватели с более низким приоритетом. То есть мы видим, что «int2» сигнализирует ЦП, но ЦП не будет прерван им. После того, как мы закончили обработку «int3», мы возвращаемся из «int3» и снимаем маску с прерывателей с более низким приоритетом.
Место, куда мы вернулись, может быть:
- Другой процесс (в упреждающей системе)
- Процесс, который был прерван "int3" (в системе без вытеснения или в системе с вытеснением)
- Обработчик int, который прерывается "int3", скажем, обработчик int1.
В случаях 1 и 2, поскольку мы сняли маскировку с прерывателей с более низким приоритетом, а «int2» по-прежнему сигнализирует ЦП: «Привет, есть что-то, что вам нужно обработать немедленно», тогда ЦП будет снова прерван, когда выполняет инструкции от процесса для обработки "int2"
В случае 3, если приоритет «int2» выше, чем «int1», тогда ЦПУ будет снова прерван, когда он выполняет инструкции из обработчика «int1», для обработки «int2».
В противном случае обработчик "int1" выполняется без прерываний (поскольку мы также маскируем прерыватели с приоритетом ниже, чем "int1"), и ЦП возвращается к процессу после обработки «int1» и снятия маски. В это время "int2" будет обработан.