Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Аппаратные прерывания




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

Процессоры семейства х86 поддерживают таблицу, содержащую определения до 256 процедур обслуживания, и различают четыре источника прерываний:

· внутренние прерывания процессора и сопроцессора;

· немаскируемые внешние прерывания;

· маскируемые внешние прерывания;

· программно-вызываемые прерывания.

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

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

Конечно, программно во время обслуживания прерывания возможно умышленное или случайное изменение указателя или содержимого стека, и тогда инструкция IRET «отправит» процессор по другому адресу, в результате чего компьютер может и зависнуть. Прерывания могут быть и вложенными, если процедура обслуживания установит флаг IF. Тогда возникает опасность переполнения стека, поскольку каждое «вложение» будет использовать его для своих целей. Переполнение стека может также являться причиной зависаний. Длинные процедуры обработки со сброшенным флагом IF могут привести к потере системного времени, поскольку «часы» операционной системы используют аппаратные прерывания от таймера.

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

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

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

Немаскируемые прерывания обрабатываются процессором независимо от состояния флага разрешения прерывания IF. К ним относятся прерывания, приходящие по линии NMI, а для процессоров, поддерживающих режим системного управления, еще и по линии SMI#.

Сигнал на линию NMI приходит от схем контроля паритета памяти, от линии IOCHK шины ISA или SERR# шины PCI. В машинах класса AT сигнал NMI блокируется до входа процессора установкой в «I» бита 7 порта 070h, отдельные источники - битами 2, 3 порта 061h (см. примечание). Идентифицировать источник NMI позволяют биты 6, 7 регистра 061h.

В XT NMI вызывается еще и математическим сопроцессором при возникновении исключения. Запретить NMI позволяет обнуление бита 7 порта 0A0h; отдельные источники блокируются битами 4, 5 регистра 061h; идентифицируют источники биты 6, 7 регистра 062h (см. п. 2.7.1).

Если во время обработки немаскируемого прерывания повторно появляется сигнал NMI, то вложенного прерывания не будет - повторный вызов обработчика NMI возможен только после исполнения инструкции IRET.

Прерывание SMI возникает от схем чипсета, участвующих в управлении энергопотреблением. Это прерывание имеет наивысший приоритет и обслуживается несколько иначе, чем «классические» прерывания. Здесь процессор не выполняет вызов процедуры, описанной в таблице прерываний, а переходит в режим SMM. Первым делом в памяти SMRAM (а не в стеке!) автоматически сохраняется контекст процессора, после чего начинается исполнение кода по определенному адресу в памяти SMRAM. В режиме SMM обычные прерывания (в том числе и немаскируемые) запрещены, так что процессор не нуждается в обычной памяти, которая для него и недоступна. При необходимости обработка прерываний может быть и разрешена, но это требует некоторых действий с таблицей прерываний. Выход из режима SMM происходит по выполнении инструкции RSM, завершающей процедуру обработки SMI. По этой инструкции автоматически восстанавливается сохраненный (или умышленно модифицированный) контекст процессора, процессор выходит в обычное адресное пространство памяти (снимается сигнал SMIACT#) и переходит к выполнению прерванной программы. В отличие от обычных прерываний, по окончании обслуживания которых процессор переходит к исполнению инструкции, следующей за исполненной до начала обработки прерывания, расширенные средства SMM предполагают возможность рестарта некоторых инструкций. Рестарт (повторное исполнение) возможен для инструкции останова (HALT) и инструкций ввода/вывода. Возможность рестарта инструкции ввода/вывода используют, например, когда прикладная программа (или системный драйвер) пытается обратиться операцией ввода/вывода к периферийному устройству, находящемуся в «спящем» режиме. Системная логика в этом случае должна выработать сигнал SMI# раньше сигнала готовности RDY#, завершающего шинный цикл рестартуе-мой инструкции ввода/вывода. Обработчик SMI «разбудит» устройство, после чего операция ввода/вывода рестартует и прикладное ПО (или драйвер) «не заметит», что устройство пребывало в спячке. Таким образом, управление потреблением может быть организовано на уровне BIOS способом, совершенно прозрачным для программного обеспечения (в том числе и ОС).

Обработка маскируемых прерываний может запрещаться инструкцией DI и разрешаться - EI (или другим способом воздействия на флаг процессора IF). Эти прерывания обслуживаются контроллером, программно-совместимым с микросхемой 8259А, входящей еще в комплект поддержки процессоров 8086/88.

Такой контроллер имеет 8 входов запросов прерывания IRQx от внешних источников и выход запроса INTR, по которому запрос поступает на одноименный вход процессора. При обработке запроса INTR процессор формирует шинный цикл подтверждения прерывания INTA, в котором контроллер передает по шине данных 8-битный вектор прерывания. Этот вектор и является номером, по которому ссылка на процедуру обработки прерывания хранится в таблице прерываний. Исторически сложилось так, что контроллер 8259А требует двух шинных циклов INTA, из которых процессоры 80х86 для передачи вектора используют только второй (первый цикл использовался для подачи кода инструкции прерывания еще в процессоре 8080, и циклов было даже три), В дань совместимости и современные процессоры выполняют этот лишний цикл системной шины.

Таблица 7.1
Контроллеры 8259А допускают каскадное соединение: ведущий (Master) контроллер подключается ко входу запроса прерываний процессора, а ко входам этого контроллера могут подключаться ведомые (Slave) контроллеры. Таким образом, можно увеличить число линий источников прерываний до 8´8=64. Каскадирование применяется в машинах класса AT, где используются два контроллера. Ведущий контроллер 8259А#1 обслуживает запросы 0, 1, 3-7. К его входу 2 подключен ведомый контроллер 8259А#2, который обслуживает запросы 8-15. При этом используется вложенность приоритетов — запросы 8-15 со своим рядом убывающих приоритетов вклиниваются между запросами 1 и 3 ведущего контроллера, приоритеты запросов которого также убывают с ростом номера. В XT каскадирование не применялось, и один 8259А обслуживал все 8 линий запросов.

На входы контроллеров прерываний поступают запросы от системных устройств (клавиатура, системный таймер, CMOS-таймер, сопроцессор) и от плат расширения. Традиционно все линии запросов, не занятые перечисленными системными устройствами, присутствуют на слотах шины ISA/EISA. Эти линии обозначаются как IRQx и имеют общепринятые предназначения, приведенные в табл. 7.1. В таблице отражены и приоритеты прерываний - запросы расположены в порядке их убывания. Номера векторов, соответствующих линиям запросов контроллеров, система приоритетов и некоторые другие параметры задаются программно при инициализации контроллеров. Эти основные настройки сохраняются традиционными для обеспечения совместимости с программным обеспечением.

Назначения номеров прерываний выполняются с двух сторон: во-первых, адаптер, нуждающийся в использовании прерываний, должен быть сконфигурирован на использование конкретной линии шины (джамперами или программно). Во-вторых, программное обеспечение, поддерживающее данный адаптер, должно быть проинформировано о номере используемого вектора. Поскольку линии запросов прерываний в компьютере, насыщенном дополнительными адаптерами, являются самым дефицитным ресурсом, возникает желание использовать эти линии разделяемо между несколькими устройствами. Тогда обработчик прерывания одного устройства, определив, что источник - не его, вызывал бы обработчик другого устройства, конкурирующего по линии запроса. Однако в шине ISA прерывание вырабатывается по положительному перепаду сигнала на линии запроса - разработчики XT сэкономили целую микросхему ТТЛ (своеобразный «плевок в вечность»). Это плохо по двум причинам: во-первых, как известно из общей цифровой схемотехники, такой способ подачи сигнала имеет меньшую помехозащищенность, чем срабатывание по отрицательному перепаду. Если кто обращал внимание на сообщение «Spurious Interrupt was detected on controller...», иногда появляющееся на консоли сервера NetWare, то оно относится именно к обнаружению этих помех. В операционных системах, неактивно использующих прерывания (а к ним, в первую очередь, относится MS-DOS), эти явления незаметны и обычными тестами (PC Check, Checkit) не выявляются. Во-вторых, такой способ подачи сигнала отрезает путь к нормальному разделяемому использованию линий, для которого полностью пригоден способ подачи сигнала по низкому уровню. Поскольку традиционный контроллер позволяет задавать чувствительность - уровень (Level) или перепад (Edge) - только для всех входов одновременно, в общем случае разделяемые прерывания на шине ISA вместе с корректной работой системных устройств использоваться не могут. Однако некоторые чипсеты системных плат, реализующие и функции контроллеров прерываний, допускают индивидуальное управление чувствительностью каждого входа. Тогда при соответствующих возможностях конфигурируемости BIOS Setup и применяемых адаптеров разделяемые прерывания технически реализуемы.

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

Для запросов прерывания с шины PCI используются 4 линии запросов прерывания, которые обозначают как INTR А, В, С, D. Эти линии работают по низкому уровню, что дает возможность их разделяемого использования. Линии циклически сдвигаются в слотах (рис. 7.1) и независимо коммутируются на доступные линии IRQx с помощью конфигурационных регистров чипсета. Линии IRQx, используемые шиной PCI, становятся недоступными для шины ISA. «Дележку» линий между шинами, а также управление чувствительностью отдельных линий выполняют настройки опций BIOS Setup, а также система РnР. В опциях настройки «ISA» или «Legacy» подразумевают использование линий IRQx традиционными адаптерами шины ISA (статическое распределение), a «PCI/PnP» - использование адаптерами шины PCI или адаптерами РnР для шины ISA (динамическое распределение).

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

Для реализации системы прерываний процессоры Pentium, Pentium Pro и Pentium II имеют встроенный контроллер прерываний APIC (Advanced Programmable Interruption Controller). Внутренние контроллеры процессоров связаны между собой по шине APIC, к которой подключена и «ответная часть» чипсета, преобразующая запросы аппаратных прерываний в сигналы протокола APIC. В операционном режиме такая связка также совместима с 8259А.




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


Дата добавления: 2014-01-07; Просмотров: 4105; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.