Система прерывания в мп семейства Х86

Страницы работы

13 страниц (Word-файл)

Содержание работы

V. СИСТЕМА ПРЕРЫВАНИЯ В МП СЕМЕЙСТВА Х86

                                  1. Общие сведения

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

Причинами прерывания текущей программы в процессорах семейства Х86 могут являться:

·  Внешний сигнал, поступивший на вход маскируемых прерываний INTR (Interrupt) или немаскируемого прерывания NMI (Non Masked Interrupt);

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

·  Встретившаяся  в   процессе  выполнения  программы команда INT n.

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

Таким образом, обобщенная схема источников прерывания в процессорах семейства Х86 может быть изображена в виде, изображенном на рис. V.1.

                 Рис. V.1. Источники прерываний в процессорах семейства Х86.

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

Прерывания, определяемые специальными командами выполняемой программы (типа INT n), относятся к программным прерываниям.

Те же внутренние прерывания, которые возникают при появлении аномальных ситуаций при выполнении некоторой команды, получили специальное название «Exceptions» (исключения или особые случаи). Некоторые авторы относят их к типу программных прерываний, однако они от собственно программных прерываний отличаются кардинально, хотя и возникают только при выполнении программ. Назвать же их аппаратными тоже некорректно, хотя они часто возникают при нарушении правил защиты, устанавливаемых при инициализации системы.

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

При этом реакция процессора на отдельные маскируемые запросы прерываний могут быть запрещена программным способом (наложением соответствующей «маски») непосредственно еще в контроллере прерываний, а также и на все маскируемые запросы в целом, путем установки в состояние 1 флага IF (Interrupt Flag) в регистре флагов (EFLAG) самого процессора.

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

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

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

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

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

Программные прерывания реализуются специальными командами INT n, которые включаются в программу самим пользователем и, в каком-то смысле, аналогичны командам вызова подпрограмм CALL. Разница между ними заключается только в том, что:

·  при использовании команд INT n, обязательно заносится в стек содержимое регистра флагов EFLAGS, и сбрасываются флаги TF и IF;

Похожие материалы

Информация о работе