Лекция 3. Исключения и прерывания в встроенных системах
Прерывания
Обладая способностью переключаться от одного потока выполнения к другому, ядро операционной системы должно к тому же реагировать на прерывания (interrupts) и исключения (exceptions). Речь идет о сигналах, которые возникают в системе и заставляют процессор прерывать свою работу и переключаться на обработку возникшей ситуации.
Прерывания представляют собой механизм, позволяющий координировать параллельное функционирование отдельных устройств вычислительной системы и реагировать на особые состояния, возникающие при работе процессора. Прерывание - это принудительная передача управления от выполняемой программы к системе (а через нее - к соответствующей программе обработки прерывания), происходящая при возникновении определенного события.
Прерывания и исключения являются условиями операционной системы, отвлекающими процессор на выполнение кода, находящегося за пределами нормального потока управления. Они могут быть обнаружены либо аппаратными, либо программными средствами.
Термин системное прерывание относится к механизму процессора, предназначенному для захвата выполняемого потока при возникновении исключения или прерывания и для передачи управления в определенное место в операционной системе. В ОС процессор передает управление обработчику системного прерывания, который является функцией, характерной для того или иного прерывания или исключения.
Ядро различает прерывания и исключения следующим образом. Прерывание является асинхронным событием (которое может произойти в любое время), не связанным с текущей задачей процессора. Прерывания генерируются, главным образом, устройствами ввода- вывода, процессорными часами или таймерами, и они могут быть разрешены (включены) или запрещены (выключены).
Исключение, напротив, является синхронным условием, которое обычно возникает в результате выполнения конкретной инструкции. (Аварийные завершения работы, например, из- за машинного сбоя, обычно не связаны с выполнением инструкции.) Повторение исключений может быть вызвано повторным запуском программы с теми же данными и при тех же условиях. В качестве примеров исключений можно привести нарушения доступа к памяти, определенные инструкции отладки и ошибки деления на нуль.
Во время выполнения программы могут возникнуть ситуации, требующие немедленной реакции со стороны процессора, такие как ошибки в программе, сбои в работе аппаратуры, запросы от внешних устройств. Для обработки таких событий используется механизм исключений. Если рассматривать процесс упрощённо, то когда происходит исключение, если оно разрешено, работа программы прерывается, в стеке сохраняется текущий контекст, происходит переход на обработчик исключения - функцию, выполняющую необходимые действия. После возврата из обработчика исключения, восстанавливается контекст и выполнение программы возобновляется так, как будто ничего не произошло. Обработка одного исключения также может быть прервана для обработки другого исключения с более высоким приоритетом.