ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ им. АКАДЕМИКА С. П. КОРОЛЕВА» (СГАУ)

Кафедра информационных систем и технологий

Система прерываний персональных ЭВМ IBM PC

Методические указания

к лабораторной работе

для студентов

Составитель:

Самара 2007

Цель работы - изучение и исследование принципов организации и функционирования системы прерываний персональных ЭВМ типа IBM PC.

1 Организация системы прерывания программ

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

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

НЕ нашли? Не то? Что вы ищете?

Операция прерывания реализуется аппаратурой процессора и сводится к выполнению следующих действий. Выполнение текущей программы прерывается. Прерывание обычно осуществляется по завершении текущей i-й команды программы. Выполнение i+1 команды не начинается. В стеке сохраняется «старое» ССП (счетчик команд, содержащий i+1 - адрес следующей команды, признаки результата и т. п. информацию). Управление передается специальной программе (обработчику прерывания), обслуживающей данную причину прерывания. Для этого используется соответствующее обработчику прерывания «новое» ССП, на основе которого в счетчик команд загружается пусковой адрес обработчика прерывания. Обработчик выполняет все действия, необходимые для обработки прерывания. Типичные действия обработчика прерывания:

1) сохранение в стеке регистров, используемых в обработчике;

2) собственно обработка прерывания;

3) восстановление регистров и возврат из прерывания.

Возврат управления в прерванную программу осуществляется путем восстановления состояния программы на момент прерывания, которое возбуждается командой «возврат из прерывания» и реализуется выталкиванием из стека «старого» ССП.

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

Причины прерываний можно разделить на два типа: 1) события, при возникновении которых нормальное продолжение программы становится невозможным или бессмысленным (отказ аппаратуры, например); 2) события нормальные, естественные для вычислительного процесса, после обработки которых прерванная программа продолжается.

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

Другая группа событий, при появлении которых продолжение текущей программы становится бессмысленным, – это различного рода некорректности при выполнении программ, программные ошибки. К ним относятся: переполнение разрядности сетки машины при обработке чисел, запрещенный код команды, неправильный адрес и т. п.

Нормальные (естественные) причины прерываний: это процессы ввода-вывода информации, которые часто инициируются по сигналам прерываний от устройств ввода-вывода, а также обращения к различным программам ОС по командам прерывания. В ЭВМ типа IBM PC для этих целей можно использовать команду прерывания типа INT N, которая встраивается в пользовательскую программу в нужных местах. Эту группу причин прерываний принято называть «командные прерывания». Каждая причина (сигнал) прерывания идентифицируется номером прерывания N=0, 1, … . Номер прерывания N формируется в момент наступления события, вызывающего прерывание.

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

Маскирование прерываний. ЭВМ должна иметь средства, позволяющие избирательно, гибко реагировать на различные сигналы (причины) прерывания. Например, если пришел сигнал прерывания от одной из схем контроля, то в этом случае нет необходимости реагировать на другие сигналы прерываний (например, на переполнение разрядной сетки) до тех пор, пока неисправность аппаратуры не будет устранена. Следовательно, система прерываний должна обеспечивать возможность избирательно относиться к сигналам прерываний, т. е. в определенных условиях реагировать на одни сигналы и не реагировать на другие. Для этих целей используется маска прерываний – двоичный код М=m1…mk, , в котором каждой причине прерыв￿ния (тавится в соответо￿ не бит маски mi. Если бит маски mi=0, то прерывание по i-й причине запрещено, т. е. замаскировано. Если mi=1, то разрешено, т. е. не замаскировано. Таким образом, операция прерывания возбуждается только незамаскированным сигналом прерывания.

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

Простейшая схема системы прерываний представлена на рисунке 1. Обслуживание прерываний в соответствии с их приоритетами обеспечивает арбитр. При появлении хотя бы одного незамаскированного сигнала прерывания λ`i на выходе элемента «ИЛИ» формируется активный сигнал, который подается в цепь запроса прерываний арбитра. По нему процессор прерывает выполнение текущей программы, сохраняет «старое» ССП в памяти, а арбитр приступает к поиску источника (устройства), пославшего сигнал прерывания. Поиск осуществляется в порядке установленных приоритетов, т. е. начинается с источника прерывания, имеющего наивысший приоритет, и ведется в порядке убывания приоритетов. Поиск продолжается до тех пор, пока не обнаружится устройство, пославшее сигнал прерывания (например, λ`2 =1). Другими словами, арбитр осуществляет поиск устройства с наивысшим в данный момент времени приоритетом. Результатом поиска является номер прерывания N. По нему арбитр обращается к специальной области памяти, в которой размещены ССП для разных причин прерывания, выбирает оттуда соответствующее ССП и загружает его в процессор (в СК и др.). Тем самым запускается подпрограмма, обслуживающая данную причину прерывания. Следует отметить, что в современных ЭВМ вместо термина ССП часто используется термин «вектор прерывания» (ВП). Полный набор векторов называется таблицей векторов прерываний, которая размещается в специальной области основной памяти.


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

Обслуживание по схеме с относительными и абсолютными приоритетами иллюстрирует временная диаграмма (рисунок 2). Как видно из временной диаграммы в случае АПР обслуживание запроса, поступившего в момент времени 3, приоритет которого выше запросов 1 и 2, завершается раньше, чем для случая ОПР. Напротив, обслуживание запросов 1 и 2 в случае АПР задерживается ввиду их прерываний и завершается позже, чем в случае ОПР.

Для реализации функций арбитра можно применять два способа - программный и аппаратный. При программном способе функции арбитра выполняет специальная программа, которую реализует процессор – «программа-арбитр». Достоинство программной реализации - минимальные затраты оборудования. Недостаток - существенные затраты времени на арбитраж - на поиск источника, пославшего запрос на прерывание, с наивысшим в данный момент времени приоритетом. Для уменьшения времени арбитража естественно использовать аппаратную реализацию функций арбитра. Простейшая схема арбитра представлена на рисунке 3. В состав системы прерывания в этом случае вводится аппаратный арбитр, который кроме цепи запросов прерываний ЗП, в которую по «ИЛИ» объединяются сигналы прерываний от устройств, содержит еще одну цепь – разрешение прерывания РП. Эта цепь последовательно подключается ко всем устройствам в порядке установленных для них приоритетов.


Порядок функционирования схемы: устройство Ук посылает сигнал прерывания в цепь запросов прерываний ЗП и размыкает ключ в цепи РП. Арбитр, получив запрос на прерывание, ждет завершения текущей команды в процессоре, после чего прерывает выполнение текущей программы и заталкивает в стек «старое» ССП. После этого арбитр вырабатывает ответный сигнал (импульс) «разрешение прерывания» и посылает его в цепь РП. Этот сигнал распространяется до ближайшего к арбитру устройства, пославшего запрос на прерывание (до устройства, у которого разомкнут ключ в цепи РП), т. е. до устройства с наивысшим в данный момент времени приоритетом. Получив сигнал по цепи РП, это устройство выставляет на шину данных ШД процессора (и арбитра) свой индивидуальный номер прерывания НП. Он используется процессором для извлечения из памяти «нового» ССП, которое загружается в процессор и обеспечивает запуск обработчика прерывания с номером НП. Арбитраж на аппаратном уровне реализуются значительно быстрее, поскольку осуществляется со скоростью распространения электрических сигналов по электрическим цепям.


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

2 Организация системы прерываний IBM PC

Процессоры, начиная с процессора i286, обеспечивают работу в трех режимах - реальный режим, защищенный и виртуальный 8086 (V8086). Организация и обслуживание прерываний в разных режимах различаются. Система прерываний реального режима такая же, как и в процессоре i8086.

2.1 Система прерываний процессора i8086 (реальный режим i286+)

Каждой причине прерывания ставится в соответствие один из 256 векторов прерывания с номером N, принимающим одно из значений 0, 1, … , 255. Вектор прерывания «БАС: D» – это дальний адрес обработчика прерываний, состоит из двух 16-разрядных слов – базового адреса сегмента БАС и смещения D. Векторы прерываний в виде таблицы векторов прерываний размешаются в области ОП с физическими адресами 0 – 3FFh. Вызов соответствующего обработчика прерываний осуществляется путем обращения к таблице векторов прерываний по N (т. е. к ячейкам памяти по адресам 4N, 4N+2). Выбранный из таблицы по N вектор прерывания загружается в сегментный регистр CS (БАС) и в регистр-указатель команд IP (смещение D). Возврат из прерывания осуществляется по команде IRET, которая ставится в конце обработчика прерывания.

Операция прерывания осуществляется в следующем порядке:

1) содержимое регистров Flags, CS и IP процессора (старое ССП) помещается в стек;

2) сбрасываются (обновляются) биты IF и TF регистра флагов (IF=0 - маскирует внешние прерывания по входу INTR, TF=0 - запрещает трассировку, т. е. шаговый режим);

3) определяется причина (номер N) прерывания с наивысшим в данный момент времени приоритетом (арбитраж);

4) по номеру N из таблицы извлекается вектор прерываний (из ячеек памяти с адресами 4N и 4N+2) и загружается в регистры CS, IP (новое значение ССП). Тем самым передается управление подпрограмме обработки прерывания.

Возврат из обработчика прерывания осуществляется командой IRET, по которой из стека в обратном порядке выталкиваются три слова (старое ССП) и загружаются в регистры IP, CS, Flags соответственно.

Формат регистра флагов Flags процессора i8086 имеет вид:

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

x

x

x

x

O

D

I

T

S

Z

x

A

x

P

x

C

С - флаг переноса (при сложении, вычитании);

P - флаг четности (паритета);

A - флаг полупереноса (переноса между тетрадами – из 3 в 4 разряд байта);

Z - флаг нуля;

S - флаг знака (старшего разряда результата);

T - флаг трассировки (прерывание типа 1);

I - маска прерываний по входу INTR;

D - флаг направления (определяет порядок обработки строк);

O - флаг переполнения разрядной сетки;

x - не используется.

Причины прерываний для процессора i8086 делятся на программные, внутренние и внешние.

Программные прерывания осуществляются по командам прерывания INTО, INT3, INT N, используемым при программировании (встраиваемым в программы). Команда INT N (длиной два байта) вызывает обработчик прерываний с номером NÎ(0,1, … ,256), указанным в адресной части команды. Используется обычно для вызова программ ОС. Команда INTО (прерывание по переполнению) является (безадресной) командой условного перехода. Обеспечивает вызов подпрограммы (с фиксированным номером N=4) по условию (флагу) переполнения OF=1. Команда INT3 (программный останов в контрольной точке) используется для отладки программы и обслуживается вектором с фиксированным номером N=3.

Внутренние прерывания возбуждаются сигналами, генерируемыми в процессоре: 1) в случае попытки деления на 0 (при выполнении операции деления результат не помещается в операнд-приемник) процессор генерирует номер N=0, по которому вызывается обработчик; 2) если для отладки программ используется шаговый режим, который задается битом трассировки TF=1 в регистре флагов. Если TF=1, то после выполнения каждой команды программы вызывается обработчик с N=1, который отображает состояние текущей программы. Следует отметить, что команды установки или сброса флага TF в системе команд отсутствуют. Поэтому управление флагом TF осуществляется опосредованно: путем пересылки регистра флагов через стек (по команде PUSHF) в регистр общего назначения (по команде РОР R), установки требуемого значения TF в регистре R и обратной пересылки из регистра R в стек (PUSH R), а из стека в регистр флагов F (POPF).

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

Схема системы прерываний представлена на рисунке 5. Для внешних сигналов прерываний система прерываний является двухуровневой: арбитр системы прерываний имеет два входа – NMI, INTR, на которые могут подаваться внешние сигналы прерываний.

Маскируемые прерывания вызываются сигналами, поступающими на вход INTR (Interrupt Request – запрос прерывания). На этот вход подается сигнал (запрос) прерывания с выхода программируемого контроллера прерываний ПКП типа i8259А. Запросы прерываний от различных устройств У1, … , УК подаются на входы IRQk ПКП. Каждый из них может быть замаскирован маской m1 ... mk внутри ПКП. Объединенные по ИЛИ сигналы прерывания выдаются на выход ПКП: L=m1l1Ú … Úmklk, k=15, где l1 … lk – сигналы прерываний на входах IRQk ПКП. Запросом на прерывание является фронт сигнала L. Он вызовет прерывание, если, в свою очередь, не замаскирован битом маски IF из регистра флагов. Кроме маскирования контроллер ПКП обеспечивает возможность программирования приоритетов сигналов по входам IRQ0 …IRQ15. По умолчанию (обычно) устанавливается следующая система приоритетов: запрос на входе IRQ0 имеет наивысший приоритет и т. д. в порядке убывания приоритетов в соответствии с таблицей 1.

 


Таблица 1 – Приоритеты прерываний (реальный режим MS DOS)

Номер прерывания N

Номер входа

IRQ

Причина прерывания

08

IRQ 0

Сигнал от таймеpа (вырабатывается 8.2 раза в секунду)

09

IRQ 1

Сигнал от клавиатуры (вырабатывается при нажатии и отжатии клавиши)

0A

IRQ 2

Используется для каскадирования контроллеров i8259А

70

IRQ 8

Сигнал от часов реального времени

71

IRQ 9

Сигнал от контроллера монитора

72-74

IRQ 10...12

Резерв

75

IRQ 13

Сигнал от сопроцессора

76

IRQ 14

Пpеpывание от контроллера жесткого диска

77

IRQ 15

Резерв

0B

IRQ 3

Сигнал от порта COM 2

0C

IRQ 4

Сигнал от порта COM 1

0D

IRQ 5

Сигнал от порта LPT 2

0E

IRQ 6

Сигнал от контроллера гибких дисков

0F

IRQ 7

Сигнал от порта LPT 1

Контроллер ПКП выполнен на основе двух каскадом соединенных схем типа i8259А (рисунок 6). Вход IRQ2 ведущего ПКП используется для каскадного подключения ведомого ПКП с целью увеличения числа входов IRQ (до 15-ти). В реальном режиме номера N и приоритеты жестко закреплены за различными устройствами (таблица 1).

Каждый контроллер i8259А содержит в своем составе 8-разрядные регистры: регистр IRR – запросов прерываний, регистр IMR – масок прерываний (по одной маске на каждый вход), арбитр запросов прерываний, регистр принятых (не замаскированных) сигналов прерываний, а также блоки управления, формирования выходных сигналов и др.


Немаскируемые прерывания вызываются сигналами, поступающими на вход NMI (Non Mascable Interrupt – немаскируемое прерывание). На этот вход подаются сигналы прерываний от источников, требующих безотлагательной обработки, поэтому по отношению к входу INTR имеют более высокий приоритет. Маска IF на вход NMI не действует. На входе NMI запросом на прерывание является высокий уровень сигнала. Запрос, поступивший на этот вход, обслуживается вектором прерываний с номером N=2. Этот номер формируется процессором автоматически. Обслуживание прерывания по входу NMI осуществляется без прерывания, так как этот сигнал сбрасывается только после выполнения команды IRET.

Обслуживание внешних прерываний осуществляется следующим образом. Выполнение текущей команды завершается, запускается процедура прерывания: регистры флагов, CS, IP заталкиваются в стек, сбрасываются биты IF, TF. Арбитр процессора осуществляет арбитраж. Если прерывание пришло по входу NMI, приоритет которого выше, то вызывается обработчик с N=2. Если прерывание пришло по входу INTR (IF=1), то арбитр процессора вырабатывает два ответных сигнала (импульса) INTA 1, INTA2, которые посылаются в цепь разрешения прерывания INTA. Получив второй из них, ПКП сбрасывает сигнал запроса на выходе INT, осуществляет арбитраж запросов на входах IRQk (в соответствии с таблицей 1 определяет, на каком из них имеется активный сигнал lk с наивысшим в данный момент времени приоритетом) и выдает на ШД процессора номер N вектора прерываний. По нему процессор запускает соответствующий обработчик. Программа-обработчик сигнала, принятого по входу INTR, не может быть прервана другим сигналом на входе INTR (так как бит маски IF=0) до тех пор, пока она сама не установит маску IF=1 (по команде STI). Поэтому рекомендуется следующая структура программы-обработчика прерываний по входу INTR (рисунок 7).

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3