Уровень приоритета прерывания ( IPL ) является частью текущего состояния прерывания системы , которое указывает запросы прерывания , которые в данный момент будут приняты. IPL может быть указан в аппаратном обеспечении регистрами в программируемом контроллере прерываний или в программном обеспечении битовой маской или целочисленным значением и исходным кодом потоков. [1]
Целочисленный IPL может быть всего лишь одним битом, с двумя значениями: 0 (все прерывания включены) или 1 (все прерывания отключены), как в MOS Technology 6502. Однако некоторые архитектуры допускают более широкий диапазон значений, где каждое значение разрешает запросы прерываний, указывающие более высокий уровень, и блокирует запросы с того же или более низкого уровня.
Назначение различных приоритетов запросам на прерывание может быть полезным при попытке сбалансировать пропускную способность системы и задержку прерывания . На некоторые виды прерываний необходимо реагировать быстрее, чем на другие, но объем обработки может быть невелик, поэтому имеет смысл назначить более высокий приоритет этому виду прерывания. [2]
Управление уровнем прерывания также использовалось для синхронизации доступа к структурам данных ядра. Таким образом, обработчик прерываний планировщика уровня 3 временно повышал IPL до 7 перед доступом к любым структурам данных планировщика, а затем понижал до 3 перед переключением контекстов процесса. Однако обработчику прерываний не разрешалось понижать IPL ниже того, на котором он был введен, поскольку это могло разрушить целостность системы синхронизации.
Конечно, многопроцессорные системы добавляют свои сложности, которые здесь не рассматриваются.
Независимо от того, что может поддерживать оборудование, типичные системы типа UNIX используют только два уровня: минимальный (все прерывания отключены) и максимальный (все прерывания включены). [3] [4]
В качестве примера одной из наиболее сложных систем обработки IPL, когда-либо развернутых, компьютер VAX и связанная с ним операционная система VMS поддерживают 32 уровня приоритета, от 0 до 31. Приоритеты 16 и выше предназначены для запросов от внешнего оборудования, тогда как значения ниже 16 доступны для программных прерываний (используемых внутри операционной системы для планирования собственных действий). Не все значения фактически используются, но вот некоторые из наиболее важных:
Аппаратное обеспечение Alpha содержит встроенную поддержку IPL. Когда OpenVMS был портирован на Itanium в 2001 году, схема IPL была смоделирована с использованием функций, предоставляемых аппаратным обеспечением Itanium.