Алгоритм - Учебный центр

Версия сайта для слабовидящих
Заполните форму ниже! Мы вам перезвоним!

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


Прерывания и исключения (ликбез).

 

 

Прерывания и исключения (ликбез).

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

Любой процессор создается для выполнения его основной функции – выполнения, определенного для него разработчиками, набора команд, но в процессе выборки и выполнения команд, текущей программы в компьютере возникают различные ситуации (события) на которые желательно, чтобы процессор автоматически отреагировал, а именно, прервал выполнение текущей программы и переключился на выполнение программы обработки данного события. Такими событиями, например, могут быть:

- аппаратные ошибки, определяемые схемами контроля устройств - ошибка четности, ошибка ввода-вывода (вызывающие немаскируемые прерывания NMI);

- внутренние ошибки МП (ошибка деления на 0, нарушение прав доступа к сегменту памяти и др.);

- выполнение команд INT (программные прерывания);

- запросы на обслуживание от внешних устройств ( маскируемые прерывания по сигналам IRQ);

- запрос на переход в режим управления системой ( по сигналу на входе SMI# ) и др.

Все события, вызывающие прерывания в режиме реального адреса (а в этом работают все процессоры после включения электропитания), пронумерованы от 0 через единицу до ff (256 событий). За каждым событием жестко закреплен вектор прерывания (четыре байта ОЗУ в области векторов прерываний, которая располагается в первом килобайте ОЗУ). В векторе прерывания хранится программный адрес (CS:IP) команды с которой начинается программа обслуживания данного события. Адресом вектора прерывания (АВП) считают адрес младшего из четырех байтов вектора прерывания. АВП = (номер события вызывающего прерывание) х 4. При прерываниях процессор сохраняет в стеке «свое текущее состояние» - информацию, необходимую ему для возвращения в прерванную программу по команде IRET, которая обычно находится в конце программы обработчика события, вызвавшего прерывание. Стек – это область оперативной памяти, предназначенная для хранения данных, имеющих временную ценность, например, сохраняется текущее состояние микропроцессора, необходимое для возврата в прерванную программу по команде IRET. Запись в стек выполняется с автоуменьшением адресов, а чтение с автоувеличением адресов. Физический адрес для обращения в стек формируется из содержимого сегментного регистра SS и регистра указателя стека (SS:SP). При выполнении записи в стек содержимое регистра SP (при 16-ти разрядных данных) автоматически уменьшается на 2, а затем используется в качестве смещения при вычислении физического адреса. При обращении по чтению в стек содержимое регистра SP используется в качестве смещения при вычислении физического адреса, а затем к регистру SP автоматически прибавляется 2. Обращение в стек может быть выполнено во время выполнения микропроцессором аппаратной функции (например, прерывание) и по командам микропроцессора (например, PUSH , POP).

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

1) Обмен с опросом готовности устройства.

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

2) Обмен по запросам на обслуживание устройства (запросам на маскируемое прерывание).

При при обслуживании внешних устройств через прерывания, процессор, выполняющий программу вводо-вывода, запускает в контроллере операцию и не ожидает готовности контролера к обмену данными. Он продолжает выполнять полезную программу. Контроллер внешнего устройства в случае полной готовности к обмену данными с процессором выдает на соответствующую линию IRQ сигнал запроса на обслуживание. Процессор, через выполнение процедуры прерывания по сигналу IRQ (в ее выполнении участвуют контроллер прерываний и контроллер шины), переходит на выполнение программы ввода/вывода для данного устройства. Эта программа осуществляет обмен данными через регистр данных контроллера и запускает в контроллере следующую операцию и т. д. Процессор возвращается к выполнению прерванной программы через выполнение команды IRET (возврат из прерывания, которой заканчивается программа ввода/вывода) и т. д.

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

Маскируемые прерывания вызываются переходом в высокий уровень сигнала на входе INTR (Interrupt Request) при установленном флаге разрешения (IF=1). В этом случае процессор вырабатывает два следующих друг за другом (back to back) цикла подтверждения прерывания, в которых контроллером шины генерируются управляющие сигналы INТА# (Interrupt Acknowledge). Высокий уровень сигнала INTR должен сохраняться по крайней мере до подтверждения прерывания. Первый цикл подтверждения прерывания обеспечивает выполнение контроллером прерываний процедуры арбитража запросов на прерывание и формирование номера прерывания. По второму импульсу INТА# внешний контроллер прерываний передает по системной шине в процессор сформированный им номер прерывания, обслуживающего данный тип аппаратного прерывания. Прерывание с полученным номером вектора выполняется процессором так же, как и программное (свое текущее состояние (IP, CS, F) процессор сохраняет в стеке, из номера прерывания формирует АВП, читает из вектора прерывания програмный адрес (IP:CS) первой исполняемой команды программы обслуживания прерывания, формирует из IP:CS физический адрес и читает команду по этому адресу). Обработка текущего прерывания может быть в свою очередь прервана немаскируемым прерыванием, а если программа-обработчик установит флаг IF, то и другим маскируемым аппаратным прерыванием.

Немаскируемые прерывания выполняются независимо от состояния флага IF по сигналу NMI (Non Mascable Interrupt). Вход NMI процессора ассинхронный с запуском по фронту сигнала (переход от низкого уровня к высокому), который вызовет прерывание с типом (номером) 2. Немаскируемое прерывание выполняется так же, как и маскируемое. Его обработка не может прерываться под действием сигнала на входе NMI до выполнения команды IRET.

Исключения (Exceptions) подразделяются на отказы, ловушки и аварийные завершения. Отказ (fault) - это исключение, которое обнаруживается и обслуживается до выполнения инструкции, вызывающей ошибку. После обслуживания этого исключения управление возвращается снова на ту же инструкцию (включая все префиксы), которая вызвала отказ. Отказы, использующиеся в системе виртуальной памяти, позволяют, например, подкачать с диска в оперативную память затребованную страницу или сегмент. Ловушка (trap) - это исключение, которое обнаруживается и обслуживается после выполнения инструкции, его вызывающей. После обслуживания этого исключения управление возвращается на инструкцию, следующую за вызвавшей ловушку. К классу ловушек относятся и программные прерывания по командам INT xx. Аварийное завершение (abort) - это исключение, которое не позволяет точно установить инструкцию, его вызвавшую. Оно используется для сообщения о серьезной ошибке, такой как аппаратная ошибка или повреждение системных таблиц. Набор и обработка исключений реального и защищенного режимов различны. Двойной отказ (Double Fault) - если во время обслуживания исключения отказа страницы произойдет еще один отказ страницы, то происходит отключение (Shutdown) процессора. Во время отключения никакие новые инструкции не выполняются. Из этого состояния процессор можно вывести только аппаратно сигналом NMI, оставляя его в защищенном режиме, или сигналом RESET, переводящим процессор в реальный режим.


Лицензия