Модель прерываний в Linux заключается в том, что при возникновении прерывания текущий поток выполнения приостанавливается и запускается обработчик прерывания. habr.com linux-kernel-labs.github.io После запуска обработчика предыдущий поток выполнения возобновляется. habr.com linux-kernel-labs.github.io
Прерывания в Linux можно разделить на три типа: proninyaroslav.gitbooks.io
- Программные прерывания. proninyaroslav.gitbooks.io Возникают, когда программное обеспечение сигнализирует CPU, что ему нужно обратиться к ядру. proninyaroslav.gitbooks.io Такие прерывания обычно используются для системных вызовов. proninyaroslav.gitbooks.io
- Аппаратные прерывания. proninyaroslav.gitbooks.io Возникают, когда происходит аппаратное событие, например нажатие кнопки на клавиатуре. proninyaroslav.gitbooks.io
- Исключения. proninyaroslav.gitbooks.io Генерируются процессором, когда CPU обнаруживает ошибку, например деление на ноль или доступ к странице памяти, которая не находится в ОЗУ. proninyaroslav.gitbooks.io
Обработка прерываний в Linux осуществляется в три этапа: критический, немедленный и отложенный: habr.com
- Первый этап. habr.com Ядро запускает общий обработчик прерываний, который определяет номер прерывания, обработчик прерывания для этого конкретного прерывания и контроллер прерываний. habr.com На этом этапе также выполняются любые критически важные действия по времени. habr.com
- Второй этап. habr.com Выполняются все обработчики драйвера устройства, связанные с этим прерыванием. habr.com В конце этой фазы вызывается метод «конца прерывания» контроллера прерываний, позволяющий контроллеру прерываний повторно подтвердить это прерывание. habr.com
- Третий этап. habr.com Выполняются отложенные действия контекста прерывания. habr.com Их также иногда называют «нижней половиной» прерывания (верхняя половина является частью обработки прерывания, которая выполняется с отключёнными прерываниями). habr.com