Лекция

доцента кафедры системного программирования и компьютерной безопасности

Гродненского госуниверситета имени Янки Купалы

канд. техн. наук Ливак Елены Николаевны

 

по дисциплине «Организация и функционирование компьютерных систем»

 

Основные сведения о механизме прерываний.

Работа системы прерываний в реальном режиме

 

В лекции:

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

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

Система прерываний.

Аппаратные средства системы прерываний

Программные средства системы прерываний

Таблица векторов прерываний

Обработка прерывания в реальном режиме

 

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

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

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

Адрес программы-обработчика прерывания вычисляется по таблице векторов прерываний.

Механизм прерываний поддерживается на аппаратном уровне.

 

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

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

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

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

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

 

Общая классификация прерываний

·      внешние - вызываются внешними по отношению к микропроцессору событиями

  (по существу - это группа аппаратных прерываний) Вложенных прерываний нет!

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

 

Внешние прерывания возникают по сигналу какого-нибудь внешнего устройства.

Внешние прерывания подразделяются на не­маскируемые и маскируемые.

У микропроцессора есть два физических контакта (входа, или вывода микропроцессора), на которых формируются внешние сигналы, при помощи которых можно прервать выполнение текущей программы и тем самым переключить работу центрального процессора. Это сигналы (входы, выводы микропроцессора) NMI  и INTR.

Вход (вывод) INTR (interrupt request, запрос на прерывание) предназначен для фиксации запросов от различных внешних устройств (системные часы, клавиатура, магнитные диски…).

Вход (вывод) NMI (no mask interrupt, немаскируемое прерывание) используется для сообщения микропроцессору о важном событии, требующем безотлагательной обработки.

 

Маскируемые прерывания генерируются контроллером прерываний по заявке определенных периферийных устройств. Контроллер прерываний (выполнен в виде специальной микросхемы i8259A) поддерживает восемь уровней (линий) приоритета; к каждому уровню “привязано” одно периферийное устройство. Именно маскируемые прерывания часто называют аппаратными прерываниями.

В ПК, начиная с IBM PC AT, построенных на базе микропроцессора i80286, используются два контроллера прерываний i8259A; они соединяются последователь­но каскадным образом, что увеличивает количество внешних источников прерываний до 15 (каждая по 8).

Обратим внимание. Микросхема i8259А является программируемой.

 

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

 

Система прерываний. Аппаратные и программные средства системы прерываний

 

Система прерываний - это совокупность программных и аппаратных средств, реализующих механизм прерываний.

 

К аппаратным средствам системы прерываний относятся:

·      выводы микропроцессора - на них формируются сигналы, извещающие микропроцессор либо о том, что некоторое внешнее устройство «просит  уделить ему внимание» (INTR), либо о том, что требуется безотлагательная обработка некоторого события или катастрофическая ошибка (NMI)

·      INTR - вывод для входного сигнала запроса на прерывание,

·      NMI - вывод для входного сигнала немаскируемого прерывания

·      INTA - вывод для выходного сигнала подтверждения получения сигнала прерывания микропроцессором (этот сигнал поступает на одноименный вход микросхемы конроллера 8259А;

·      программируемый контроллер прерываний 8259А (предназначен для фиксирования сигналов прерываний от восьми различных внешних устройств; он выполнен в виде микросхемы; обычно используют две последовательно соединенные микросхемы, поэтому количество возможных источников внешних прерываний до 15 плюс одно немаскируемое прерывание; именно он формирует номер вектора прерывания и выдает его шину данных);

·      внешние устройства (таймер, клавиатура, магнитные диски и т.п.)

 

 

К программным средствам системы прерываний Реального режима относятся:

·      таблица векторов прерываний.

Занимает первый килобайт ОП (адреса 00000h-003FFh).

Она содержит адреса (векторы - «векторы», т.к. два значения для указания адреса) обработчиков прерываний и состоит из 256 (0..255) элементов по 4 байта каждый:

- 2 байта - новое значение для регистра IP

     - 2 байта - новое значение для регистра CS.

Расположение таблицы векторов прерываний в процессорах i80286 и старше определяется значением регистра IDTR.

Таблица векторов прерываний инициализируется при запуске системы, но в принципе может быть изменена и перемещена.

Каждый вектор имеет свой номер и называется номером прерывания.

·      два флага в регистре флагов flags/eflags:

·      IF (Interrupt Flag) - флаг прерывания. Предназначен для маскирования (запрещения) аппаратных прерываний. Если IF=1, микропроцессор обрабатывает внешние прерывания, если = 0, то игнорирует;

·      TF(Trace Flag) - флаг трассировки. Если он=1, то микропроцессор переходит в режим покомандной работы. В этом режиме в микропроцессоре генерируется внутреннее прерывание с номером 1;

·      машинные команды микропроцессора: int, into (прерывание по переполнению), iret, cli, sti

 

Обработка прерывания в реальном режиме

производится в три этапа:

1)  прекращение выполнения текущей программы

Должно произойти так, чтобы потом можно было вернуться и продолжить работу.

Для этого необходимо сохранить содержимое регистров, так как они являются ресурсами, разделяемыми между программами.

Обязательными для сохранения являются регистры cs, ip, flags (пара CS:IP содержит адрес команды, с которой необходимо начать выполнение после возврата, flags - состояние флагов после выполнения последней команды прерванной программы).

Эти регистры сохраняются микропроцессором автоматически. Сохранение остальных регистров должно обеспечиваться программистом!

 

Наиболее удобным местом хранения регистров является стек.

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

 

2)  переход к выполнению и выполнение программы обработки прерывания

Здесь определяется источник прерывания и вызывается соответствующий обработчик прерывания.

В реальном режиме микропроцессора допускается 256 источников - по количеству элементов таблицы векторов прерываний.

Структура элемента:

·      2 байта - значение смещения начала программы-обработчика прерывания от начала кодового сегмента

·      2 байта - значение базового адреса сегмента, в котором находится программа-обработчик.

Как определить адрес, по которому находится вектор прерывания с номером N ?

     смещение элемента таблицы векторов прерываний  =  N * 4

Полный размер таблицы  4*256=1024 (1 килобайт)

 

Итак, на втором этапе микропроцессор

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

2.    Помещает первые два байта в регистр IP

3.    Помещает вторые два байта в регистр CS

4.    Передает управление по адресу CS:IP

            Далее выполняется сама программа обработки прерывания.

(Она тоже может быть прервана поступлением запроса от более приоритетного источника. Все источники прерывания имеют приоритеты.)

 

3) возврат управления прерванной программе

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

Этот участок необходимо защитить от возможного искажения содержимого регистров (в результате появления аппаратного прерывания) с помощью команды cli.

Последние команды в обработчике прерывания - sti, iret

sti - разрешить аппаратные прерывания (устанавливает флаг IF=1, не имеет операндов).

iret - извлечь последовательно три слова из стека и поместить их соответственно в регистры ip, cs, flags.