Чтение онлайн

ЖАНРЫ

Шины PCI, USB и FireWire

Гук Михаил Юрьевич

Шрифт:

Команда управления OCW2 (запись по адресу 020h или 0A0h) – завершение обслуживания прерывания (команда EOI), управление приоритетом:

• биты [7:5] задают код операции (в операциях, помеченных звездочкой, используется поле LLL в битах 2–0):

• 001 – неспецифический EOI;

• 011* – специфический EOI для запроса LLL;

• 101 – неспецифический EOI с ротацией приоритета;

• 100 – установка ротации приоритета в режиме AEOI;

• 000 – сброс ротации приоритета в режиме AEOI;

• 111* – специфический EOI с ротацией приоритета (установкой низшего приоритета для заданного уровня);

• 110* – установка низшего приоритета для заданного уровня;

• 010 – нет операции.

• биты [4:3]: 00 – признак OCW2;

• биты [2:0] – поле LLL – номер уровня, к которому относится команда (только для

команд, помеченных звездочкой).

Команда управления OCW3 (запись по адресу 020h или 0A0h) – оперативное управление контроллером:

• бит 7:0 – не используется;

• биты [6:5] – режим специального маскирования (в PC не используется): 11 —установить, 10 – сбросить, 00, 01 – не изменять;

• биты [4:3]: 01 – признак OCW3;

• бит 2 – признак команды опроса (полинга). После команды полинга на последующую команду чтения порта 020h или 0A0h контроллер ответит байтом, кодирующим запрос прерывания с максимальным приоритетом. Для PC полинг обычно не используется (бит 2 – нулевой), а контроллер передает вектор прерывания по команде INTA;

• биты [1:0] – управление чтением регистров при операциях ввода по адресу 020h или 0A0h:

• 10 – чтение IRR – регистра запросов;

• 11 – чтение ISR – регистра обслуживаемого прерывания;

• 00, 01 – не изменять выбор регистра.

Регистры ELCR, имеющиеся в современных компьютерах, позволяют селективно управлять чувствительностью входов. В этих регистрах каждый бит отвечает за режим своего входа запроса: 0 – чувствительность к положительному перепаду, 1 – чувствительность к высокому уровню. Для входов IRQ0, 1, 2, 8 и 13 (таймер, клавиатура, вторичный контроллер прерываний, часы и исключение сопроцессора), допускается чувствительность только к перепаду (соответствующие биты должны быть нулевыми, но чипсет может их и игнорировать). Линии запросов прерывания от PCI по пути ко входам инвертируются, так как на них запрос сигнализируется низким уровнем.

В IBM PC/XT/AT используется специальный режим вложенных прерываний с фиксированным приоритетом и автоматическим неспецифическим завершением; типовые байты инициализации и управления приведены в табл. 3.3. После инициализации (процедурой POST и при загрузке ОС) все неиспользуемые входы контроллеров замаскированы (на запросы прерываний реагировать не будут), а их векторы прерываний указывают на «заглушку» – процедуру с единственной инструкцией IRET. Для подключения обработчика прерывания от устройства первым делом следует загрузить обработчик в память и установить указатель на него в таблице прерываний. Далее следует размаскировать соответствующий ему вход в контроллере прерываний, для чего выполняется чтение регистра маски (адрес 21h для 8259A#1, A1h для 8259A#2), обнуление соответствующего бита (см. табл. 3.1) и запись в регистр нового значения маски. Если обработчик прерывания удаляется из памяти, предварительно должен быть замаскирован соответствующий ему вход контроллера. Все изменения в таблице прерываний должны выполняться при замаскированных прерываниях, чтобы избежать попытки использования вектора в процессе его модификации (это приведет к «вылету» программы – вызову по некорректному адресу).

Каждая процедура обработки аппаратного прерывания должна завершаться командой неспецифического EOI – посылкой OCW2 = 20h контроллеру:

• для запросов от ведущего контроллера – посылка байта 20h по адресу 20h;

• для запросов от ведомого контроллера – посылка байта 20h по адресу A0h (EOI для ведомого контроллера); затем посылка байта 20h по адресу 20h (EOI для ведущего контроллера).

Некорректно завершенная процедура не позволит повторно использовать данный или другие запросы прерываний. Заметим, что команды EOI, как и инструкция IRET, в современных ОС включены в общий обработчик прерывания. В прикладных обработчиках (в драйверах устройств) этих команд быть не должно, иначе ОС не сможет собрать цепочку обработчиков разделяемого прерывания. В среде MS-DOS команды EOI и инструкцию IRET должен подавать прикладной обработчик.


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

режиме всегда сохраняется программная совместимость с 8259A.

«Продвинутый» контроллер прерываний – APIC

Контроллер APIC в первую очередь предназначен для симметричных мультипро-цесорных систем (SMP), описанных в документе Intel «MultiProcessor Specifica-tion» (MPS), в Сети доступна версия 1.4, 1997 год. Здесь симметрия рассматривается в двух аспектах:

• симметрия памяти – все процессоры пользуются общей памятью, работают с одной копией ОС;

• симметрия ввода/вывода – все процессоры разделяют общие устройства ввода/вывода и общие контроллеры прерываний.

Система может быть симметричной по памяти, но асимметричной по прерываниям от ввода/вывода, если для них используется выделенный процессор. В x86 симметрию по прерываниям обеспечивает APIC. Система с APIC состоит из локальных контроллеров, установленных в процессорах, и контроллеров прерываний от ввода/вывода (одного или нескольких). Все контроллеры APIC соединены между собой локальной шиной, по которой они обмениваются друг с другом сообщениями. Задача каждого локального контроллера (Local APIC) – трансляция сообщений, принятых по локальной шине, в сигналы, вызывающие все аппаратные прерывания своего процессора – маскируемые (INTR), немаскируемые (NMI) и прерывания системного обслуживания (SMI). Кроме того, локальные APIC позволяют каждому процессору генерировать прерывания для других процессоров. Локальный контроллер имеет внутренний интервальный таймер, позволяющий вырабатывать прерывания через программируемый интервал времени. Контроллер прерываний от ввода/вывода (I/O APIC) преобразует запросы аппаратных прерываний от устройств в сообщения протокола локальной шины APIC. В мультипроцессорном режиме он отвечает за распределение прерываний по процессорам, для чего может использоваться статическое или динамическое распределение. В случае статического распределения для каждого номера прерывания указывается номер процессора, который его обслуживает. В случае динамического распределения каждое прерывание направляется наименее приоритетному в данный момент процессору. Этот же контроллер отвечает за распространение сигналов о системных событиях (NMI, INIT, SMI) и межпроцессорных прерываний. Прерывания в мультипроцессорных системах подробно рассмотрены в документе «Intel Architecture Software Developer's Manual Volume 3: System Programming Guide», доступном на сайтеЗдесь же ограничимся описаниями возможностей, предоставляемыми для сигнализации прерываний ввода/вывода контроллерами APIC.

Контроллер I/O APIC является частью чипсета системной платы, например, он входит в хабы ICH2 и ICH3 чипсетов Intel. В специфкации MPS определено три режима обработки прерываний:

• режим PIC (PIC Mode) – эмуляция пары PIC 8259A с традиционной передачей сигналов прерывания одному процессору (загрузочному, BSP Bootstrap Processor) по линиям INTR и NMI;

• режим «виртуальных проводов» (Virtual Wire Mode) – то же, но с подачей сигналов прерывания по локальной шине APIC. При этом I/O APIC может работать совместно с PIC 8259A, обеспечивая дополнительные возможности (в частности, дополнительные входы запросов прерываний);

• симметричный режим (Symmetric I/O Mode) – сообщения о прерываниях от устройств генерирует APIC; прерывания могут доставляться любому процессору; каждый вход запроса индивидуально программируется с помощью таблицы перенаправления прерываний (I/O Redirection Table).

Первые два режима обеспечивают полную совместимость с системой прерываний PC/AT, с программной точки зрения они эквивалентны, различия лежат в области схемотехники. По аппаратному сбросу (и включении питания) система начинает работать в одном из этих режимов. Когда система подготовится к переходу в MP-режим, APIC переводится в симметричный режим и активизирует таблицу перенаправлений прерываний (предварительно программно инициализированную).

В MP-системе присутствует таблица описаний ее компонентов; к прерываниям в этой таблице относятся описатели всех I/O APIC, а также описатели назначений всех используемых источников прерываний, связанных с I/O APIC и локальными APIC. В описателе назначения для каждого источника прерываний указывается:

• тип прерывания: векторное с передачей вектора через APIC, векторное с внешней передачей вектора (от PIC 8259A), NMI или SMI;

• полярность сигнала и его тип (уровень или перепад);

Поделиться с друзьями: