Описание тега isr
В системном программировании обработчик прерывания, также известный как подпрограмма обслуживания прерывания (ISR), представляет собой подпрограмму обратного вызова во встроенном ПО микроконтроллера, операционной системе или драйвере устройства, выполнение которой запускается при приеме прерывания. Обработчики прерываний имеют множество функций, которые различаются в зависимости от причины, по которой прерывание было сгенерировано, и скорости, с которой обработчик прерывания завершает свою задачу.
Обработчик прерывания - это низкоуровневый аналог обработчиков событий. Эти обработчики инициируются либо аппаратными прерываниями, либо командами прерывания в программном обеспечении и используются для обслуживания аппаратных устройств и переходов между защищенными режимами работы, такими как системные вызовы.
Обзор
В нескольких операционных системах - Linux, Unix, Mac OS X, Microsoft Windows и некоторых других операционных системах в прошлом, обработчики прерываний делятся на две части: обработчик прерываний первого уровня (FLIH) и обработчики прерываний второго уровня (SLIH). FLIH также известны как обработчики аппаратных прерываний или обработчики быстрых прерываний, а SLIH также известны как обработчики медленных / мягких прерываний, отложенный вызов процедур.
FLIH реализует как минимум зависящую от платформы обработку прерываний, аналогичную процедурам обработки прерываний. В ответ на прерывание происходит переключение контекста, и код прерывания загружается и выполняется. Задача FLIH - быстро обслуживать прерывание или записывать критическую информацию, зависящую от платформы, которая доступна только во время прерывания, и планировать выполнение SLIH для дальнейшей долговременной обработки прерываний. FLIH вызывают дрожание при выполнении процесса. FLIH также маскируют прерывания. Уменьшение джиттера является наиболее важным для операционных систем реального времени, поскольку они должны поддерживать гарантию того, что выполнение определенного кода будет завершено в течение согласованного периода времени. Чтобы уменьшить джиттер и снизить вероятность потери данных из-за маскированных прерываний, программисты пытаются минимизировать время выполнения FLIH,переходя как можно больше на SLIH. Со скоростью современных компьютеров FLIH могут реализовать все операции, зависящие от устройств и платформ, а также использовать SLIH для дальнейшей независимой от платформы долговременной обработки.
FLIH, которые обслуживают оборудование, обычно маскируют связанное с ними прерывание (или сохраняют его замаскированным в зависимости от обстоятельств) до тех пор, пока не завершат свое выполнение. (Необычный) FLIH, который демаскирует связанное с ним прерывание до его завершения, называется обработчиком повторно входимого прерывания. Обработчики повторных прерываний могут вызывать переполнение стека из-за нескольких прерываний одним и тем же вектором прерывания, поэтому их обычно избегают. В системе приоритетных прерываний FLIH также (на короткое время) маскирует другие прерывания с таким же или меньшим приоритетом.
SLIH выполняет задачи обработки длинных прерываний аналогично процессу. SLIH либо имеют выделенный поток ядра для каждого обработчика, либо выполняются пулом рабочих потоков ядра. Эти потоки находятся в очереди выполнения в операционной системе до тех пор, пока процессорное время не станет доступным для выполнения обработки прерывания. SLIH могут иметь длительное время выполнения и поэтому обычно планируются аналогично потокам и процессам.
В Linux FLIH называются верхней половиной, а SLIH - нижней или нижней половиной. Это отличается от именования, используемого в других Unix-подобных системах, где оба являются частью нижней половины.
Ссылка: Википедия