Операционные системы/Аппарат прерываний
Материал из eSyr's wiki.
(Новая: '''Прерывание''' - событие в компьютере, при возникновении которого в процессоре происходит предопреде...) |
(→Аппаратный этап обработки прерываний) |
||
(1 промежуточная версия не показана) | |||
Строка 9: | Строка 9: | ||
=== Аппаратный этап обработки прерываний === | === Аппаратный этап обработки прерываний === | ||
- | На аппаратном этапе обработки прерываний процессором | + | На аппаратном этапе обработки прерываний процессором производятся следующие действия: |
# Включение режима блокировки прерываний. В этом режиме все поступающие прерывания либо игнорируются, либо становятся в очередь (это зависит от конкретной архитектуры). | # Включение режима блокировки прерываний. В этом режиме все поступающие прерывания либо игнорируются, либо становятся в очередь (это зависит от конкретной архитектуры). | ||
# Завершение выполнения текущей команды. | # Завершение выполнения текущей команды. | ||
# Сохранение актуального состояния (некоторого подмножества регистров) процессора в ''аппаратный буфер'' ("малое упрятывание"). | # Сохранение актуального состояния (некоторого подмножества регистров) процессора в ''аппаратный буфер'' ("малое упрятывание"). | ||
- | # Присвоение регистру адреса некоторого заранее определенного значения (адреса обработчика), соответствующего программному этапу обработки прерываний. В зависимости от модели организации прерываний это может быть один и тот же адрес для всех прерываний или | + | # Присвоение регистру адреса некоторого заранее определенного значения (адреса обработчика), соответствующего программному этапу обработки прерываний. В зависимости от модели организации прерываний это может быть один и тот же адрес для всех прерываний или свой адрес для каждого типа прерываний. |
=== Программный этап обработки прерываний === | === Программный этап обработки прерываний === |
Текущая версия
Прерывание - событие в компьютере, при возникновении которого в процессоре происходит предопределенная последовательность действий. Прерывания возникают в нестандартных ситуациях (например, в регистре команд декодируется операция с неизвестным кодом).мы заранее оговариваем какого рода нестандартные ситуации могут произойти. Прерывание – программно-аппаратное средство.
Прерывания бывают:
- внутренние - инициируются схемами контроля работы процессора
- внешние - события, возникающие в компьютере в результате взаимодействия центрального процессора с внешними устройствами.
Содержание |
[править] Последовательность действий в ВС при обработке прерываний
Обработка прерываний проходит в два этапа. Первый этап – аппаратный, он выполняется ЦП. Второй этап – программный, он выполняется ОС.
[править] Аппаратный этап обработки прерываний
На аппаратном этапе обработки прерываний процессором производятся следующие действия:
- Включение режима блокировки прерываний. В этом режиме все поступающие прерывания либо игнорируются, либо становятся в очередь (это зависит от конкретной архитектуры).
- Завершение выполнения текущей команды.
- Сохранение актуального состояния (некоторого подмножества регистров) процессора в аппаратный буфер ("малое упрятывание").
- Присвоение регистру адреса некоторого заранее определенного значения (адреса обработчика), соответствующего программному этапу обработки прерываний. В зависимости от модели организации прерываний это может быть один и тот же адрес для всех прерываний или свой адрес для каждого типа прерываний.
[править] Программный этап обработки прерываний
На программном этапе сначала определяется тип прерывания.
- Прерывание может быть «коротким», т.е не требующим больших ресурсов и значительного времени обработки. Пример: прерывание, связанное с таймером. В этом случае происходит обработка и осуществляется выход из прерывания (т.е. восстановление состояние процессора в точке прерывания (за счет аппаратного буфера), возврат в точку прерывания и одновременное снятие блокировки прерывания).
- Если прерывание не «короткое», то возможны две ситуации:
- Прерывание «фатальное», т.е. такое, после которого продолжение выполнения прерванной программы невозможно. В этом случае происходит снятие блокировки прерываний и ОС завершает выполнение программы, т.е. выполняет те действия, которые освобождают ресурсы.
- Прерывание не «фатальное», т.е. прерванная программа еще будет выполняться после его обработки. В этом случае ОС сохраняет все регистры, соответствующие контексту процесса (“полное упрятывание”) в программный буфер, затем снимает блокировку прерываний (с этого места обработка прерывания уже может быть прервана другим прерыванием) и завершает обработку прерывания.
Схема программного этапа обработки прерываний:
[править] Модели организации прерываний
Рассмиотим три модели организации прерываний:
- Использование «регистра прерываний»
- Использование вектора прерываний
- Использование регистра «слово состояние процессора»
[править] Использование «регистра прерываний»
Каждый разряд этого регистра отвечает за появление того или иного прерывания или группы прерываний (т.е. каким-то регистрам может соответствовать прерывание определенного типа, а в каком-то регистре возможна индикация о том, что есть еще один периферийный регистр прерываний, в котором появилось прерывание). Когда ОС получает управление, то специальными командами, которые доступны только ОС, она может прочесть регистр прерываний и определить причину прерывания, а после этого, в зависимости от причины, передать управление на ту или иную программу обработки прерывания.
[править] Использование вектора прерываний
Здесь процессор предполагает, что в определенном фрагменте ОП размещается вектор прерываний. Это таблица, каждая строка которой соответствует определенному прерыванию, соответственно содержимое строки есть адрес программы-обработчика соответствующего прерывания, также в этой строке может находиться дополнительная информация, например, о том, в какой режим нужно перевести процессор при переходе, приоритет операций и т.д. и т.п. Соответственно, при возникновении прерывания аппаратно управление передается не на одну точку, а уже на точку, которая соответствует конкретному прерыванию, т.е. уже сразу идет попадание на обработчик прерываний.
[править] Использование регистра «слово состояние процессора»
Код прерывания аппаратно помещается в регистр «слово состояние процессора», после этого программа-обработчик прерывания, выбрав этот код, принимает решение о дальнейшей последовательности действий, которые необходимо осуществить для обработки прерывания, стоящего под этим кодом.