Понятие прерывание полное прекращение работы программы

Содержание

Прерывание (англ. interrupt) — сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается, и управление передаётся обработчику прерывания, который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код.

В зависимости от источника прерывания делятся на три больших класса:

Внешние прерывания могут возникать в результате действий пользователя или оператора за терминалом, или же в результате поступления сигналов от аппаратных устройств — сигналов завершения операций ввода-вывода, вырабатываемых контроллерами внешних устройств компьютера. Данный класс прерываний является асинхронным по отношению к потоку инструкций прерываемой программы. Аппаратура процессора работает так, что асинхронные прерывания возникают между выполнением двух соседних инструкций, при этом система после обработки прерывания продолжает выполнение процесса, уже начиная со следующей инструкции.

Урок 29. Прерывания в операционной системе

Внутренние прерывания, называемые также исключениями, происходят синхронно выполнению программы при появлении аварийной ситуации в ходе исполнения некоторой инструкции программы. Примерами исключений являются деление на нуль, ошибки защиты памяти, обращения по несуществующему адресу, попытка выполнить привилегированную инструкцию в пользовательском режиме и т. п.

Программные прерывания отличаются от предыдущих двух классов тем, что они по своей сути не являются «истинными» прерываниями. Программное прерывание возникает при выполнении особой команды процессора, выполнение которой имитирует прерывание, то есть переход на новую последовательность инструкций.

Прерывания обычно обрабатываются модулями операционной системы, так как действия, выполняемые по прерыванию, относятся к управлению разделяемыми ресурсами вычислительной системы — принтером, диском, таймером, процессором и т. п. Процедуры, вызываемые по прерываниям, обычно называют обработчиками прерываний, или процедурами обслуживания прерываний. Аппаратные прерывания обрабатываются драйверами соответствующих внешних устройств, исключения — специальными модулями ядра, а программные прерывания — процедурами ОС, обслуживающими системные вызовы. Кроме этих модулей в операционной системе может находиться так называемый диспетчер прерываний, который координирует работу отдельных обработчиков прерываний.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:

Источник: studopedia.ru

Понятие прерывания

Прерывание – это временное прекращение работы программы, вызванное внешними, по отношению к этой программе причинами. Внешние причины – это значит, что в коде программы нет явной команды на ее приостановку.
Прерывание всегда неожиданно для программы, и она не может подготовиться к нему и не может сама обеспечить восстановление своей работы после прерывания. Но с другой стороны, прерывание – это все же временное прекращение работы программы, и после завершения прерывания выполнение программы должно быть восстановлено. При этом с точки зрения программы такое восстановление происходит автоматически, более того, программа даже не знает, что она прерывалась.

Читайте также:
Какую программу вел дибров

Урок 14. Прерывания в компьютере


Физически, прерывания реализуются совместными действиями процессора и операционной системы. Процессор фиксирует прерывание и автоматически переходит от выполнения текущей программы к выполнению новой программы – обработчика прерывания. При этом в процессоре обычно определено несколько типов прерываний, и с каждым порыванием всегда связан свой собственный обработчик. Операционная система предоставляет обработчики прерывания для каждого типа прерываний и обеспечивает восстановление исполнения прерванной программы.
Обработка прерываний в операционной системе будут более подробно рассмотрены в рамках нашего курса. Пока только отметим, что механизм прерываний лежит в основе самых фундаментальных механизмов операционной системы, таких как ввод-вывод, многозадачность или интерфейс прикладных программ.
Пользовательский и привилегированный режимы процессора
Одной из основных задач операционной системы является защита пользовательских программ и данных, а также самой себя, от вредоносных действий других программ.
Проблема защиты актуальна даже в наиболее простой однозадачной операционной системе, когда необходимо защищать программы и данные операционной системы от случайных или намеренных повреждений со стороны пользовательских программ. Но еще более остро такая проблема стоит в многозадачных системах, когда необходимо еще защищать различные пользовательские программы друг от друга.
В современных операционных системах необходимый уровень защиты программного кода и данных достигается благодаря использованию виртуальной памяти, которая полностью изолирует исполняющиеся программы друг от друга. Следовательно, для обеспечения защиты данных, достаточно запретить прикладным программам прямой доступ к аппаратуре компьютера, как минимум, к средствам управления виртуальной памятью, чтобы программы не могли бы действовать в обход средств операционной системы. Но системные программы по-прежнему должны иметь доступ к аппаратуре, и непосредственно управлять этой аппаратурой.
Очевидно, что разрешить указанное противоречие чисто программными методами, без использования поддержки со стороны аппаратных средств невозможно, и такая поддержка предоставляется непосредственно процессором.
В современных процессорах предусмотрено как минимум два уровня выполнения программ, которые различаются доступным для программ набором команд. Команды, обеспечивающие прямой доступ к аппаратуре, запрещение и разрешение прерываний, установку обработчиков прерываний или управление регистрами виртуальной памяти, являются привилегированными командами, и доступны программам только в специальном, привилегированном режиме работы процессора. Привилегированный режим работы процессора называют еще режимом ядра или режимом супервизора.
В режиме ядра исполняются только некоторые программы операционной системы, те, которым действительно необходим прямой доступ к аппаратным средствам машины. А все прикладные программы исполняются в обычном, не привилегированном режиме, который называют пользовательский режим или режим задачи.
Очевидно, что переход в режим ядра должен осуществляться таким образом, чтобы программы пользовательского режима не могли бы самостоятельно переключиться в режим ядра, иначе весь смысл выделения привилегированного режима пропадает.
В современных процессорах механизм переключения в режим ядра из режима задачи чаще всего реализован через механизм прерываний. Фактически, при возникновении любого пребывания процессор автоматически переходит в режим ядра и только затем начинает выполнять код программы обработчика прерывания. Заметим теперь, что все обработчики прерываний установлены операционной системой, обычно еще на этапе ее загрузки и не могут быть бесконтрольно изменены никакими прикладными программами, т.к. команда смены обработчика является привилегированной.
Таким образом, гарантируется, что только программы операционной системы смогут выполняться в привилегированном режиме работы процессора. Если же программа пользовательского режима вдруг попытается выполнить привилегированную команду, например, сменить обработчик прерывания, то процессор зарегистрирует ошибку, т.н. исключительную ситуацию, или просто исключение, и сразу же передаст управление специальной программе в составе операционной системы – обработчику исключений.
Благодаря разграничению уровня привилегий между режимом ядра и режимом задачи, программная система, которая первой получит процессор в свое распоряжение, может установить полный контроль над всей вычислительной системой, и препятствовать несанкционированным действиям со стороны любых других программ. Заметим, что в реальной ситуации, операционная система получает управление на этапе начальной загрузки компьютера, раньше любой пользовательской программы, следовательно, она получает потенциальную возможность для полного контроля над компьютером.

Читайте также:
В какой программе строить блок схемы

Источник: mydocx.ru

Обработка прерываний

Группа команд, выполняемых в ответ на запрос прерывания, называется подпрограммой обработки прерывания..

Прерывание — временное прекращение основного процесса вычислений для выполнения некоторых запланированных или незапланированных действий, вызываемых работой аппаратуры или программы.

Т.е. это процесс, временно переключающий микропроцессор на выполнение другой программы с последующим возвратом к прерванной программе.

Классификация прерываний

В зависимости от источника, прерывания делятся на

· аппаратные — возникают как реакция микропроцессора на физический сигнал от некоторого устройства (системные часы, клавиатура), по времени возникновения эти прерывания асинхронны, т.е. происходят в случайные моменты времени;

· программные — вызываются искусственно с помощью соответствующей команды из программы, предназначены для выполнения некоторых действий операционной системы, являются синхронными;

· исключения — являются реакцией микропроцессора на нестандартную ситуацию, возникшую внутри микропроцессора во время выполнения некоторой команды программы (деление на ноль).

Общая классификация прерываний внешние — вызываются внешними по отношению к микропроцессору событиями (по существу — это группа аппаратных прерываний) Вложенных прерываний нет. Возникают по сигналу какого-нибудь внешнего устройства. Внешние прерывания подразделяются на не­маскируемые (инициируют источники, требующие безотлагательного вмешательства со стороны микропроцессора) и маскируемые генерируются контроллером прерываний по заявке определенных периферийных устройств. Именно маскируемые прерывания часто называют аппаратными прерываниями

внутренние — возникают внутри микропроцессора во время вычислительного процесса (по существу — это исключительные ситуации и программные прерывания).

Принципы обработки прерываний Механизм обработки внутренних и внешних прерываний в основном зависит от того, какая аппаратная поддержка обработки прерываний обеспечивается конкретной аппаратной платформой.Cуть принятого на сегодня механизма — каждому возможному прерыванию процессора соответствует некоторый фиксированный адрес физической оперативной памяти. В тот момент, когда процессору разрешается прерваться по причине наличия внутренней или внешней заявки на прерывание, происходит аппаратная передача управления на ячейку физической оперативной памяти с соответствующим адресом — обычно адрес этой ячейки называется «вектором прерывания». Дело операционной системы — разместить в соответствующих ячейках оперативной памяти программный код, обеспечивающий начальную обработку прерывания и инициирующий полную обработку.

ОС UNIX придерживается общего подхода. В векторе прерывания, соответствующем внешнему прерыванию, содержатся команды, устанавливающие уровень выполнения процессора и осуществляющие переход на программу полной обработки прерывания в соответствующем драйвере устройства.

Читайте также:
Что такое компиляция программы в промежуточный код

Прерывания и особые ситуации

Система UNIX позволяет внешним устройства ввода-вывода и системные часы, асинхронно прерывать работу центрального процессора. По получении сигнала прерывания ядро операционной системы сохраняет свой текущий контекст (застывший образ выполняемого процесса), устанавливает причину прерывания и обрабатывает прерывание. После того, как прерывание будет обработано ядром, прерванный контекст восстановится и работа продолжится так, как будто ничего не случилось. Устройствам обычно приписываются приоритеты в соответствии с очередностью обработки прерываний. В процессе обработки прерываний ядро учитывает их приоритеты и блокирует обслуживание прерывания с низким приоритетом на время обработки прерывания с более высоким приоритетом.

Особые ситуации связаны с возникновением незапланированных событий, вызванных процессом, таких как недопустимая адресация, задание привилегированных команд, деление на ноль и т.д. Они отличаются от прерываний, которые вызываются событиями, внешними по отношению к процессу. Особые ситуации возникают прямо «посредине» выполнения команды, и система, обработав особую ситуацию, пытается перезапустить команду; считается, что прерывания возникают между выполнением двух команд, при этом система после обработки прерывания продолжает выполнение процесса уже начиная со следующей команды. Для обработки прерываний и особых ситуаций в системе UNIX используется один и тот же механизм.

Уровни прерывания процессора

Ядро иногда обязано предупреждать возникновение прерываний во время критических действий, могущих в случае прерывания запортить информацию. Например, во время обработки списка с указателями возникновение прерывания от диска для ядра нежелательно, т.к. при обработке прерывания можно запортить указатели.

Обычно имеется ряд привилегированных команд, устанавливающих уровень прерывания процессора в слове состояния процессора. Установка уровня прерывания на определенное значение отсекает прерывания этого и более низких уровней, разрешая обработку только прерываний с более высоким приоритетом. На Рисунке показана последовательность уровней прерывания. Если ядро игнорирует прерывания от диска, в этом случае игнорируются и все остальные прерывания, кроме прерываний от часов и машинных сбоев.

Рисунок 1.6. Стандартные уровни прерываний

Источник: studfile.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru