§ Основы работы прерываний

Как вы уже знаете, в режиме реальных адресов может существовать 256 различных прерываний. В начале памяти, по адресу 0000:0000 расположена таблица прерываний, состоящая из 256 четырёхбайтовых дальних (far) адресов в виде dw сегмент : dw смещение. Каждый такой адрес указывает на процедуру, обрабатывающую прерывание. Такие процедуры называются обработчики прерываний, а адреса - векторами.
Режим реальных адресов позволяет использовать два типа прерываний:
  • Аппаратные прерывания - 16 прерываний от внешних устройств, отображённых на 16 векторов.
  • Программные прерывания - прерывания, генерируемые командой INT n.
В защищённом режиме работа прерываний происходит сложнее.
  • Вводится новый класс прерываний, генерируемых самим процессором при нарушениях условий защиты - так называемые исключения (exceptions). Число возможных вектором прерываний по-прежнему равно 256, но 32 из них - от 00h до 1Fh используются исключениями.
  • Вместо дальних адресов в таблице прерываний используются дескрипторы специальных системных объектов, так называемых шлюзов.
  • Сама таблица прерываний, которая называется IDT (Interrupt Descriptors Table), может находится по любому адресу памяти.
Все эти особенности появились в процессоре 80386 и в полном объёме, с небольшими дополнениями, используются в всех 32-разрядных процессорах.
Прерывания с векторами от 00 до 1Fh, т.е. исключения - это основа защищённого режима. Благодаря исключениям процессор автоматически реагирует на любые попытки нарушить защиту системы и позволяет их корректно обработать. Благодаря разделению кода и данных по уровням привилегий, обработчики прерываний можно надёжно изолировать от других программ.
В грамотно построенной операционной системе никакая программа не сможет перехватить прерывание, изменить код или даже просто прочитать его(!), выйти за предел отведённых ей адресов и пр. Благодаря исключениям, операционная система может контролировать любые нарушения условий, поставленных ею.