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

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

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


Прерывание. Прерывания и исключения.

Прерывание. Прерывания и исключения.

Процесс выборки и выполнения последовательности команд может быть прерван для выполнения обслуживания одного из событий, возникшего во время выполнения программы. Это связано с выполнением микропроцессором специальной аппаратной функции - прерывания.

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

События, вызывающие прерывания, - это:

  • аппаратные ошибки, определяемые схемами контроля  устройств: ошибка четности; ошибка ввода-вывода (немаскируемые прерывания NMI);
  • внутренние ошибки МП (ошибка деления на 0, нарушение прав доступа к сегменту памяти и др.);
  • выполнение команд  INT (программные прерывания);
  • запросы на обслуживание от внешних устройств ( маскируемые прерывания по сигналам IRQ);
  • запрос на переход в режим управления системой ( SMI ) и др.

Все события, вызывающие прерывания, пронумерованы от  0 через единицу до FF  (256 событий). За каждым событием жестко закреплен вектор прерывания (в режиме реального адреса - четыре байта ОЗУ). В векторе прерывания хранится программный адрес (базовый адрес сегмента памяти и смещение) начала программы обслуживания данного события.

Под векторы прерывания в режиме реального адреса (в этом режиме работают все микропроцессоры от 80286 до Pentium 4 после включения электропитания) отводится область ОЗУ с 0 до 400h  (256 векторов х 4 байта = 1024 байта). Адрес вектора прерывания (АВП) – это адрес младшего из четырех байтов вектора прерывания.  АВП = (номер события вызывающего прерывание) х 4. Для обслуживания прерываний выделяется и используется небольшая область оперативной памяти, которую называют стек.

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

Сигналы IRQ n

Сигналы IRQ n (Interrupt ReQuest - запрос прерывания) - сигнал от одного из узлов компьютера, требующий внимания процессора к этом узлу. Сигнал генерируется при наступлении какого-либо события (например, нажатии клавиши, завершении операции чтения/записи на диске и т.п.). Например, в однопроцессорном варианте ПК предусмотрено 15  линий IRQ, часть которых используется внутренними контроллерами системной платы, а остальные заняты стандартными адаптерами либо не используются:  

0  - системный таймер (канал 0)

1  - контроллер клавиатуры

2  - сигнал с выхода починенного контроллера прерываний

3  - обычно COM2/COM4

4  - обычно COM1/COM3

5  - параллельный порт LPT2

6  - контроллер FDD

7  - параллельный порт LPT1

8  - часы реального времени с автономным питанием (RTC)

9  - параллельна IRQ 2

10 - резерв для устройств

11 - резерв для устройств

12 - обычно контроллер мыши типа PS/2

13 - математический сопроцессор

14 - обычно контроллер Primary IDE HDD (первый канал)

15 - обычно контроллер Secondary IDE HDD (второй канал)

Прерывания и исключения.

Процессор управляет внешними устройствами, выполняя соответствующую программу ввода/вывода, где он с помощью команд 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) - это исключение, которое не позволяет точно установить инструкцию, его вызвавшую. Оно используется для сообщения о  серьезной ошибке, такой как аппаратная ошибка или повреждение системных таблиц.  Набор и обработка исключений реального и защищенного режимов различ­ны. Под исключения  Intel резервирует векторы 0-31 в таблице прерываний, однако в персональных компьютерах часть из них перекрывается системными прерываниями BIOS и DOS. Процедура, обслуживающая прерывание или исключение, определяется по таблице с помощью номера   прерывания. Для программных прерываний номер задается командой (или во втором байте команды INT xx), а исключения генерируют и передают номер прерывания внутри процессора.  Каждому  номеру (0-255) прерывания или исключения в защищенном режиме соответствует эле­мент в таблице дескрипторов прерываний IDT  (Interrupt Descriptor Table). В  реальном режиме таблица прерываний содержит двойные слова -  программные адреса обслуживающих процедур и после сброса располагается, начиная с нуле­вых адресов. Командой LIDT можно изменять ее положение в пределах первого мегабайта, а размер (03FFh) может быть уменьшен до 007Fh. При попытке обслуживания прерывания с номером, выходящим за заданный размер таблицы, генерируется исключение типа 8. В защищенном режиме таблица IDT содержит 8-байтные дескрипторы прерываний, может иметь размер от 32 до 256 дескрип­торов и располагаться в любом месте физической памяти.   Анализ условий обслуживания прерываний и исключений  выполняется в следующем  порядке (по убыванию приоритета):

  • проверка на исключение (ловушка) отладки (типа 1) по выполненной ин­   струкции (пошаговый режим через флаг TF или точка останова по данным  через регистры отладки);
  • проверка на исключение (отказ) отладки (типа 1) по последующей инструкции (точка останова по инструкции через регистр отладки);
  • немаскируемое прерывание (аппаратное по входу NMI);
  • маскируемое прерывание (аппаратное по входу INTR при IF=l);
  • проверка на исключение (отказ) сегментации (типа 11 или 13) при выбор­ке следующей инструкции;
  • проверка на исключение (отказ) страницы (типа 14) при выборке следующей инструкции;
  • проверка на отказ декодирования следующей инструкции (типа 6 или 13);
  • для операции WAIT  проверка TS и МР  (исключение 7, если TS=4 и  МР=1);
  • для операции ESCAPE (к мат. сопроцессору) проверка ЕМ и TS (исклю­чение 7, если EM=l или TS=1);
  • для операции WAIT или ESCAPE проверка на исключение 16 от сопро­цессора;
  • проверка на отказ сегментации (11, 12, 13) и страницы (14) для операндов, используемых в инструкции.

                Двойной отказ (Double Fault)  -  исключение 8  -  возникает, когда при обра­ботке исключения, связанного с сегментацией (10, 11, 12 или 13), процессор обнаруживает исключение, отличное от отказа страницы (14). Также двойной отказ возникает, если при отработке исключения отказа страницы (типа 14) обнаруживается исключение другого типа. В этом случае тоже исполняется исключение 8.  Если во время обслуживания исключения отказа страницы произойдет еще один отказ страницы, то происходит отключение (Shutdown) процессора. Во время отключения никакие новые инструкции не выполняются. Из этого состо­яния процессор можно вывести только аппаратно сигналом NMI, оставляя его в защищенном  режиме, или сигналом RESET, переводящим процессор в реальный режим.  Прерывания и исключения процессора, работающего в защищенном режиме, приведены в табл. 1. Исключения реального режима, отличающиеся от защи­щенного, приведены в табл. 2.

 

                              Таблица 1. Прерывания и исключения защищенного режима

Номер

Функция

Тип

0

Переполнение при делении на 0

Fault

1

Исключение отладки

Fault / Trap

2

Немаскируемое прерывание (NMI)

NMI

3

Прерывание отладки (INT 3)

Trap

4

Прерывание по переполнению (INTO)

Trap

5

Прерывание по контролю диапазона (BOUND)

Fault

6

Недопустимый код операции

Fault

7

Сопроцессор недоступен или переключалась задача

Fault

8

Двойной отказ

Abort

9

Нарушение границы сегмента сопроцессором (только 386/387)

Fault

10**

Недопустимый сегмент состояния задачи

Fault

11

Сегмент отсутствует

Fault

12*

Нарушение границы сегмента стека или сегмент стека отсутствует

Fault

13*

Общее нарушение защиты

Fault

14

Отказ страницы

Fault

15

Зарезервирован

 

16

Исключение сопроцессора

Fault

17

Контроль выравнивания (486+)

Fault

18-31

Зарезервированы

 

0-255

Программные прерывания INT n

Trap

 

*в реальном режиме имеют другое назначение (см. табл. 2).

** В реальном режиме не возникают, но возможны в V86.

 

                                                        Таблица 2. Исключения реального режима

Номер

Функция

8

Вектор прерывания не попадает в таблицу

12

Нарушение границы сегмента стека

13

Нарушение границы сегмента данных или кода

 

                При отработке исключения в защищенном режиме  процессор сохраняет в стеке слово кода ошибки (Error Code). Если оно отлично от нуля, то оно содержит селектор дескриптора, с которым связана ошибка.


Лицензия