Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 1 PCI (УРВСиC).doc
Скачиваний:
21
Добавлен:
22.03.2016
Размер:
4.32 Mб
Скачать

Прерывания pci: inTx#, pme#, msi и serr#

Устройства РСIимеют возможность сигнализации об асинхронных событиях с помощью прерываний. На шине РСI возможны четыре типа сигнализации прерываний:

  • традиционная проводная сигнализация по линиям INTx:

  • проводная сигнализация событий управления энергопотреблением по линии РМЕ#;

  • сигнализация с помощью сообщений - MSI;

  • сигнализация фатальной ошибки по линии SERR#.

Аппаратные прерывания в рс - совместимых компьютерах

Аппаратные прерывания обеспечивают реакцию процессора на события, происходящие асинхронно по отношению к исполняемому программному коду. Аппаратные прерывания делятся на маскируемые и немаскируемые. Процессор х86 по сигналу прерывания приоста­навливает выполнение текущего потока инструкций, сохраняя в стеке состояние (флаги и адрес возврата), и выполняет процедуру обработки прерывания. Конк­ретная процедура обработки выбирается из таблицы прерываний по вектору прерывания - однобайтному номеру элемента в данной таблице. Вектор прерывания доводится до процессора разными способами: для немаскируемого прерывания он фиксирован, для маскируемых прерываний его сообщает специальныйконтроллер прерываний. Кроме аппаратных прерываний у процессоров х86 имеются такжевнутренние прерывания -исключения (exceptions), связанные с особыми случая­ми выполнения инструкций, ипрограммные прерывания. Для исключений вектор определяется самим особым условием, и под исключения фирмой Intel зарезервированы первые 32 вектора (0-31 или 00-1Fh). В программных прерываниях но­мер вектора содержится в самой инструкции (программные прерывания - это лишь специфический способ вызова процедур по номеру, с предварительным сохране­нием в стеке регистра флагов). Все эти прерывания используют один и тот же на­бор из 256 возможных векторов. Исторически сложилось так, что векторы, исполь­зуемые для аппаратных прерываний, пересекаются с векторами исключений и векторами для, программных прерываний, используемых для вызовов сервисов BIOS и DOS. Таким образом, для ряда номеров векторов процедура, на которую ссылается таблица прерываний, должна в начале содержать программный код, определяющий, по какому поводу она вызвана: из-за исключения, аппаратного прерывания или же для вызова какого-то системного сервиса. Таким образом, про­цедура, собственно и обеспечивающая реакцию процессора на то самое асинхрон­ное событие, будет вызвана только после ряда действий по идентификации источ­ника прерываний. Один и тот же вектор прерывания может использоваться и несколькими периферийными устройствами - это так назы­ваемоеразделяемое использование прерываний.

Вызов процедуры обслуживания прерываний в реальном и защищенном режимах процессора существенно различается:

  • в реальном режиме таблица прерываний содержит 4-байтные дальние указатели (сегмент и смещение) на соответствующие процедуры, которые вызываются дальним вызовом (Call Farс предварительным сохранением флагов). Размер (256х4 байт) и положение таблицы (начинается с адреса 0) фиксированы;

  • в защищенном режиме (и в его частном случае - режиме V86) таблица содер­жит 8-байтные дескрипторы прерываний, которые могут быть шлюзами преры­ваний (Interrupt Gate), ловушек (Тгар Gate) или задач (Task Gate). Размер таблицы может быть уменьшен (максимальный - 256х8 байт), положение таб­лицы может меняться (определяется содержимым регистраIDTпроцессора). Код обработчика прерываний должен быть не менее привилегированным, чем код прерываемой задачи (иначе сработает исключение защиты). По этой причине обработчики прерываний должны работать на уровне ядра ОС (на нулевом уров­не привилегий). Смена уровня привилегии при вызове обработчика приводит к дополнительным затратам времени на переопределение стека. Прерывания, вызывающие переключение задач (черезTask Gate), расходуют значительное время на переключение контекста - выгрузку регистров процессора в сегмент состояния старой задачи и их загрузку из сегмента состояния новой.

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

На немаскируемое прерывание (NMI - Non-Maskable Interrupt) процессор реаги­рует всегда (если обслуживание предыдущего NMI завершено); этому прерыва­нию соответствует фиксированный вектор 2. Немаскируемые прерывания в РС используются для сигнализации о фатальных аппаратных ошибках. Сигнал на линиюNMI приходит от схем контроля памяти (четности илиЕСС), от линий кон­троля шины ISA (IOCHK) и шины РСI (SERR#). СигналNMI блокируется до входа процессора установкой в 1 бита 7 порта 070h, отдельные источники разрешаются и идентифицируются битами порта 061h:

  • бит 2 R/W -ERP- разрешение контроля ОЗУ и сигналаSERR#шины PCI;

  • бит 3 R/W -ЕIС- разрешение контроля шины ISA;

  • бит 6 R - IOCHK- ошибка контроля на шине ISA (сигналIOCHK#);

  • бит 7 R - РСК - ошибка четности ОЗУ или сигналSERR# на шине PCI.

Реакция процессора на маскируемые прерывания может быть задержана сбросом его внутреннего флагаIF(инструкцияCLIзапрещает прерывания,SТI - разреша­ет). Маскируемые прерывания используются для сигнализации о событиях в уст­ройствах. По возникновении события, требующего реакции, адаптер (контроллер) устройства формируетзапрос прерывания, который поступает на вход контроллера прерываний. Задача контроллера прерываний - довести до процессора запрос прерывания и сообщить вектор, по которому выбирается программная процедура обработки прерываний.

Процедура обработки прерывания от устройства должна выполнить действия по обслуживанию данного устройства, включая сброс его запроса для обеспечения возможности реакции на следующие события, и послать команды завершения в контроллер прерываний. Вызывая процедуру обработки, процессор автоматически сохраняет в стеке значение всех флагов и сбрасывает флаг IF, что запрещает маскируемые прерывания. При возврате из этой процедуры (по инструкцииIRET) процессор восстанавливает сохраненные флаги, в том числе и установленный (до прерывания)IF, что снова разрешает прерывания. Если во время работы обработ­чика прерываний требуется реакция на иные прерывания (более приоритетные), то в обработчике должна присутствовать инструкцияSТI. Особенно это касается длинных обработчиков; здесь инструкцияSТIдолжна вводиться как можно рань­ше, сразу после критической (не допускающей прерываний) секции. Следующие прерывания того же или более низкого уровня приоритета контроллер прерыва­ний будет обслуживать только после получения команды завершения прерыванияЕОI(End Of Interrupt).

В IBM РС - совместимых компьютерах применяется два основных типа контрол­леров прерываний:

  • PIC (Peripheral Interrupt Controller) - периферийный контроллер прерываний, программно совместимый с «историческим» контроллером 8259А, применяв­шимся еще в первых моделях IBM РС. Со времен IBM РС/АТ применяется связка из пары каскадно-соединенных PIC, позволяющая обслуживать до 15 ли­ний запросов прерываний;

  • APIC (Advanced Peripheral Interrupt Controller) –усовершенствованный периферийный контроллер прерываний, введенный для поддержки мультипроцессорных систем в компьютеры на базе процессоров 4 -5 поколений (486 и Pen­tium) и используемый поныне для более поздних моделей процессоров. Кроме поддержки мультипроцессорных конфигураций современный АРIС позволяет увеличивать число доступных линий прерываний и обрабатывать запросы пре­рываний от устройств PCI, посылаемые через механизм сообщений (MSI). Ком­пьютер, оснащенный контроллером АРIС, обязательно имеет возможность фун­кционировать и в режиме, совместимом со стандартной связкой пары PIC. Этот режим включается по аппаратному сбросу (и включению питания), что позво­ляет использовать старые ОС и приложения MS DOS, «незнающие» - APIC и мультипроцессирования.

Традиционная схема формирования запросов прерываний с использованием пары PIC изображена на рис. 2.

Рис. 2 - Коммутация запросов прерываний.

На входы контроллеров прерываний поступают запросы от системных устройств (клавиатура, системный таймер, СМОS-таймер, сопроцессор), периферийных контроллеров системной платы и карт расширения. Традиционно все линии запросов, не занятые перечисленными устройствами, присутствуют на всех слотах шины ISA/ ElSA. Эти линии обозначаются как IRQxи имеют общепринятое назначение (табл. 2). Часть этих линий отдается в распоряжение шины PCI. В таблице отра­жены и приоритеты прерываний - запросы расположены в порядке их убывания. Номера векторов, соответствующих линиям запросов контроллеров, система прио­ритетов и некоторые другие параметры задаются программно при инициализации контроллеров. Эти основные настройки остаются традиционными для обеспече­ния совместимости с программным обеспечением, но различаются для ОС реаль­ного и защищенного режимов. Так, например, в ОС Windows базовые векторы для ведущего и ведомого контроллеров - 50h и 58h соответственно.

Таблица 2. Аппаратные прерывания (в порядке убывания приоритета)

Имя (номер1)

Вектор 2

Вектор 3

Контрол-

Описание

лер/маска

NMI

02h

Контроль канала, четность памяти

(в ХТ - сопроцессор)

IRQ0

08h

50h

#1/1 h

Таймер (канал 0 8253/8254)

IRQ1

09h

51h

#1/2h

Клавиатура

IRQ2

0Ah

52h

#1/4h

ХТ - резерв, АТ - недоступно

(подключается каскад IRQ8-IRQ15)

IRQ8

70h

58h

#2/1 h

CMOS RТС - часы реального

времени

IRQ9

71h

59h

#2/2h

Резерв

IRQ10

72h

5Ah

#2/4h

Резерв

IRQ11

73h

5Bh

#2/8h

Резерв

IRQ12

74h

5Ch

#2/10h

PS/2-Mouse (резерв)

IRQ13

75h

5Dh

#2/20h

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

IRQ14

76h

5Eh

#2/40h

НDС - контроллер НЖМД

IRQ15

77h

5Fh

#2/80h

Резерв

IRQ3

0Bh

52h

#1/4h

СОМ2, СОМ4

IRQ4

0Ch

53h

#1/10h

СОМ1, СОМ3

IRQ5

0Dh

54h

#1/20h

ХТ - НDС, АТ - LPT2, Sound

(резерв)

IRQ6

0Eh

55h

#1/40h

FDC - контроллер НГМД

IRQ7

0Fh

56h

#1/80h

LPT1 - принтер

1 Запросы прерываний 0,1,8 и 13 на шины расширения не выводятся.

2 Указаны номера векторов при работе в реальном режиме процессора.

3 Указаны номера векторов при работе в ОС Windows.

Каждому устройству, для поддержки работы которого требуются прерывания, дол­жен быть назначен свой номер прерывания. Назначения номеров прерываний выполняются с двух сторон: во-первых, адаптер, нуждающийся в прерываниях, должен быть сконфигурирован на использование конкретной линии шины (джамперами или программно). Во-вторых, программное обеспечение, поддерживающее данный адаптер, должно быть проинформировано о номере используемого векто­ра. В процессе назначения прерываний может участвовать система РnР для шин ISA и PCI, для распределения линий запросов между шинами служат специаль­ные параметры CMOS Setup. Современные ОС имеют возможность изменить на­значение запросов относительно распределения, сделанного через CMOS Setup.

После того как про изведено конфигурирование системы прерываний (проинициализирован контроллер прерываний, устройствам назначены линии запросов и установлены указатели на процедуры обработки), отработка маскируемых аппаратных прерываний происходит следующим образом:

  • устройство по событию прерывания возбуждает назначенную ему линию запроса прерывания;

  • контроллер принимает сигналы запросов от источников прерываний (сигналыIRQx) и при наличии незамаскированного запроса подает сигналобщего запроса прерывания (сигналINTR) процессору х86;

  • процессор, реагируя на запрос (когда прерывания флагом IFразрешены), со­храняет в стеке содержимое регистра флагов и адрес возврата, после чего фор­мируетшинный цикл lNТА (Interrupt Acknowledge, подтверждение прерывания), который доводится до контроллера прерываний;

  • в момент получения сигнала INTAконтроллер прерываний фиксирует состоя­ние своих входов запросов - к этому моменту их состояние могло измениться: могли появиться новые запросы или пропасть запрос от «нетерпеливого» уст­ройства. Контроллер анализирует поступившие запросы в соответствии с запрограммированной схемой приоритетов и посылает процессорувектор прерывания, соответствующий самому приоритетному незамаскированному запросу, присутствующему на входе контроллера в момент подачи шинной командыlNTA. При этом контроллер выполняет и некоторые действия в соответствии с установленной приоритетной политикой, учитывающие, какой именно вектор был послан (какой из запросов пошел на обслуживание);

  • получив вектор прерывания, процессор по его номеру вызывает соответствую­щую процедуру обработки прерывания. Если данный вектор прерывания ис­пользуется не только для аппаратных прерываний, но и для исключений и/или программных прерываний, то процедура в первую очередь должна определить, к какому из этих типов относится данное событие. Для этого процедура может обратиться к контроллеру PIC (прочитать регистр ISR) и проанализировать состояние регистров процессора. Дальнейшие шаги рассматриваются для слу­чая, когда обнаружено аппаратное прерывание; ­

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

  • процедура должна обслужить устройство-источник прерывания - выполнить «полезные» действия, связанные с событием, о котором и сигнализировало устройство. Это обслуживание должно обеспечить и снятие сигнала запроса прерывания от данного устройства. В случае разделяемых прерываний источников может быть и несколько, и все они требуют обслуживания;

  • если обработка прерывания занимает значительное время, в течение которого требуется реакция системы на более приоритетные запросы, то после критической секции в обработчик включают инструкцию SТI, устанавливающую флаг разрешения прерываний (IF) в процессоре. С этого момента возможнывложен­ные прерывания, прерывающие работу данного обработчика другой, более приоритетной процедурой;­

  • процедура обработки прерывания должна послать контроллеру команду завер­шения обработки прерывания ЕОI (End Of Interrupt), по которой контроллер разрешит последующий прием сигнала с обслуженного входа и менее приори­тетных. Это должно быть сделано после снятия сигнала прерывания от обслу­женных устройств, иначе контроллер послеЕОI пошлет повторный запрос. Обработчик прерывания, для которого запрос поступил от ведомого контрол­лера, должен послатьЕОI как ведомому, так и ведущему контроллеру. Участок обработчика, начинающийся от подачи командыЕОI до завершения (инструк­цииIRET), должен бытьнепрерываемым, то есть он являетсякритической сек­цией. Если обработчик разрешал вложенные прерывания, то перед подачей ко­мандыЕОI должна присутствовать инструкцияСLI,запрещающая прерывания;

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

Эта последовательность описана применительно к обычному контроллеру прерываний (PIC), в системах с APIC меняется способ доставки вектора прерывания от контроллера к процессору, а в прерываниях MSI меняется способ доставки сиг­нала от устройства к контроллеру APIC.