Прерывание - это «необычное» событие, которое происходит, которое должно быть обработано немедленно , независимо от того, что еще происходит. Я говорю «необычно» в кавычках, потому что они не обязательно неожиданны или плохи, но «необычны» с точки зрения процессора, потому что они «просто случаются», пока он занят выполнением кода, который может быть не связан.
Процессор имеет некоторый механизм для прослушивания прерываний и некоторый способ настройки «что делать», когда возникают прерывания различного типа. Это позволяет операционной системе организовать уведомление о том, что аппаратные устройства будут выполнять какие-либо действия (включая важнейшие аппаратные часы, которые просто генерируют прерывания через равные промежутки времени). Посредством конфигурации обработки прерываний ЦП назначенный код в ОС получит контроль всякий раз, когда происходят прерывания.
Компьютер находится в очень неприятном состоянии (для программиста приложения), когда запускается обработчик прерываний; машина была занята чем-то другим (что может быть чем угодно ), и теперь ОС была уведомлена о том, что «что-то произошло». Он должен собирать любую другую информацию, необходимую для фактической обработки прерывания, где бы он ни находился в машине, и выполнять любую необходимую обработку, не нарушая то, что «может быть чем угодно», которое выполнялось на процессоре. Если ОС хочет изменить, какой процесс приложения выполняется в данный момент, ей нужно будет сохранить достаточно контекста, чтобы иметь возможность восстановить его позже (опять же, не нарушая этот контекст), затем загрузить другой контекст и затем позволить процессору возобновить работу в нормальном режиме. исполнение в этом контексте.
Как уже упоминалось, прерывания используются для получения уведомлений от аппаратных устройств (единственная альтернатива - их периодическая проверка), отслеживание времени и получение гарантированной возможности восстановить контроль над процессом приложения (для переключения того, какое приложение запущено) восстановление после процессов приложений, выполняющих недопустимые инструкции, а также позволяющих приложениям отправлять запросы ОС. Последние известны как системные вызовы. Чтобы приложения не мешали компьютеру и друг другу, они обычно работают с машиной в «пользовательском режиме», что не позволяет приложению делать что-либо, кроме чтения и записи (виртуальной) памяти, уже выделенной для него. Это значит что делать что угодноиначе (чтение / запись файлов, запрос дополнительной памяти, доступ к устройствам и т. д.) приложение должно выполнить системный вызов; он делает это в основном, оставляя некоторую информацию о том, что он хочет сделать, где-то, что он знает, что ОС будет искать его, а затем выполняет инструкцию CPU, которая вызывает прерывание правильного вида. Затем ОС может увидеть, что приложение пытается сделать, и определить, должно ли оно выполнить этот запрос. Эта гарантия того, что ОС будет вовлечена в попытки любого процесса сделать что-либо, что повлияет на что-либо вне процесса, является единственным способом применения политик доступа.
По сути, да, ОС управляется прерываниями. «Абстрактная» ОС загружает компьютер в состояние «нормальной работы» и в какой-то момент передает управление «нормальному» процессу. При нормальных обстоятельствах ОС будет восстанавливать управление только после обработки прерываний; но поскольку без прерывания практически ничего интересного не происходит, ОС в основном все время контролирует.