Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АВМиС - Готовые шпоры.doc
Скачиваний:
145
Добавлен:
15.09.2014
Размер:
1.75 Mб
Скачать

35. Прерывания пэвм

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

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

Для того чтобы ЦП, выполняя свою работу, имел возможность реагировать на события, происходящие вне его зоны внимания, наступления которых он “не ожидает”, существует система прерываний ЭВМ. При отсутствии системы прерываний все заслуживающие внимания события должны находиться в поле зрения процессора, что сильно усложняет программы и требует большой их избыточности. Кроме того, поскольку момент наступления события заранее не известен, процессор в ожидании какого-либо события может находиться длительное время, и чтобы не пропустить его появления, ЦП не может “отвлекаться” на выполнение какой-либо другой работы. Такой режим работы (режим сканирования ожидаемого события) связан с большими потерями времени ЦП на ожидание.

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

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

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

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

Принцип действия системы прерываний заключается в следующем:

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

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

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

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

Наборы информационных элементов, образующих векторы состояния, отличаются у ЭВМ разных типов. В ЮМ PC вектор состояния включает содержимое счетчика команд, сегментных регистров, регистра флагов и аккумулятора (регистра АХ).

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

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

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

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

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

ПЭВМ ШМ PC может выполнять 256 различных прерываний, каждое из которых имеет свой номер (двухразрядное шестнадцатеричное число).

Все прерывания делятся на две группы: прерывания с номера 00h по номер IFh называются прерываниями базовой системы ввода-вывода (BIOS -Basic Input-Output System); прерывания с номера 20h по номер FFh называются прерываниями DOS. Прерывания DOS имеют более высокий уровень организации, чем прерывания BIOS, они строятся на использовании модулей BIOS в качестве элементов.

Прерывания делятся на три типа: аппаратурные, логические и программные. Аппаратурные прерывания вырабатываются устройствами, требующими внимания микропроцессора: прерывание № 2 - отказ питания; № 8 - от таймера; № 9 - от клавиатуры; № 12 - от адаптера связи; № 14 - от НГМД; № 15- от устройства печати и др.

Запросы на логические прерывания вырабатываются внутри микропроцессора при появлении “нештатных” ситуаций: прерывание № 0 - при попытке деления на 0; № 4 - при переполнении разрядной сетки арифметико-логического устройства; № 1 - при переводе микропроцессора в пошаговый режим работы; № 3 - при достижении программой одной из контрольных точек. Последние два прерывания используются отладчиками программ для организации пошагового режима выполнения программ (трассировки) и для остановки программы в заранее намеченных контрольных точках.

Запрос на программное прерывание формируется по команде INTn, где n — номер вызываемого прерывания. Запрос на аппаратное или логическое прерывание вырабатывается в виде специального электрического сигнала.

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

36. Аппаратные, логические и программные прерывания

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

АППАРАТНЫЕ ПРЕРЫВАНИЯ - прерывания, вызванные процессами в аппаратуре вычислительной системы. Источником такого прерывания может быть сам микропроцессор (не программа, а само оборудование микропроцессора!). Аппаратные прерывания, вызываемые самим микропроцессором.

Существует несколько зарезервированных за микропроцессором прерываний. Они возникают при обнаружении оборудованием процессора некорректных ситуаций в программе пользователя. Такие перывания называются ИСКЛЮЧЕНИЯМИ.

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

ОТКАЗЫ (faults) - выявляются и обслуживаются перед выполнением команды. Они могут иметь место в виртуальной системе памяти, когда процессор обращается к несуществующим странице или сегменту. В процессе обработки такого исключения операционная система обращается к странице или сегменту на диске, а микропроцессор перезапускает команду;

ЛОВУШКИ (traps) - прерывания возникающие непосредственно после выполнения команды автоматически или после выполнения соответствующей команде INT;

ВЫХОДЫ ИЗ ПРОЦЕССА (aborts) - возникают при обнаружении крупных, неисправимых ощибок в системных таблицах или оборудовании.

ОШИБКА ДЕЛЕНИЯ (0h) генерируется сразу после выполнения команд деления DIV и IDIV, если формат частного превышает формат получателя или в случае деления на 0.

ПОШАГОВОЕ ВЫПОЛНЕНИЕ (1h) вырабатывается если установлен флаг трассировки TF, после выполнения каждой каманды, кроме команд изменяющих содержимое сегментных регистров. Используется при отладке. Управление битом трассировки вазможно косвенным образом, поместив регистр флагов в стек и после модификации бита 8 возвратив на место.

ПРЕРЫВАНИЕ КОНТРОЛЬНОЙ ТОЧКИ (3h) по существу является программным прерыванием, но в отличии от остальных вызавается однобайтовой камандой INT3, что делает ее более удобной при подстановке в отлаживаемую программу особенно при работе в кодах.

ПЕРЕПОЛНЕНИЕ (4h) генерируется по однобайтовой команде INTO, если установлен флаг переполнения OF при выполнении сложения или вычитания.

Описанные выше прерывания существовали в микропроцессорах i8086 и i8088. С появлением более современных микросхем список был расширен, но не совсем удачно: НЕКОТОРЫЕ ИЗ НОВЫХ ИСКЛЮЧЕНИЙ ИМЕЮТ НОМЕРА, СОВПАДАЮЩИЕ С НОМЕРАМИ ПЕРЫВАНИЙ ИСПОЛЬЗУЕМЫМИ РАНЕЕ ROM BIOS! Программист должен осторожно использовать дублирующиеся вектора.

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

Исключения в микропроцессоре i486.

Основные понятия, связанные с особенностями функционирования процессора:

1 Task State Segment (TSS) - Сегмент состояния задачи - область памяти для хранения контекста неактивной в настоящий момент задачи.

2 Local Descriptor Table (LDT) - Таблица локальных дескрипторов - таблица, содержащая базовые физические адреса и дополнительную информацию. Она необходима для преобразования адресов в "защищенном режиме".

  • 0h - ОШИБКА ДЕЛЕНИЯ полностью соответствует базовуму варианту.

  • 1h - ОТЛАДКА возникает при пошаговом выполнении; при обращении к TSS с с установленным битом ловушки (бит T); при достижении контрольной точки, установленной в регистрах DR0-DR3.

  • 3h - КОНТРОЛЬНАЯ ТОЧКА полностью соответствует базовуму варианту.

  • 4h - ПЕРЕПОЛНЕНИЕ полностью соответствует базовуму варианту.

  • 5h - ПРЕВЫШЕНИЕ ГРАНИЦЫ МАССИВА происходит при выполнении команды BOUND, если содержимое адресуемого регистра выходит за указанные пределы.

  • 6h - НЕРАЗРЕШЕННЫЙ КОД КОМАНДЫ попытка выполнения команды с несуществующим кодом или неразрешенным операндом; неверное использование префикса LOCK.

  • 7h - ПРОЦЕССОР ПЛАВАЮЩЕЙ ТОЧКИ НЕ ДОСТУПЕН возникает есль обращение к сопроцессору запрещено. Соответствующая операция должна быть эмулирована.

  • 8h - ДВОЙНАЯ ОШИБКА фиксируется, если при обслуживании исключений Ah..Dh возникло новое исключение с номером отличным от Eh. Если данное исключение возникает дважды, то работа процессора блокируется до сигнала "сброс" или до возникновения немаскируемого прерывания.

  • 9h - ПРЕВЫШЕНИЕ СЕГМЕНТА АРИФМЕТИЧЕСКИМ СОПРОЦЕССОРОМ;

  • Ah - НЕРАЗРЕШЕННЫЙ СЕГМЕНТ TSS возникает при переключении задач при неверном TSS; отсутствии соответствующей LDR; нарушении защиты памяти; неверных значениях сегментных регистров.

  • Bh - ОТСУТСТВИЕ СЕГМЕНТА отращение к сегменту, находящемуся вне ОП.

  • Ch - ОШИБКА ОБРАЩЕНИЯ К СТЕКУ возникает при обращении к сегменту стека, отсутствующему в ОП; нарушение границы стека.

  • Dh - НАРУШЕНИЕ ОБЩЕЙ ЗАЩИТЫ нарушение защиты при обращении к памяти или порту; нарушение границ сегментов при обращении к таблице дескрипторов; неправильная загрузка регистра управления процессором; запись в ячейку доступную только для чтения; переключение на занятую задачу; передача управления сегменту данных; превышения максимальной длины команды (15 байт).

  • Eh - ОТСУТСТВИЕ ДОСТУПА К СТРАНИЦЕ имеет место при страничной адресации если текущая процедура не имеет достаточного уровня привилегий для вызова указанной страницы или происходит обращение к несуществующему разделу или странице.

  • 10h - ОШИБКА ОПЕРАЦИИ С ПЛАВАЮЩЕЙ ТОЧКОЙ возникает при обнаружении ошибки если реакция на ошибки разрешена.

  • 11h - ОШИБКА ВЫРАВНИВАНИЯ возможна если возникла ошибка и реакция разрешена. Требование по выравниванию: адрес должен быть кратен длине выбираемой информации.

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

Аппаратные прерывания, вызываемые внешними схемами.

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

Поскольку по прерываниям работает несколько независящих друг от друга устройств запросы могут поступить одновременно. Для разрешения подобных конфликтов и для формирования кода устройства служит контроллер прерываний. Компьютеры IBM PC/XT имели одну микросхему обработки запросов прерываний, а AT две, соединенные специальным образом. Приоритеты могут программно меняться, кроме этого можно маскировать отдельные прерывания.

Таблица аппаратных прерываний: (запрос - прерывание - функция)

0 - 08h - Запрос от таймера

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

2 - 0Ah - Вторая микросхема в AT, XT286, PS50 + или вертикальный обратный ход луча EGA/VGA

3 - 0Bh - Запросы от COM2 или COM4

4 - 0Ch - Запросы от COM1 или COM3

5 - 0Dh - НЖМД в XT или запрос от LPT2 (AT)

6 - 0Eh - Запросы от контроллера НГМД

7 - 0Fh - Запросы от LPT1

8 - 70h - Часы реального времени в AT, XT286, PS50 +

9 - 71h - В AT, XT286, PS50 + программно переназначено на запрос 2

12 - 74h - Перывание от мыши в PS50 +

13 - 75h - Ошибка математического сопроцессора в AT, XT286, PS50 +

14 - 76h - Контроллер НЖМД в AT, XT286, PS50 +

Приоритеты прерываний и исключений:

Внешние прерывания проверяются и обрабатываются между выполнением команд программы. Немаскируемое прерывание имеет более высокий проиритет, чем маскируемое. Если встретился префикс блоккировки, повторения или замены сегмента, то запросы прерывания анализируются ПОСЛЕ ВЫПОЛНЕНИЯ следующей команды.

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

Последовательность проверок исключений:

1 Проверяются ловушки только что завершенной команды (пошаговый режим, прерывания по значению результата);

2 Проверяются отказы следующей команды по значениям регистров отладки;

3 Проверяется наличие запросов внешних прерываний;

4 Проверяются отказы сегментации, мешающие выборке следующей команды;

5 Проверяются отказы страничной организации (исключение Eh);

6 Проверяются отказы дешифрации (длина команды, возможность выборки операндов);

7 Проверяется возможность выполнения операции с плавающей точкой;

8 Проверяется наличие ошибки при операции с плавающей точкой если проверка включена.

Организация таблицы векторов прерывания.

Таблица содержит до 256 элементов. Если микропроцессор работает в РЕАЛЬНОМ режиме (используется 1-ый Мбайт памяти), то каждый элемент таблицы 4-х байтный адрес подпрограммы обработки прерывания.

  1. Таблица векторов прерываний в реальном режиме.

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

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

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

Таблица векторов прерываний реального режима состоит из 256 элементов по 4 байта, таким образом её размер составляет 1 килобайт. Элементы таблицы - дальние указатели на процедуры обработки прерываний. Указатели состоят из 16-битового сегментного адреса процедуры обработки прерывания и 16-битового смещения. Причём смещение хранится по младшему адресу, а сегментный адрес - по старшему.

Когда происходит программное или аппаратное прерывание, текущее содержимое регистров CS, IP а также регистра флагов FLAGS записывается в стек программы (который, в свою очередь, адресуется регистровой парой SS:SP). Далее из таблицы векторов прерываний выбираются новые значения для CS и IP, при этом управление передаётся на процедуру обработки прерывания.

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

Завершив обработку прерывания, процедура должна выдать команду IRET, по которой из стека будут извлечены значения для CS, IP, FLAGS и загружены в соответствующие регистры. Далее выполнение прерванной программы будет продолжено.

Что же касается аппаратных маскируемых прерываний, то в компьютере IBM AT и совместимых с ним существует всего шестнадцать таких прерываний, обозначаемых IRQ0-IRQ15. В реальном режиме для обработки прерываний IRQ0-IRQ7 используются вектора прерываний от 08h до 0Fh, а для IRQ8-IRQ15 - от 70h до 77h.

  1. Таблица векторов прерываний в защищенном режиме

В защищённом режиме все прерывания разделяются на два типа - обычные прерывания и исключения (exception - исключение, особый случай).

Обычное прерывание инициируется командой INT (программное прерывание) или внешним событием (аппаратное прерывание). Перед передачей управления процедуре обработки обычного прерывания флаг разрешения прерываний IF сбрасывается и прерывания запрещаются.

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

В защищённом режиме прерывания могут приводить к переключению задач.

Теперь перейдём к рассмотрению механизма обработки прерываний и исключений в защищённом режиме.

Таблица прерываний защищённого режима

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

Таблица прерываний защищённого режима называется дескрипторной таблицей прерываний IDT (Interrupt Descriptor Table). Также как и таблицы GDT и LDT, таблица IDT содержит 8-байтовые дескрипторы. Причём это системные дескрипторы - вентили прерываний, исключений и задач. Поле TYPE вентиля прерывания содержит значение 6, а вентиля исключения - значение 7.

Формат элементов дескрипторной таблицы прерываний IDT показан на рис. 12.

Рис. 12. Формат элементов дескрипторной таблицы прерываний IDT.

Расположение IDT определяется содержимым 5-байтового внутреннего регистра процессора IDTR. Формат регистра IDTR полностью аналогичен формату регистра GDTR (Global Descriptor Table Register), для его загрузки используется команда LIDT. Так же, как регистр GDTR содержит 24-битовый физический адрес таблицы GDT и её предел, так и регистр IDTR содержит 24-битовый физический адрес дескрипторной таблицы прерываний IDT и её предел.

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