Страдания по IRQ — FAQHard.RU
Начнем с понятия «прерывание».
Прерывание — это событие, которое говорит системе, что что-то произошло, и требует вмешательства.
Такими событиями могут быть: нажатая клавиша на клавиатуре, сигнал от модема, всевозможные ошибки (вроде деления на нуль) и тому подобное.
Как вы наверняка уже слышали, существуют аппаратные и программные прерывания.
Аппаратные (IRQ — Interrupt ReQuest) — те, которые инициируются железом, а программные — софтом, причем механизмы вызова аппаратного или программного прерывания немного различаются, хотя для процессора это в принципе одно и то же.
С программными прерываниями (INT — Interrupt) просто — программа вызывает запрос на прерывание (на языке ассемблера это INT xx, где xx — номер прерывания), после чего процессор сохраняет адрес возврата в программу и флаги состояния процессора, и переходит к обработчику прерывания.
Найти адрес программы-обработчика процессору очень просто (даже думать не приходится) — первый килобайт оперативной памяти содержит адреса этих программ.
Адрес обработчика нулевого прерывания (прерывания нумеруются с нуля) расположен в самом начале, сразу за ним — адрес обработчика первого прерывания, и так далее до 255-го прерывания.
Выход из обработчика прерывания производится программой-обработчиком, причем управление передается команде, следующей за процедурой вызова прерывания.
Аппаратные прерывания организуются немного сложнее — у каждой шины (PCI, ISA и т. д.) существуют определенные линии (читай — контакты), которые отвечают за прерывания, вызываемые устройствами.
Номера аппаратных прерываний не прямо соответствуют адресам программных, то есть аппаратному IRQ 0 соответствует INT 8, и так далее по таблице.
Зачем, спрашивается, нужны эти IRQ?
Во-первых — постоянно опрашивать все устройства на предмет «а не желаете ли Вы нам что-нибудь этакое передать?» просто непозволительно с точки зрения производительности.
Процессор просто утомится это делать — гораздо легче дать устройству какие-то права, и пусть оно командует.
Во-вторых, сам механизм позволяет программам и процессору абсолютно наплевательски относиться ко всем выступлениям со стороны устройств.
То есть программа даже не замечает, что, пока она работала, произошло 843 IRQ от жестких дисков, клавиатуры, таймера и прочего неотъемлемого барахла из мира внутренностей компьютера.
К тому же, очень важен тот факт, что устройство теоретически может быть обслужено именно в тот момент, когда оно готово что-то сделать или что-то сообщить системе.
Представьте себе, что на двух разных прерываниях «висят» два устройства — радар слежения за ракетами дальнего действия и чайник.
И вдруг они одновременно вызывают свои прерывания.
Что важнее для вас — чайник или сноп ракет, который может через минуту опуститься вам на голову?
То-то же!
Для разрешения таких ситуаций и существует система приоритетов, исходя из которых процессор выбирает, какое прерывание ему обслужить в первую очередь.
1 2 3 4… 7
Что такое IRQ? | KV.by
— Да вы, молодёжь, небось, IRQ
от IDDQD не отличаете! — Обижаете! Мы еще и IDKFA помним. (по мотивам bash.org.ru) |
Мы с вами на страницах «Компьютерных вестей» продолжаем знакомиться со значением различных аббревиатур, напрямую или косвенно относящихся к компьютерам и информационным технологиям.
IRQ расшифровывается как «interrupt request», что по-русски звучит как «запрос на прерывание». Так принято называть специальный сигнал, который сообщает процессору о необходимости прервать выполнение текущей программы, сохранить её состояние в стеке, и перейти к заранее заданному адресу памяти. Сам этот процесс называется прерыванием, и нередко саму аббревиатуру IRQ для краткости расшифровывают просто как «прерывание». Поддержка прерывания обеспечивается специальным контроллером прерываний, давно уже ставшим частью чипсета. В настоящее время, конечно, информация о том, что такое прерывания, имеет даже для ИТ-специалистов больше познавательный, нежели практический характер, однако некоторое время назад всё было совершенно иначе.
Нужно отметить, что выделяют два принципиально различных типа прерываний: аппаратные и программные. Аппаратные прерывания вызываются, как несложно догадаться по их названию, различными устройствами и связаны с событиями, которые произошли с этими самыми устройствами. Это, например, прерывания, вызванные нажатиями клавиш на клавиатуре, — такие прерывания называются внешними. Внутренние прерывания вызваны действиями самого центрального процессора (скажем, делением на ноль). Программные прерывания, напротив, связаны не с какими-то событиями в аппаратной части компьютера, а вызываются явно специальными инструкциями в программном обеспечении.
Каждое прерывание имеет собственный специфический номер, который определяет адрес перехода. После того, как вызванная прерыванием процедура отработает, процессор восстанавливает работавшую до вызова прерывания программу из стека, после чего её выполнение продолжается так, будто никакого прерывания и в помине не было.
Прерывания, ко всему прочему, делятся ещё на маскируемые и немаскируемые. Что это значит? Маскируемые прерывания — это такие, которые можно запретить (с помощью установки специально определённых для этого случая битов в маске прерывания — отсюда и их название), немаскируемые же обрабатываются в любом случае.
Вадим СТАНКЕВИЧ
IRQ и обслуживающий их контроллер прерываний
Думаю, многие любознательные пользователи, наверняка не раз встречали такое сокращение, как IRQ. Его можно встретить, например, если вы любите заглядывать в программу «Менеджер устройств» в Windows. Если вы выберете любое устройство, к примеру, клавиатуру, выберете при помощи правой кнопки мыши пункт меню «Свойства», и в появившемся окне сделаете активной закладку «Ресурсы», то в списке ресурсов вы увидите надпись IRQ 01.
Содержание статьи
Для чего нужны IRQ
Аббревиатура IRQ расшифровывается как Interrupt ReQuest (запрос на прерывание). Для того, чтобы понять, для чего оно нужно, следует вспомнить подробности организации работы персонального компьютера.
Кровеносной системой компьютера, по которой обмениваются информацией процессор и прочие устройства, является системная шина. Но как вообще процессор способен отличить запросы на обработку информации, поступающие по шине от различных устройств?
Для этого и существует система аппаратных прерываний (IRQ). Каждое прерывание имеет определенный номер (нумерация начинается с 0) и закреплено за определенным устройством. Так, за клавиатурой закреплено прерывание под номером 1, отсюда и обозначение IRQ 01.
При поступлении запроса от устройства компьютер прерывает (отсюда и появился сам термин «прерывание») обработку текущей информации и начинает обработку вновь поступившего. Если прерываний несколько, то они обрабатывается в порядке приоритетов, закрепленных за каждым из них. Как правило, чем меньше номер прерывания, тем больший приоритет для процессора имеет устройство, закрепленное за этим прерыванием, но это правило соблюдается далеко не всегда.
Обслуживает обработку IRQ специальный чип, который носит название контроллера прерываний. Как правило, эта микросхема является частью центрального процессора, а иногда выделяется в отдельный чип на материнской плате. Для обработки каждого прерывания в BIOS существует специальная микропрограмма, называемая обработчиком прерывания. Адреса всех обработчиков хранятся в так называемой таблице векторов прерываний.
Раньше, в первых компьютерах семейства XT была распространена 8-разрядная шина ISA, поэтому всего устройствам было доступно 8 прерываний. С появлением 16-разрядной шины ISA их количество увеличилось до 16.
Настройка Interrupt ReQuest
Надо сказать, что прерывания, закрепленные за некоторыми устройствами, не является фиксированными и их можно изменить программно. Например, IRQ стандартно использующееся последовательным портом Com 2, может использовать и устанавливаемый в слот расширения модем. В современных компьютерах и операционных системах, поддерживающих стандарт PnP и работающих под управлением ОС Windows, значения IRQ для устройств, подключаемых в слоты шины, подбираются автоматически.
Но не все было так просто в прежние времена, когда пользователь должен был вручную устанавливать значение IRQ во многих программах, работавших под операционной системой DOS. Например, при установке в систему звуковой карты, пользователю требовалось выбрать свободное прерывание из очень небольшого числа доступных (как правило, это было IRQ 5) и указать это значение в запускаемой программе, например, в какой-нибудь игре.
Во многих BIOS имеется возможность поменять стандартные значения IRQ в программе Setup. Обычно эта опция располагается в разделах IRQ Resources или PCI/PNP Configuration.
Установка для устройства значения IRQ, равного значению IRQ, уже занятого каким-либо устройством в большинстве случаев приводит к неработоспособности одного из этих устройств или сразу обоих, а иногда чревато и зависанием компьютера.
В более современной шине PCI система управления прерываниями была кардинально изменена, а возможности управления прерываниями были расширены. Благодаря технологии IRQ Sharing, а также технологии ACPI стало возможным размещение нескольких устройств на одном канале прерывания, а у внешних устройств, подключаемых в слоты PCI, появилась возможность автоматического распределения ресурсов между собой.
Кроме того, в современных компьютерах обычно используется расширенный программируемый контроллер прерываний (APIC, Advanced Programmable Interrupt Controller), поддерживающий 24 канала Interrupt ReQuest. Расширенный контроллер прерываний выполнен в виде двух микросхем, одна из которых расположена в самом процессоре, а другая на материнской плате. Этот контроллер прерываний впервые появился в системах на основе процессоров Pentium. Однако при этом была оставлена поддержка старой системы прерываний в целях совместимости. Очередным шагом в развитии принципов обработки прерываний является технология Message Signaled Interrupts, поддержка которой появилась в линейке ОС Windows, начиная с Windows Vista.
Не следует путать аппаратные прерывания IRQ c программными прерываниями BIOS, о которых речь пойдет в отдельной статье. Программные прерывания BIOS, как правило, используются для организации работы программного обеспечения с устройствами ввода-вывода и обозначаются при помощи сокращения INT. Многие из них аналогичны по своим функциям аппаратным IRQ, но имеют при этом другие номера.
Список номеров Interrupt ReQuest в стандартной схеме для 16-битной шины ISA:
- Системный таймер
- Клавиатура
- Дополнительный контроллер прерываний (для совместимости с 8-битной шиной)
- Порты Com 1 и 3
- Порты Com 2 и 4
- Свободно (в 8-битной шине — контроллер жесткого диска)
- Контроллер гибких дисков (FDD)
- Параллельный порт LPT
- Часы реального времени CMOS
- Совмещено с IRQ 2
- Свободно
- Свободно
- Порт мыши PS/2
- Сопроцессор (в настоящее время практически не используется)
- Первый контроллер IDE
- Второй контроллер IDE
Список дополнительных номеров IRQ, которые использует расширенный контроллер прерываний APIC:
- Контроллер USB
- Интегрированная звуковая подсистема (AC’97 или HDA)
- Контроллер USB
- Контроллер USB
- Встроенная сетевая карта
- Свободно
- Свободно
- Контроллер USB 2.0
Соответствие номеров IRQ и прерываний BIOS:
Таблица соотношения аппаратных IRQ и программных INT BIOS
Заключение
Итак, в этой статье вы смогли узнать, что означает сокращение IRQ, и что представляют собой аппаратные прерывания. Они являются встроенным механизмом распределения ресурсов компьютера и предназначены для организации доступа устройств к центральному процессору. Правильное распределение и настройка IRQ позволяет избежать конфликтов между устройствами и обеспечить стабильную работу системы.
Порекомендуйте Друзьям статью:
Прерывания от внешних устройств в системе x86. Часть 1. Эволюция контроллеров прерываний
В данной статье хотелось бы рассмотреть механизмы доставки прерываний от внешних устройств в системе x86 и попытаться ответить на вопросы:
- что такое PIC и для чего он нужен?
- что такое APIC и для чего он нужен? Для чего нужны LAPIC и I/O APIC?
- в чём отличия APIC, xAPIC и x2APIC?
- что такое MSI? В чём отличия MSI и MSI-X?
- как с этим связаны таблицы $PIR, MPtable, ACPI?
Если на какой-то из этих вопросов вам интересно получить ответ или вы просто хотите ознакомиться с эволюцией контроллеров прерываний в системе x86, добро пожаловать под кат.
Введение
Все мы знаем, что такое прерывание. Для тех, кто нет, цитата из википедии:
Прерывание (англ. interrupt) — сигнал от программного или аппаратного обеспечения, сообщающий процессору о наступлении какого-либо события, требующего немедленного внимания. Прерывание извещает процессор о наступлении высокоприоритетного события, требующего прерывания текущего кода, выполняемого процессором. Процессор отвечает приостановкой своей текущей активности, сохраняя свое состояние и выполняя функцию, называемую обработчиком прерывания (или программой обработки прерывания), которая реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код.В зависимости от источника возникновения сигнала прерывания делятся на:
- асинхронные, или внешние (аппаратные) — события, которые исходят от внешних аппаратных устройств (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание (англ. Interrupt request, IRQ) — устройства сообщают, что они требуют внимания со стороны ОС;
- синхронные, или внутренние — события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение стека, обращение к недопустимым адресам памяти или недопустимый код операции;
В данной статье хотелось бы обсудить внешние прерывания IRQ.
Зачем они нужны? Допустим мы хотим выполнить какое-либо действие со входным пакетом для сетевой карты, когда он придёт. Чтобы не спрашивать сетевую карту постоянно «есть ли у тебя новый пакет?» и не тратить на это ресурсы процессора, можно использовать прерывание IRQ. Линия прерываний устройства соединяется с линией INTR процессора, и при получении пакета сетевая карта «дергает» эту линию. Процессор понимает, что для него есть информация и читает пакет.
Но что делать если устройств много? На все внешние устройства ножек процессора не напасёшься.
Чтобы решить эту проблему, придумали микросхему — контроллер прерываний.
PIC
(
вики/
osdev)
Первой была микросхема Intel 8259 PIC. 8 входных линий (IRQ0-7), и одна выходная, соединяющая контроллер с линией INTR процессора. Когда возникает прерывание от какого-либо устройства, 8259 дёргает линию INTR, процессор понимает, что какое-то устройство сигнализирует о прерывании и опрашивает PIC, чтобы понять по какой именно ножке IRQx возникло прерывание. Появляется дополнительная задержка на данный опрос, но зато количество линий прерываний увеличивается до 8.
Однако 8 линий быстро оказалось мало, и чтобы увеличить их количество стали использовать 2 контроллера 8259 (master и slave) соединённых каскадно (Dual PIC).
IRQ с 0 по 7 обрабатываются первым Intel 8259 PIC (master), а IRQ с 8 по 15 вторым 8259 PIC (slave). О возникновении прерывания CPU сигнализирует только master. Если возникло прерывание на линиях 8-15, второй PIC (slave) сигнализирует о прерывании мастеру по линии IRQ 2, и тот уже в свою очередь сигнализирует CPU. Это каскадное прерывание отнимает одну из 16 линий, но в итоге даёт 15 доступных прерываний для устройств.
Схема утвердилась, и именно её имеют ввиду, когда говорят сейчас о PIC (Programm Interrupt Controller). Впоследствии контроллеры 8259 получили некоторые улучшения, и стали называться 8259A, а эта схема вошла в состав чипсета. Во времена когда основной шиной для подключения внешних устройств была шина ISA, такой системы в целом хватало. Надо было лишь следить, чтобы разные устройства не подключались на одну линию IRQ для избежания конфликтов, так как прерывания ISA не разделяемые.
Обычно раскладка прерываний под устройства была более менее стандартная
Пример (взят отсюда):
IRQ 0 — system timer
IRQ 1 — keyboard controller
IRQ 2 — cascade (прерывание от slave контроллера)
IRQ 3 — serial port COM2
IRQ 4 — serial port COM1
IRQ 5 — parallel port 2 and 3 or sound card
IRQ 6 — floppy controller
IRQ 7 — parallel port 1
IRQ 8 — RTC timer
IRQ 9 — ACPI
IRQ 10 — open/SCSI/NIC
IRQ 11 — open/SCSI/NIC
IRQ 12 — mouse controller
IRQ 13 — math co-processor
IRQ 14 — ATA channel 1
IRQ 15 — ATA channel 2
Конфигурация и работа с микросхемами 8259 осуществляется через I/O порты:
→Документацию на 8259A можно найти
тутНа смену шине ISA пришла шина PCI. И количество устройств явно стало превосходить число 15, плюс в отличие от статической шины ISA в данном случае случае устройства могут добавляться в систему динамически. Но к счастью в данной шине прерывания могут быть разделяемыми (то есть к одной линии IRQ можно подсоединить несколько устройств). В итоге чтобы решить проблему нехватки линий IRQ, прерывания ото всех PCI устройств решили группировать в линии PIRQ (Programmable Interrupt Request).
Допустим у нас 4 линии прерываний свободно на PIC контроллере, а PCI устройств 20 штук. Мы объединяем прерывания по 5 устройств на линию PIRQx и подключаем линии PIRQx к контроллеру. При возникновении прерывания на линии PIRQx процессору придётся опросить все устройства подключённые к данной линии, чтобы понять от кого именно пришло прерывание, но в целом это решает задачу. Устройство осуществляющее связывание линий прерываний PCI в линии PIRQ часто называют PIR router.
В данном методе надо следить, чтобы линии PIRQx не подсоединялись к линиям IRQx на которых уже заведены прерывания ISA (так как это вызовет конфликты), и чтобы линии PIRQx были сбалансированы (ведь чем больше устройств мы подключили к одной линии PIRQ, тем больше устройств надо будет опрашивать процессору, чтобы понять, какое именно из этих устройств вызвало прерывание).
Замечание: на рисунке маппинг PCI device -> PIR изображён абстрактно, потому что на самом деле он несколько сложнее. В реальности каждый PCI device имеет 4 линии прерываний (INTA, INTB, INTC, INTD). У каждого PCI устройства (device) может быть до 8 функций (functions) и вот каждой функции соответствует уже одно прерывание INTx. Какую именно INTx будет дёргать каждая функция устройства определяется конфигурацией чипсета.
По сути функции это отдельные логические блоки. Например в одном PCI устройстве может быть функция Smbus controller, функция SATA controller, функция LPC bridge. Со стороны ОС каждая функция — это как отдельное устройство со своим конфигурационным пространством PCI Config.
Информацию о роутинге прерываний на PIC контроллере BIOS передавал ОС с помощью таблицы $PIR и с помощью заполнения регистров 3Ch (INT_LN Interrupt Line (R/W)) и 3Dh (INT_PN Interrupt Pin (RO)) конфигурационного пространства PCI для каждой функции. Спецификация о таблице $PIR раньше была на сайте Microsoft, но сейчас её там уже нет. Содержимое строк таблицы $PIR можно понять из PCI BIOS Specification [4.2.2. Get PCI Interrupt Routing Options] или почитать вот тут
APIC
(
вики,
osdev)
Предыдущий метод работал пока не появились многопроцессорные системы. Дело в том, что по своему устройству PIC может передавать прерывания только на один главный процессор. А хотелось бы, чтобы нагрузка на процессоры от обработки прерываний была сбалансированной. Решением данной задачи стал новый интерфейс APIC (Advanced PIC).
Для каждого процессора добавляется специальный контроллер LAPIC (Local APIC) и для маршрутизации прерываний от устройств добавляется контроллер I/O APIC. Все эти контроллеры объединяются в общую шину с названием APIC (новые системы сейчас уже соединяются по стандартной системной шине).
Когда прерывание от устройства приходит на вывод I/O APIC, контроллер направляет прерывание в LAPIC одного из процессоров. Наличие I/O APIC позволяет сбалансировано распределять прерывания от внешних устройств между процессорами.
Первой микросхемой APIC был 82489DX, это был отдельный чип, соединяющий в себе LAPIC и I/O APIC. Для создания системы из 2 процессоров нужно было 3 таких микросхемы. 2 функционировали бы как LAPIC и одна как I/O APIC. Позднее функциональность LAPIC была напрямую включена в процессоры, а функциональность I/O APIC была оформлена в чип 82093AA.
I/O APIC 82093AA содержала 24 входных вывода, а архитектура APIC могла поддерживать до 16 CPU. Для поддержки совместимости со старыми системами, прерывания 0~15 отвели под старые прерывания ISA. А прерывания от PCI устройств стали выводить на линии IRQ 16-23. Теперь можно было не задумываться о конфликтах прерываний от ISA и PCI устройств. Также благодаря увеличенному количеству свободных линий прерываний возможно стало также увеличить количество линий PIRQx.
Программирование I/O APIC и LAPIC осуществляется через MMIO. Регистры LAPIC расположены обычно по адресу 0xFEE00000, регистры I/O APIC по адресу 0xFEС00000. Хотя в принципе все эти адреса возможно переконфигурировать.32. Контроллеры могут работать в режиме совместимости с xAPIC, а могут в новом режиме x2APIC, где программирование LAPIC осуществляется не через MMIO, а через MSR регистры (что гораздо быстрее). Cудя по этой ссылке для работы этого режима необходима поддержка IOMMU.
Следует заметить, что в системе может быть несколько контроллеров I/O APIC. Например один на 24 прерывания в южном мосту, другой на 32 в северном. В контексте I/O APIC прерывания часто обозначаются GSI (Global System Interrupt). Так вот в такой системе будут GSI 0-55.
Есть ли в CPU встроенный LAPIC и какой именно архитектуры можно понять по бит-флагам в CPUID.
Чтобы система могла обнаружить LAPIC и I/O APIC, BIOS должен представить информацию о них системе либо через таблицу MPtable (старый метод), либо через таблицу ACPI (таблицу MADT в данном случае). Помимо общей информации, и в MPtable и в ACPI (на этот раз в таблице DSDT) должна содержаться информация о роутинге прерываний, то есть информация о том, какое устройство сидит на какой линии прерываний (аналог таблицы $PIR).
О таблице MPTable можно почитать в официальной спецификации. Раньше спецификация была на сайте Intel, а сейчас её можно найти только в архиве. Спецификация ACPI сейчас расположена на сайте UEFI (текущая версия 6.2). Следует отметить, что с помощью ACPI можно указать роутинг прерываний и для систем без APIC (вместо использования таблицы $PIR).
MSI
(
вики)
Предыдущий вариант с APIC хорош, но не лишён недостатков. Все эти линии прерываний от устройств усложняют схему, и увеличивают вероятности ошибок. На смену шины PCI пришёл PCI express, в котором линии прерываний решили просто-напросто убрать. Чтобы сохранить совместимость, сигналы о возникновении прерываний (INTx#) эмулируются отдельными видами сообщений. В этой схеме логическое сложение линий прерываний, которое раньше производилось физическим соединением проводов, легло на плечи PCI мостов. Однако поддержка legacy INTx прерываний — это лишь поддержка обратной совместимости с шиной PCI. На деле PCI express предложил новый метод доставки сообщений о прерываниях — MSI (Message Signaled Interrupts). В этом методе для сигнализации о прерывании устройство просто производит запись в MMIO область отведённую под LAPIC процессора.
Если раньше на одно PCI устройство (то есть на все его функции) выделялось всего 4 прерывания, то сейчас сейчас стало возможным адресовать до 32 прерываний.
В случае с MSI нет никакого sharing для линий, каждое прерывание соответствует своему устройству.
Прерывания MSI решают также ещё одну проблему. Допустим устройство проводит memory-write транзакцию, и хочет сообщить о её завершении через прерывание. Но write транзакция может быть задержана на шине в процессе передачи (о чём устройство никак не знает), и сигнал о прерывании придёт до процессора раньше. Таким образом CPU будет читать ещё невалидные данные. В случае если используется MSI, информация об MSI передаётся также как и данные, и раньше прийти просто не сможет.
Следует заметить, что прерывания MSI не могут работать без LAPIC, но использование MSI может заменить нам I/O APIC (упрощение дизайна).
В последствии данный метод получил расширение MSI-X. Теперь каждое устройство может иметь до 2048 прерываний. И стало возможным указывать индивидуально каждому прерыванию на каком процессоре оно должно выполняться. Это может быть очень полезно для высоконагруженных устройств, например сетевых карт.
Для поддержки MSI не требуется никаких дополнительных таблиц BIOS. Но устройство должно сообщить о поддержке MSI в одной из Capability в своём PCI Config, а драйвер устройства должен поддерживать работу с MSI.
Заключение
В данной статье мы рассмотрели эволюцию контроллеров прерываний, и получили общую теоретическую информацию о доставке прерываний от внешних устройств в x86 системе.
В следующей части мы посмотрим как на практике задействовать в Linux каждый из описанных контроллеров.
Ссылки:
Что такое IRQ (запрос прерывания)?
Автор Глеб Захаров На чтение 5 мин. Просмотров 1.3k. Опубликовано
Устройства отправляют IRQ процессору для запроса доступа
IRQ, сокращение от Interrupt Request, используется на компьютере для отправки именно этого – запрос на interrupt ЦП другим аппаратным обеспечением.
Запрос на прерывание необходим для таких вещей, как нажатия клавиш, движения мыши, действия принтера и многое другое. Когда устройство делает запрос на мгновенную остановку процессора, компьютер может дать устройству некоторое время для запуска своей собственной операции.
Например, каждый раз, когда вы нажимаете клавишу на клавиатуре, обработчик прерываний сообщает процессору, что ему нужно остановить то, что он в данный момент делает, чтобы он мог обрабатывать нажатия клавиш.
Каждое устройство передает запрос по уникальной линии данных, называемой каналом. Большую часть времени вы видите IRQ со ссылкой, он находится рядом с этим номером канала, который также называется IRQ number . Например, IRQ 4 может использоваться для одного устройства, а IRQ 7 – для другого.
Примечание. IRQ произносится как буквы I-R-Q, а не как erk .
Ошибки IRQ
Ошибки, связанные с запросом прерывания, обычно видны только при установке нового оборудования или изменении настроек в существующем оборудовании. Вот некоторые ошибки IRQ, которые вы можете увидеть:
IRQL_NOT_DISPATCH_LEVEL
IRQL_NOT_GREATER_OR_EQUAL
STOP: 0x00000008
STOP: 0x00000009
Примечание. См. Как исправить ошибки STOP 0x00000008 или Как исправить ошибки STOP 0x00000009, если у вас возникла одна из этих ошибок остановки.
Хотя один и тот же канал IRQ может использоваться более чем для одного устройства (при условии, что оба фактически не используются одновременно), обычно это не так. Конфликт IRQ, скорее всего, возникает, когда два устройства пытаются использовать один и тот же канал для запроса прерывания.
Так как программируемый контроллер прерываний (PIC) не поддерживает это, компьютер может зависнуть или устройства перестанут работать должным образом (или перестанут работать полностью).
Еще в первые дни Windows ошибки IRQ были обычным явлением, и для их устранения потребовалось немало проблем. Это было связано с тем, что чаще было устанавливать каналы IRQ вручную, как с DIP-переключателями, что повышало вероятность того, что более одного устройства использовали одну линию IRQ.
Однако IRQ обрабатываются намного лучше в новых версиях Windows, в которых используется технология «включай и работай», поэтому вы редко увидите конфликт IRQ или другую проблему IRQ.
Просмотр и редактирование настроек IRQ
Самый простой способ просмотра информации IRQ в Windows – с помощью диспетчера устройств. Измените параметр меню Просмотр на Ресурсы по типу , чтобы увидеть раздел Запрос прерывания (IRQ) .
Вы также можете использовать Системную информацию. Выполните команду msinfo32.exe в диалоговом окне «Выполнить» ( Ключ Windows + R ), а затем перейдите к Ресурсы аппаратного обеспечения> IRQ .
Пользователи Linux могут запустить команду cat/proc/interrupts , чтобы просмотреть сопоставления IRQ.
Возможно, вам придется изменить линию IRQ для конкретного устройства, если оно использует тот же IRQ, что и другое, хотя обычно это не требуется, поскольку системные ресурсы автоматически выделяются для новых устройств. Это только старые устройства промышленной стандартной архитектуры (ISA), которые могут нуждаться в ручной настройке IRQ.
Вы можете изменить настройки IRQ в BIOS или в Windows через диспетчер устройств. Вот как можно изменить настройки IRQ с помощью диспетчера устройств:
Важно: . Помните, что внесение неверных изменений в эти настройки может вызвать проблемы, которых у вас не было раньше. Убедитесь, что вы знаете, что делаете, и записали все существующие настройки и значения, чтобы вы знали, к чему следует вернуться, если что-то пойдет не так.
- Откройте диспетчер устройств.
- Дважды щелкните или дважды нажмите устройство, чтобы открыть его окно Свойства .
- На вкладке Ресурсы отмените выбор параметра Использовать автоматические настройки .
- Используйте раскрывающееся меню «Настройки на основе:» для выбора конфигурации оборудования, которое необходимо изменить.
- В Настройки ресурса> Тип ресурса выберите Запрос прерывания (IRQ) .
- Используйте кнопку Изменить настройки … , чтобы изменить значение IRQ.
Примечание. Если вкладка «Ресурсы» отсутствует или «Использовать автоматические настройки» неактивны или неактивны, это означает, что либо вы не можете указать ресурс для этого устройства, так как он подключен и работает или что у устройства нет других настроек, которые могут быть применены к нему.
Общие IRQ каналы
Вот для чего используются некоторые из наиболее распространенных каналов IRQ:
IRQ Line | Описание |
IRQ 0 | Системный таймер |
IRQ 1 | Контроллер клавиатуры |
IRQ 2 | Получает сигналы от IRQ 8-15 |
IRQ 3 | Контроллер последовательного порта для порта 2 |
IRQ 4 | Контроллер последовательного порта для порта 1 |
IRQ 5 | Параллельный порт 2 и 3 (или звуковая карта) |
IRQ 6 | Контроллер дискеты |
IRQ 7 | Параллельный порт 1 (часто принтеры) |
IRQ 8 | CMOS/часы реального времени |
IRQ 9 | Прерывание ACPI |
IRQ 10 | Периферийные устройства |
IRQ 11 | Периферийные устройства |
IRQ 12 | Подключение мыши PS/2 |
IRQ 13 | Числовой процессор данных |
IRQ 14 | Канал ATA (основной) |
IRQ 15 | Канал ATA (вторичный) |
Примечание. Поскольку IRQ 2 имеет предназначенную цель, любое устройство, настроенное для его использования, будет использовать IRQ 9.
Страдания по IRQ — Ferra.ru
Как видно из таблицы, свободных прерываний практически не осталось. Свободными можно считать только IRQ 5 и 10, всё остальное занято. По логике, как раз их-то и надо использовать для видеокарты и аудиоплаты. Но устройств, требующих собственное прерывание и не описанных в этой таблице, может быть куда больше. В таблицу они не включены, так как являются опциями, то есть могут быть в системе, а могут и не быть. Например: сетевая карта, контроллер RAID или SCSI, ТВ-тюнер, SATA, IEEE1394 (FireWire) и так далее. То есть, может сложиться ситуация, когда на два свободных прерывания будет восемь устройств, требующих собственного прерывания. Есть три способа решения этой проблемы. Каждый способ имеет свои плюсы и минусы.
Первый способ – это полноценное использование систем ACPI и IRQ Sharing. Если системы ACPI, а соответственно и APIC, включены, то операционная система считает, что у неё 256 прерываний, при этом реальных прерываний как было 16, так и осталось. Оставшиеся 240 прерываний – это виртуальные прерывания, которые являются клонами реальных. ACPI автоматически распределяет прерывания и не позволяет пользователю их менять. Если устройство соглашается работать в режиме кооперации с другим устройством, то есть все шансы, что ACPI посадит их на одну физическую линию. Если не контролировать данную ситуацию, то на одном физическом прерывании могут оказаться практически все устройства, установленные в компьютере, даже если есть свободные прерывания. Это приведет к сильнейшему торможению всей системы и серьезным сбоям в работе.
Решение:
Плюс данного подхода в отсутствии потребности вмешательства со стороны пользователя. То есть, делать ничего не надо. Просто воткнуть в материнскую плату видеоадаптер, процессор, память и так далее, а затем поставить операционную систему, которая нормально поддерживает ACPI. А это Windows XP или Windows 2000. Всё. Компьютер заработает. Именно в таком виде продаются почти все компьютеры, собранные в России. Подход прост: если работает и тормозит – то это не гарантийный случай, а проблема пользователя.
Второй способ заключается в отказе от использования ACPI и APIC, но с параллельным использованием IRQ Sharing. Отказ от систем ACPI и APIC означает , что операционная система знает о наличии у неё только 16 прерываний, а не 256, но система IRQ Sharing позволяет находиться на одном прерывании нескольким устройствам. При этом отслеживать картину прерываний уже можно, и выбирать соседей по своему усмотрению — тоже. То есть, если у вас есть сетевая плата и звуковая карта, и при этом нужны все порты ввода-вывода установленные в материнскую плату, то от IRQ Sharing уже никак не отделаться.
Решение:
Современные материнские платы обладают некоторыми особенностями, которые необходимо знать для корректного разведения линий прерываний по устройствам. Так, все встроенные в материнскую плату устройства чаще всего имеют жесткую привязку к слотам расширения PCI, а некоторые слоты жестко привязаны друг к другу. К примеру, у вас есть встроенная в материнскую плату звуковая карта, при этом она автоматически кооперируется с устройством в третьем слоте PCI. Если вы вставите сетевую плату в третий слот, то встроенная звуковая карта и сетевая плата будут висеть на одном прерывании, чтобы вы ни делали. Решить этот конфликт можно, переставив сетевую карту в другой слот. Или другой пример: пятый и первый слот PCI привязаны друг к другу, и установив два устройства в эти слоты, вы автоматически вешаете их на одну линию прерывания. Опять же, это лечится переустановкой одного из устройств в другой слот. К сожалению, современные материнские платы имеют столько встроенных устройств, что найти свободный слот PCI без запаралеленных устройств бывает невозможно. В этом случае всё зависит от устройства.
Все локальные устройства, находящиеся в компьютере можно разбить на четыре группы по степени зависимости от прерывания.
К первой группе можно отнести видеокарту и контроллеры жестких дисков. Эти устройства должны иметь выделенное прерывание и ни в коем случае не должны его делить с чем бы то ни было. То есть, на одном прерывании с видеокартой не должно находиться ни одного устройства, в противном случае страшные глюки и тормоза гарантированы. Ко второй группе можно отнести менее ресурсоемкие устройства, например аудиоплату, ТВ-тюнер, софтверный внутренний модем (WinModem) или сетевую карту. Эти устройства могут сосуществовать на одном прерывании с устройствами из групп, которые мы опишем ниже. Тем не менее, если есть возможность, устройства, относящиеся ко второй группе, тоже желательно разместить на отдельном прерывании, так как при серьезной нагрузке возможны различные сбои. Вторая группа — эта зона риска, так как абсолютно непонятно, какое устройство с каким может войти в конфликт при использовании уже задействованных ими прерываний. Стабильность в этом случае достигается методом проб и ошибок. Единственное, что можно сказать однозначно – на одном прерывании не стоит размещать два устройства второй группы, это приведет к сбоям в работе. Третья группа — это все порты ввода вывода, USB, COM-порты, возможно LPT, IEEE1394 (FireWire), аппаратные внутренние модемы и прочие устройства не сильно загружающие компьютер. Устройства из третьей группы могут присоединяться к устройствам из второй и к самим себе. То есть, на одном прерывании могут висеть все порты USB или же один порт USB висит вместе с аудиокартой или ТВ-тюнером. Также можно повесить контроллер FireWire вместе с USB или СOM портом. Ну а четвертая группа — это устройства, не требующие прерываний. Это довольно редкая группа, и тем не менее, она существует. Например, к этой группе относились ускорители трехмерной графики от 3dfx – Voodoo и Voodoo 2. Да, кстати, если вдруг вы видите что у вашей видеокарты или USB-портов прерывание отсутствует (буковки NA — то есть Not Available), то это не значит что у вас такая редкая, хорошая видеокарта. Это с большой долей вероятности значит, что у вашего компьютера проблемы, которые надо решать немедленно. У устройств, не требующих прерывания, в инструкции об этом написано большими буквами.
Надо понимать, что все вышеперечисленные устройства могут обладать уникальными свойствами в зависимости от производителя или прошивки. Все вышеописанные правила работают не всегда и не однозначно. У вас легко может оказаться ТВ-тюнер или сетевая карта, которая напрочь откажется работать с кем-либо в паре. Или наоборот, ваша звуковая карта может вдруг повести себя стабильно на одном прерывании вместе с ТВ-тюнером. Конфликтовать умеют даже устройства, относящиеся к четвертой группе. Чаще всего они начинают глючить, если поставить их в запаралеленный с AGP слот. При этом на понимание всех особенностей конкретно вашего железа может уйти значительное время.
Пожалуй, второй способ — самый часто используемый. При некотором понимании вопроса можно создать практически безглючный компьютер, в котором все устройства, установленные в него, будут функционировать. Минусом второго способа является потеря функций ACPI и наивысшая из всех способов сложность. Для рядового пользователя достижение нормальных результатов может занять долгое время и вызовет сильный перегруз мозгов. Плюс к этому, компьютер больше не будет сам выключаться (его придется выключать кнопкой «Power») и не будет засыпать. Что же касается режима Hybernate, то он полностью сохранит свою функциональность.
Третий способ — самый правильный, но требует жертв.
Суть способа в полном отказе от систем ACPI и IRQ Sharing. А устройства, которые лезут на одну линию IRQ нужно просто отключать. Must be only one!, как говорил товарищ из фильма «Горец».
Решение:
Для начала нужно отключить все порты, которые не используются. Не пользуетесь LPT – отключить. Не пользуетесь вторым COM-портом и дополнительными USB-каналами – та же судьба, отключить. Каждое устройство должно иметь отдельное прерывание и ни с кем не пересекаться. Это вопрос приоритетов и потребностей, потому что при использовании данного способа половина компьютера оказывается «в отключке», зато всё остальное работает как часы. Плюс этого способа в возможности использования устаревших операционных систем и сложных программ. Например, для установки WindowsNT 4.0 на достаточно сложную машину этот способ просто необходим. Также плюс такого подхода — максимальное быстродействие всей системы без проблем со стабильностью. Если есть возможность, желательно идти именно этим путем.
Описание прерываний IRQ в Windows
Прерывание позволяет элементу аппаратного обеспечения задействовать вычислительное время центрального процессора. Это важно для работы таких компонентов компьютера, как сетевой адаптер, поскольку объем буфера сетевого адаптера ограничен.
Если центральный процессор не извлечет данные из буфера сетевого адаптера, они будут утрачены. Далее представлены распространенные варианты использования запросов прерывания.
Линии запроса прерываний Windows
Уровень IRQ | Типичное использование | Комментарий |
0 | Таймер | Зарезервировано для системной платы |
1 | Клавиатура | Зарезервировано для системной платы |
2 | Каскадное прерывание с IRQ 9 | Доступно в зависимости от системной платы |
3 | COM2 или COM4 | |
4 | COM1 или COM3 | |
5 | LPT2 | Обычно это прерывание свободно, так как на компьютерах редко устанавливается два параллельных порта. Прерывание в основном используется звуковыми адаптерами |
6 | Контроллер привода гибких дисков | |
7 | LPT1 | Это прерывание может использоваться звуковым адаптером |
8 | Часы реального времени | Зарезервировано для системной платы |
9 | Каскадное прерывание на IRQ 2 | Подключено непосредственно к IRQ 9. Иногда настроить программное обеспечение на использование IRQ 9, на самом деле указывая IRQ 2 |
10 | Не используется | Обычно это прерывание используется сетевыми адаптерами, многие из которых запрограммированы именно на применение IRQ 10 |
11 | Не используется | Обычно предоставляется контроллерам SCSI |
12 | PS/2 и шинный адаптер мыши | Если PS/2 или шинная мышь не используется, эту линию запроса прерывания можно передать другому устройству |
13 | Математический сопроцессор | Используется для передачи сигналов об ошибках |
14 | Контроллер жесткого диска | Если жесткие диски IDE не используются, это прерывание можно использовать для другого устройства |
15 | Некоторые компьютеры используют это прерывание для вторичного контроллера IDE | Если вторичный контроллер IDE не используется, линию запроса прерывания можно использовать для другого устройства |
Примечание: что касается попытки освобождения линии IRQ, которая не используется устройствами системной платы. Если BIOS позволяет вручную отключать устройства и системные настройки не аннулируются программным обеспечением Plug-and-Play, то проблем не должно возникнуть. В противном случае необходимо проверить, можно ли применять линию запроса прерывания, которая зарезервирована для неиспользуемого устройства системной платы.
Что такое IRQ (запрос прерывания)?
Обновлено: 02.04.2019 компанией Computer Hope
Сокращение от запроса прерывания. , IRQ. — это сигнал, отправляемый процессору компьютера для его немедленной остановки (прерывания). Компьютеры, совместимые с IBM, получают IRQ 15 и получают приоритет в компьютере в соответствии с важностью устройства. Сегодня большинству пользователей не нужно беспокоиться о настройках IRQ, потому что все устройства теперь подключены и работают, что означает, что они настраиваются автоматически.В следующей таблице представлен обзор традиционных IBM IRQ, портов ввода-вывода и связанных с ними устройств.
IRQ | УСТРОЙСТВО | ПОРТ В / В | АВТОБУСНЫЙ СЛОТ | КАРТА Тип |
---|---|---|---|---|
00 | Системный таймер | Нет | НЕТ | НЕТ |
01 | Клавиатура | Нет | НЕТ | НЕТ |
02 | Каскадный контроллер 2-й PIC | Нет | НЕТ | НЕТ |
03 | COM 2 и 4 | COM 2: 02F8h (02F8 или 2F8) COM 4: 02E8h (02E8 или 2E8) | ДА | 8 или 16 бит |
04 | COM 1 и 3 | COM 1: 03F8h (03F8 или 3F8) COM 3: 03E8h (03E8 или 3E8) | ДА | 8 или 16 бит |
05 | Звук Параллельный порт 2 | ПАРАЛЛЕЛЬНЫЙ ПОРТ 2: 0278h — 0378h | ДА | 8 или 16 бит |
06 | Дискета | 03F0 — 03F5 | ДА | 8 или 16 бит |
07 | Параллельный порт 1 | 0278h — 0378h | ДА | 8 или 16 бит |
08 | Часы реального времени | Нет | НЕТ | НЕТ |
09 | Перенаправленное IRQ 2 Открыто Сеть доступна | Нет | ДА | 8 или 16 бит |
10 | Открыть | Нет | ДА | 8 или 16 бит |
11 | Открыть SCSI Видео | ВИДЕО: 3B0-3DF | ДА | 8 или 16 бит |
12 | Открыть PS2 | Нет | ДА | 8 или 16 бит |
13 | Сопроцессор | Нет | НЕТ | НЕТ |
14 | Открыть Первичный жесткий диск Контроллер жесткого диска | 1-я IDE: 1F0 | ДА | 8 или 16 бит |
15 | Открыть 2-й жесткий диск (дополнительный) | 2-я IDE: 170 | ДА | 8 или 16 бит |
Технически имеется 16 IRQ, если считать IRQ 0.Системный таймер и все IRQ выше 15 называются виртуальными IRQ и обрабатываются как операционной системой, так и APIC.
Аббревиатуры компьютеров, Устройство, DMA, Конфликт оборудования, Условия использования оборудования, Прерывания, IRQL, Ресурс
Что такое номер запроса на прерывание на ПК?
Этот контент был заархивирован и больше не поддерживается Университетом Индианы. Информация здесь может быть неточной, а ссылки могут быть недоступны или надежны.Запрос на прерывание — это сигнал от аппаратного устройства на вашем компьютер к вашему процессору.Когда аппаратному устройству требуется, чтобы ЦП выполнял что-то (например, перемещение курсора при перемещении мыши), устройство отправляет запрос на прерывание в ЦП. Поскольку процессор может получить несколько эти запросы прерывания одновременно с разных устройств на одном путь (например, последовательный порт или шина PCI), ему нужен путь различать их. Для этого компьютер присваивает Номер запроса прерывания (номер IRQ) для каждого устройства и его путь к процессору.
Запрос на прерывание, сделанный через номер IRQ устройства, сигнализирует о том, что ЦП, что устройство имеет запрос, требующий обработки.(Аппаратное обеспечение устройство, требующее внимания со стороны ЦП, часто называют «нуждаются в обслуживании».) Номера IRQ назначаются во время загрузки. к каждому аппаратному устройству, которое в нем нуждается.
Устройству требуется номер IRQ, если оно может обеспечить ввод CPU или начать действие. Номер IRQ — это числовой способ присвоить приоритет устройств по отношению к ЦП. Чем ниже значение номер IRQ, тем важнее необходимость ввода или действия для происходить. Некоторые устройства, которым назначены номера IRQ, включают контроллеры дисководов (гибких и жестких дисков), мыши, клавиатуры и звуковая карта.
Конфликт IRQ возникает, когда два устройства пытаются использовать одно и то же IRQ. номер, а операционная система или материнская плата не имеют механизма для приспособление к этому. Эти конфликты были обычным явлением в более старых версиях Windows, но редко встречаются в современных версиях операционной системы. система. Конфликты IRQ приводят к ошибкам, потому что ЦП не может определить какому устройству действительно принадлежит номер IRQ. Конфликт IRQ может вызвать проблемы, достаточно серьезные, чтобы привести к зависанию или блокировке вашего компьютера.
Однако с момента появления Windows 2000 истинное IRQ конфликты случаются крайне редко по причинам, перечисленным ниже.В связи к достижениям в операционной системе, старый совет по разделению IRQ что применялось к Windows 95, 98, Я и NT больше не верны; это ты не следует пытаться разрешить конфликты IRQ в Windows 2000 и XP путем присвоения устройствам разных номеров IRQ вручную, как предполагается, что эти устройства имеют общие номера IRQ. В Windows 2000 и XP, принудительное присвоение IRQ вручную серьезно повлияет на как работает операционная система.
Чтобы исправить конфликт IRQ в старой версии Windows, вам нужно необходимо изменить номер IRQ на одном из устройств на неиспользуемый IRQ количество.Вы можете внести это исправление одним из нескольких способов: включая изменение положения перемычек или микропереключателей на устройстве, внесение изменений в настройку программного обеспечения устройства или внесение изменений в диспетчере устройств. Для получения дополнительной информации см. АРХИВИРОВАНИЕ: что такое диспетчер устройств в Windows и как его использовать?
КонфликтыIRQ — меньшая проблема с современными версиями Windows для следующие причины:
- Введение управления PCI / IRQ в Windows 95 OSR2 предоставил механизм для постепенного разделения IRQ между устройствами.
- Полное принятие Plug and Play производителями оборудования побудили их разрабатывать свои устройства и драйверы, чтобы они были более гибкими в использовании IRQ, которые они будут принимать.
- Постоянное развитие расширенной конфигурации и мощности Стандарт интерфейса (ACPI) позволил разработать BIOS материнской платы и операционные системы, которые принимают номера IRQ, указанные выше 15.
В Windows 2000 и XP с материнскими платами с расширенным Программируемый контроллер прерываний (APIC), до 24 IRQ доступный.Стандарт ACPI теоретически допускает до 255 виртуальные прерывания путем сопоставления таблицы виртуальных прерываний с одним IRQ (обычно IRQ 9 или 11), и позволяя Windows, а не BIOS определяет приоритет прерывания устройства запрос.
Типичное назначение IRQ для ПК
В приведенном ниже списке указаны некоторые типичные назначения IRQ для ПК:
IRQ # | Устройство |
---|---|
0 | Системный таймер |
1 | Клавиатура |
2 | Каскад из IRQ 9 |
3 | COM-порт 2 или 4 |
4 | COM-порт 1 или 3 |
5 | Параллельный (принтерный) порт 2 или звуковые карты |
6 | Контроллер дисковода гибких дисков |
7 | Параллельный порт (принтер) 1 |
8 | Часы реального времени |
9 | Видео |
10 | Открыть |
11 | Открыть |
12 | Мышь PS / 2 |
13 | Сопроцессор |
14 | Основной контроллер IDE (жесткие диски) |
15 | Вторичный контроллер IDE (жесткие диски) |
4.3. Прерывания и настройка IRQ Red Hat Enterprise Linux 6
Запрос прерывания (IRQ) — это запрос на обслуживание, отправляемый на аппаратном уровне. Прерывания могут отправляться либо по выделенной аппаратной линии, либо по аппаратной шине в виде информационного пакета (прерывание с сообщением или MSI).
Когда прерывания разрешены, получение IRQ побуждает переключиться на контекст прерывания. Код диспетчеризации прерывания ядра извлекает номер IRQ и связанный с ним список зарегистрированных подпрограмм обслуживания прерывания (ISR) и по очереди вызывает каждую ISR.ISR подтверждает прерывание и игнорирует избыточные прерывания от того же IRQ, а затем ставит отложенный обработчик в очередь, чтобы завершить обработку прерывания и не дать ISR игнорировать будущие прерывания.
В файле / proc / interrupts
указано количество прерываний на ЦП на устройство ввода-вывода. Он отображает номер прерывания, номер прерывания, обработанного каждым ядром ЦП, тип прерывания и список драйверов, зарегистрированных для получения этого прерывания, через запятую.(См. Дополнительную информацию на странице руководства по proc (5): man 5 proc
)
IRQ имеют связанное свойство «affinity», smp_affinity
, которое определяет ядра ЦП, которым разрешено выполнять ISR для этого IRQ. Это свойство можно использовать для повышения производительности приложения путем присвоения привязки прерывания и привязки потока приложения к одному или нескольким конкретным ядрам ЦП. Это позволяет разделить строку кэша между указанным прерыванием и потоками приложения.
Значение сродства прерывания для конкретного номера IRQ хранится в соответствующем файле / proc / irq / IRQ_NUMBER / smp_affinity
, который может просматривать и изменять пользователь root. Значение, хранящееся в этом файле, представляет собой шестнадцатеричную битовую маску, представляющую все ядра ЦП в системе.
Например, чтобы установить привязку прерывания для драйвера Ethernet на сервере с четырьмя ядрами ЦП, сначала определите номер IRQ, связанный с драйвером Ethernet:
# grep eth0 / proc / interrupts 32: 0140 45 850264 PCI-MSI-край eth0
Используйте номер IRQ, чтобы найти соответствующий файл smp_affinity
:
# cat / proc / irq / 32 / smp_affinity f
Значение по умолчанию для smp_affinity — f
, что означает, что IRQ может обслуживаться на любом из процессоров в системе.Установка этого значения на 1
, как показано ниже, означает, что только ЦП 0 может обслуживать это прерывание:
# эхо 1> / proc / irq / 32 / smp_affinity # cat / proc / irq / 32 / smp_affinity 1
Запятые могут использоваться для разделения значений smp_affinity
для дискретных 32-битных групп. Это требуется в системах с более чем 32 ядрами. Например, следующий пример показывает, что IRQ 40 обслуживается на всех ядрах 64-ядерной системы:
# cat / proc / irq / 40 / smp_affinity ffffffff, ffffffff
Чтобы обслуживать IRQ 40 только на верхних 32-ядерных 64-ядерных системах, вы должны сделать следующее:
# эхо 0xffffffff, 00000000> / proc / irq / 40 / smp_affinity # cat / proc / irq / 40 / smp_affinity ffffffff, 00000000
В системах, которые поддерживают управление прерыванием , изменение smp_affinity
IRQ настраивает оборудование таким образом, чтобы решение об обслуживании прерывания конкретным ЦП принималось на аппаратном уровне без вмешательства ядра.
Запрос прерывания — обзор
11.2 Обработчики исключений / прерываний
В Cortex-M3 обработчики прерываний могут быть полностью запрограммированы на C, тогда как в ARM7 обычно используется обработчик сборки для обеспечения сохранения всех регистров и в случае систем с поддержкой вложенных прерываний процессор должен переключиться в другой режим, чтобы предотвратить потерю информации. Эти шаги не требуются в Cortex-M3, что значительно упрощает программирование.
На языке C обработчик прерывания может иметь вид
void UART1_Handler (void) {
… // обрабатывающая задача для периферийного устройства
return;
}
Для пользователей CMSIS-совместимой библиотеки драйверов устройств имя обработчика прерывания должно совпадать с именем обработчика прерывания, определенным поставщиком микроконтроллера (MCU), чтобы гарантировать правильность настройки вектора в таблице векторов. Вы можете найти имя функции-обработчика в таблице векторов внутри кодов запуска. Например, для пользователя Keil Microcontroller Development Kit это файл startup_
Для пользователей компиляторов ARM RealView или Keil Microcontroller Development Kit для ясности можно добавить необязательное ключевое слово __irq. Например:
__irq void UART1_Handler (void) {
… // обработать запрос IRQ для периферийного устройства
… // Отменить запрос IRQ в периферийном устройстве
return;
}
В ассемблере простой обработчик исключений может выглядеть так:
irq1_handler
; Обработать запрос IRQ
…
; Отменить запрос IRQ в периферийном устройстве
…
; Возврат прерывания
BX LR
Отмена установки прерывания внутри подпрограммы обслуживания прерывания зависит от конструкции периферии. Если периферийное устройство генерирует IRQ в виде импульсов, этот шаг не требуется. С Cortex-M3, если периферийное устройство генерирует IRQ в форме импульсов, NVIC может сохранить запрос как статус ожидающего запроса. Как только процессор входит в обработчик исключений, статус ожидания сбрасывается автоматически.Это отличается от традиционных процессоров ARM тем, что периферийное устройство должно поддерживать свой IRQ до тех пор, пока оно не будет обслуживаться, потому что контроллеры прерываний, разработанные для предыдущих ядер ARM, таких как ARM7TDMI, не имеют ожидающей памяти.
В некоторых случаях, когда периферийное устройство может сгенерировать несколько IRQ за короткий период, отмена утверждения IRQ в периферийном устройстве может потребоваться условно, чтобы гарантировать, что ни один запрос не будет пропущен.
Во многих случаях обработчику прерывания требуется больше, чем R0 – R3 и R12 для обработки прерывания, поэтому нам может потребоваться сохранить и некоторые другие регистры.Пользователям языка C не нужно беспокоиться об этом, поскольку функция C автоматически сохраняет дополнительные регистры, если это необходимо. Для пользователей ассемблера их обработчики прерываний должны выполнять PUSH и POP в стеке, чтобы гарантировать сохранение значений R4 – R11.
В следующем примере сохраняются все регистры, которые не сохраняются во время процесса стекирования, но если некоторые из регистров не используются обработчиком исключений, их можно исключить из сохраненного списка регистров:
irq1_handler
PUSH {R4– R11, LR}; Сохранить все несохраненные регистры
; при штабелировании
; Обработать запрос IRQ
…
; Отменить запрос IRQ в периферийном устройстве (необязательно)
…
POP {R4 – R11, PC}; Восстановление регистров и возврат прерывания
Поскольку POP является одной из инструкций, которые могут запускать возврат прерывания, мы можем объединить восстановление регистра и возврат прерывания в одной инструкции.
В зависимости от конструкции периферийного устройства обработчику исключений может потребоваться запрограммировать периферийное устройство для отмены запроса на исключение. Если запрос исключения от периферийного устройства к NVIC является импульсным сигналом, то обработчику исключений нет необходимости очищать запрос исключения.В противном случае обработчик исключений должен очистить запрос исключения, чтобы он больше не ожидал ответа сразу после выхода из исключения. В традиционных процессорах ARM периферийное устройство должно поддерживать свой IRQ до тех пор, пока оно не будет обслуживаться, потому что контроллеры прерываний, разработанные для предыдущих ядер ARM, не имеют ожидающей памяти.
С Cortex-M3, если периферийное устройство генерирует IRQ в форме импульсов, NVIC может сохранить запрос как статус ожидающего запроса. Как только процессор входит в обработчик исключений, статус ожидания сбрасывается автоматически.Таким образом, обработчик исключений не должен программировать периферийное устройство для очистки IRQ.
IRQ и прерываний — Ссылка на ядро Linux
Каждый аппаратный контроллер устройства, способный выдавать запросы прерывания, имеет выходную линию, обозначенную как запрос прерывания (IRQ). Все существующие линии IRQ подключены к входным контактам аппаратной схемы, называемой контроллером прерываний, который выполняет следующие действия:
1. Контролирует линии IRQ, проверяя наличие повышенных сигналов.
2. Если на линии IRQ появляется повышенный сигнал:
а. Преобразует полученный повышенный сигнал в соответствующий вектор.
г. Сохраняет вектор в порту ввода-вывода контроллера прерываний, позволяя ЦП считывать его через шину данных.
г. Посылает повышенный сигнал на вывод INTR процессора, то есть выдает прерывание.
г. Ожидает, пока ЦП не подтвердит сигнал прерывания путем записи в один из портов ввода / вывода программируемых контроллеров прерываний (PIC); когда это происходит, очищает строку INTR.
3. Возврат к шагу 1.
Строки IRQ нумеруются последовательно, начиная с 0; поэтому первая строка IRQ обычно обозначается как IRQ0. Вектор Intel по умолчанию, связанный с IRQn, равен n + 32. Как упоминалось ранее, отображение между IRQ и векторами может быть изменено путем выдачи подходящих инструкций ввода-вывода портам контроллера прерываний.
Каждая линия IRQ может быть выборочно отключена. Таким образом, PIC может быть запрограммирован на отключение IRQ. Таким образом, PIC может быть приказано прекратить выдачу прерываний, которые относятся к данной строке IRQ, или разрешить их.Отключенные прерывания не теряются; PIC отправляет их в ЦП, как только они снова включаются. Эта функция используется большинством обработчиков прерываний, поскольку она позволяет им последовательно обрабатывать IRQ одного и того же типа.
Выборочное включение / выключение IRQ — это не то же самое, что глобальное маскирование / демаскирование маскируемых прерываний. Когда флаг IF регистра eflags сброшен, каждое маскируемое прерывание, выдаваемое PIC, временно игнорируется CPU. Инструкции на ассемблере cli и sti соответственно снимают и устанавливают этот флаг.Маскирование и демаскирование прерываний в многопроцессорной системе сложнее, поскольку каждый ЦП имеет свой собственный регистр eflags. Мы рассмотрим эту тему в главе 5.
Традиционные PIC реализуются путем соединения «каскадом» двух внешних микросхем типа 8259A. Каждый чип может обрабатывать до восьми различных входных линий IRQ. Поскольку выходная линия INT ведомого PIC подключена к выводу IRQ2 ведущего PIC, количество доступных линий IRQ ограничено 15.
4.2.1.1 Расширенный программируемый контроллер прерываний (APIC)
Предыдущее описание относится к PIC, разработанным для однопроцессорных систем.Если система включает в себя один ЦП, выходную линию главного PIC можно напрямую подключить к выводу INTR ЦП. Однако, если система включает в себя два или более ЦП, этот подход больше не работает, и требуются более сложные PIC.
Возможность доставлять прерывания каждому ЦП в системе имеет решающее значение для полного использования параллелизма архитектуры SMP. По этой причине Intel представила новый компонент, обозначенный как Расширенный программируемый контроллер прерываний ввода-вывода (I / O APIC), который заменяет старый программируемый контроллер прерываний 8259A.Более того, все современные процессоры Intel включают в себя локальный APIC. Каждый локальный APIC имеет 32-битные регистры, внутренние часы, устройство локального таймера и две дополнительные линии IRQ LINT0 и LINT1, зарезервированные для локальных прерываний. Все локальные APIC подключены к внешнему APIC ввода / вывода, что дает возможность системе с несколькими APIC.
На рис. 4-1 схематично показана структура системы с несколькими APIC. Шина APIC соединяет APIC ввода-вывода «внешнего интерфейса» с локальными APIC. Линии IRQ, поступающие от устройств, подключаются к APIC ввода-вывода, который, следовательно, действует как маршрутизатор по отношению к локальным APIC.В материнских платах Pentium III и более ранних процессоров шина APIC была последовательной трехлинейной шиной; Начиная с Pentium 4, шина APIC реализована посредством системной шины. Однако, поскольку шина APIC и ее сообщения невидимы для программного обеспечения, мы не будем приводить дальнейшие подробности.
Рисунок 4-1. Мульти-APIC система
Рисунок 4-1. Система с несколькими APIC
APIC ввода / вывода состоит из набора из 24 линий IRQ, таблицы перенаправления прерываний с 24 записями, программируемых регистров и блока сообщений для отправки и получения сообщений APIC по шине APIC.В отличие от контактов IRQ 8259A, приоритет прерывания не связан с номером контакта: каждая запись в таблице перенаправления может быть индивидуально запрограммирована для указания вектора и приоритета прерывания, процессора назначения и способа выбора процессора. Информация в таблице перенаправления используется для преобразования каждого внешнего сигнала IRQ в сообщение для одного или нескольких локальных устройств APIC через шину APIC.
Запросы на прерывание, поступающие от внешних аппаратных устройств, могут распределяться между доступными ЦП двумя способами:
Статическое распределение
Сигнал IRQ доставляется на локальные APIC, перечисленные в соответствующей записи таблицы перенаправления.Прерывание доставляется одному конкретному процессору, подмножеству процессоров или всем процессорам сразу (широковещательный режим).
Динамическое распределение
Сигнал IRQ доставляется в локальный APIC процессора, который выполняет процесс с самым низким приоритетом.
Любой локальный APIC имеет программируемый регистр приоритета задачи (TPR), который используется для вычисления приоритета текущего выполняемого процесса. Intel ожидает, что этот регистр будет изменяться в ядре операционной системы при каждом переключении процесса.
Если два или более ЦП имеют самый низкий приоритет, нагрузка распределяется между ними с использованием метода, называемого арбитражем. Каждому ЦП назначается приоритет арбитража в диапазоне от 0 до 15 в регистре приоритета арбитража локального APIC. Каждый локальный APIC имеет уникальное значение
Каждый раз, когда прерывание доставляется в ЦП, соответствующий ему приоритет арбитража автоматически устанавливается на 0, в то время как приоритеты арбитража каждого другого ЦП увеличиваются. Когда регистр приоритета арбитража становится больше 15, он устанавливается на предыдущий приоритет арбитража выигравшего ЦП, увеличенный на 1.Следовательно, прерывания распределяются циклически между процессорами с одинаковым приоритетом задачи. м
[1] Локальный APIC Pentium 4 не имеет регистра приоритета арбитража; механизм арбитража скрыт в схеме арбитража шины. В руководствах Intel говорится, что если ядро операционной системы не обновляет регулярно регистры приоритета задач, производительность может быть неоптимальной, поскольку прерывания всегда могут обслуживаться одним и тем же процессором.
Помимо распределения прерываний между процессорами, система с несколькими APIC позволяет процессорам генерировать межпроцессорные прерывания.Когда ЦП желает отправить прерывание другому ЦП, он сохраняет вектор прерывания и идентификатор целевого локального APIC в регистре команд прерывания (ICR) своего собственного локального APIC. Затем сообщение отправляется через шину APIC на локальный APIC цели, который, следовательно, выдает соответствующее прерывание своему собственному процессору.
Межпроцессорные прерывания (короче, IPI) являются частью архитектуры SMP и активно используются Linux для обмена сообщениями между процессорами (см. Раздел 4.6.1.7 позже в этом
Большинство современных однопроцессорных систем включают в себя микросхему ввода-вывода APIC, которую можно настроить двумя разными способами:
• Как стандартный внешний PIC типа 8259A, подключенный к ЦП. Локальный APIC отключен, и две локальные линии IRQ LINT0 и LINT1 сконфигурированы, соответственно, как выводы INTR и NMI.
• В качестве стандартного APIC внешнего ввода / вывода. Локальный APIC включен, и все внешние прерывания принимаются через APIC ввода-вывода.
4.2.2 Исключения
Микропроцессоры 80 x 86 создают примерно 20 различных исключений. 12] Ядро должно предоставлять специальный обработчик исключений для каждого типа исключения. Для некоторых исключений блок управления ЦП также генерирует код аппаратной ошибки и помещает его в стек режима ядра перед запуском обработчика исключений.
Читать здесь: T2 Точное число зависит от модели процессора
Была ли эта статья полезной?
Что такое запросы прерывания (IRQ) — используйте Windows
Перед тем, как начать
Цели: Узнать, что такое IRQ, почему они используются, каковы назначения IRQ по умолчанию и как они настраиваются.
Предварительные требования: предварительных требований нет.
Ключевые термины: прерывание, устройство, рис, провод, ЦП, IRQ, микросхема, время, назначено, по умолчанию, метод, контроллер
Введение в IRQ
IRQ — это метод, который устройства используют для прерывания процессора и времени обработки запроса. На самом деле существует два основных способа, которыми устройства могут получать время обработки от ЦП. Первый метод, о котором мы говорим, называется опрос . Обратите внимание, что этот метод больше не используется.Пул дает каждому устройству определенное количество времени для взаимодействия с ЦП. У каждого устройства есть шанс, независимо от того, действительно ли оно хочет связываться с ЦП. По прошествии определенного времени следующее устройство получает возможность взаимодействовать с ЦП. Таким образом, при опросе каждое устройство в системе может взаимодействовать с ЦП в течение фиксированного промежутка времени, независимо от того, действительно ли этому устройству необходимо взаимодействовать с ЦП, и достаточно ли времени для отправки устройством всех сообщений на ПРОЦЕССОР.
Второй метод реализации связи между ЦП и другими устройствами в системе называется прерыванием . В этом методе только устройства, которые должны взаимодействовать с ЦП, используют время ЦП. Устройства могут использовать столько времени, сколько им нужно.
Устройства в нашем компьютере должны привлекать внимание ЦП, когда им нужно поработать. В старых системах использовался метод опроса, что было не очень эффективно. Современные ПК используют метод прерывания. Метод прерывания реализуется с помощью каналов запроса прерывания (IRQ).IRQ позволяют конкретному устройству в системе привлечь внимание ЦП.
Как работает IRQ
Первое, что мы должны знать, это то, что каждый слот расширения, каждое устройство или контроллер на материнской плате имеет один реализованный провод, который мы называем проводом прерывания . Этот провод обычно обозначается как «INT» и подключается к процессору. Всякий раз, когда ток подается на провод прерывания, подключенное устройство привлекает внимание ЦП. Провод INT идет к определенному выводу на ЦП.Когда ЦП обнаруживает ток на этом выводе, он пытается обслужить запрашивающее устройство.
Проблема в том, что у ЦП есть только один физический разъем прерывания, и ЦП обычно должен обслуживать множество устройств в системе. Все системы сегодня имеют более одного устройства. Для поддержки нескольких устройств мы фактически используем дополнительный чип, называемый программируемым контроллером прерываний (PIC) . PIC размещается между процессором и другими устройствами в системе. Провод прерывания от каждого устройства подключен к микросхеме PIC.Таким образом, у нас есть несколько устройств, которые могут прерывать работу ЦП через микросхему PIC.
ПИК
Устройство, требующее внимания, подает ток на свой провод прерывания, но вместо того, чтобы идти прямо к ЦП, этот ток улавливается микросхемой PIC. Затем микросхема PIC подает ток на провод прерывания ЦП. CPU подтверждает прерывание PIC, а затем PIC сообщает CPU, какое устройство фактически запросило прерывание. Затем ЦП будет обслуживать запрос от устройства.
Помните, что каждому устройству в системе ПК должен быть назначен IRQ. Если у устройства нет IRQ, оно не может обслуживаться ЦП. Кроме того, два устройства не могут использовать один и тот же канал прерывания, но у нас есть исключение из этого правила. Например, устройства PCI могут совместно использовать прерывания, а устройства других типов — нет. Старые системы ПК использовали 8-битную шину ISA. Это означало, что он имел восемь прерываний, исходящих от микросхемы PIC, поэтому мы могли иметь максимум 8 различных устройств, подключенных к шине.Современные компьютеры имеют 16 прерываний. Восемь прерываний добавляются путем каскадного соединения двух микросхем PIC.
Два PIC
Провод прерывания от второй микросхемы PIC присоединен ко второму проводу прерывания на первой микросхеме PIC. Второй провод прерывания на второй микросхеме PIC подключен ко второму проводу прерывания на самой материнской плате. Таким образом мы теоретически получаем 16 IRQ. Однако, поскольку мы каскадировали два PIC, на самом деле у нас есть только 15 используемых прерываний.Первый PIC в системных сервисах прерывает с нуля по седьмой, а второй PIC прерывает с 8 по 15.
IRQ по умолчанию
Провод прерывания 0 (ноль) всегда назначается системным часам (тактовый импульс). Прерывание 1 используется клавиатурой. Прерывание 2 не используется (оно передается каскадом на PIC 2). Прерывание 3 назначается последовательным портам COM2 и COM4, а прерывание 4 назначается последовательным портам COM1 и COM3. Прерывание 5 назначается второму параллельному порту LPT2 (это прерывание часто является бесплатным, поэтому оно используется для звуковой карты).Прерывание 6 назначено дисководу гибких дисков. Прерывание 7 назначено LPT1, первому параллельному порту. Прерывание 8 назначено часам реального времени. Прерывание 9 часто используется USB. Доступно прерывание 10. Прерывание 11 часто используется для сетевых карт. Прерывание 12 часто используется для мыши. Прерывание 13 используется для математического сопроцессора. Интерфейс 14 используется для первичного интерфейса IDE, а прерывание 15 используется для вторичного интерфейса IDE.
Доступные IRQ
Говоря о прерываниях 2 и 9, мы говорим о каскадных PIC.Два PIC связаны через IRQ 2 и 9. Провод прерывания от PIC 2 переходит во второй провод прерывания на PIC 1. Из-за этого второй провод прерывания на PIC 1 не может использоваться никаким другим устройством в система. Прерывание 9 на PIC 2 используется для обслуживания устройства в нашей системе вместо провода прерывания 2 на PIC 1. Это потому, что провода 2 и 9 на самом деле являются одним и тем же проводом. Если мы назначим провод 2 какому-либо устройству, система заменит его проводом 9, который находится на втором PIC.Помните, что из-за каскадирования провода 2 и 9 фактически являются одним и тем же проводом.
Провода прерывания 0, 1 и 8 жестко подключены к материнской плате. Это означает, что мы не можем их переназначить. Другие прерывания по умолчанию могут использоваться, если устройство по умолчанию не установлено в системе. Например, если на нашей материнской плате не установлен параллельный порт, IRQ 5 и 7 доступны бесплатно. То же самое и с последовательными портами, хотя все они являются частью назначения IRQ по умолчанию.
Преимущество шины PCI
До появления шины PCI прерывания были серьезной проблемой, поскольку прерываний никогда не было достаточно для всех устройств в системе. Благодаря шине расширения PCI разные устройства в системе могут фактически использовать одно и то же прерывание. Таким образом, шина PCI нарушает правило, согласно которому никакие два устройства не могут использовать один и тот же канал прерывания.
Как настроить IRQ
В системах без plug-and-play мы должны вручную настроить каждое устройство с собственным IRQ.Обычно это делается с помощью перемычек или программируемой EEPROM на устройстве. Если мы настроим два разных устройства с одним и тем же IRQ, возникнет конфликт IRQ. Конфликты IRQ могут вызывать случайные зависания системы. IRQ для устройства plug-and-play устанавливается с помощью программы установки программного драйвера для этого устройства.
Совместное использование IRQ обрабатывается операционной системой автоматически. Например, USB-контроллер на компьютере обычно использует IRQ 9, но мы можем подключить до 127 USB-устройств к одному USB-контроллеру.Следовательно, все устройства на этом единственном контроллере USB также будут использовать IRQ 9.
Нравится:
Нравится Загрузка …
СвязанныеВстроенная ОС, поддержка и услуги | ОСРВ, гипервизор
Встроенные системы стали более сложными и программными, чем когда-либо. Позвольте нам предоставить программную основу и строительные блоки, которые помогут вам сосредоточиться на предоставлении дополнительных функций и программного обеспечения, а не на обслуживании ОС.
Предлагаем:
- Продукты Foundation, включая ОСРВ QNX Neutrino, платформу разработки программного обеспечения QNX (SDP) с POSIX-совместимой средой разработки и гипервизор QNX.
- Сертифицированные по безопасности варианты нашей продукции, которые ускорят ваши усилия по сертификации.
- Решения безопасности, включая наше решение для безопасного обновления по беспроводной сети (OTA) и наше уникальное решение для анализа двоичного кода.
- Plus промежуточное ПО для ускорения ваших усилий по разработке и ускорения вывода на рынок.
Для успеха нужно нечто большее, чем просто программное обеспечение. Вам нужен партнер, который знает, что работа не сделана, пока вы не приступите к работе.
Предлагаем:
- Разнообразные пакеты поддержки и технические советы от разработчиков, инженеров и архитекторов.
- Лучшая в своем классе документация по продукту, дополненная нашей базой знаний. Пакеты поддержки платы
- для широкого спектра процессоров Arm® и x86.
- Управляемый жизненный цикл продукта с регулярными обновлениями и исправлениями.
Если вам нужно расширить свою команду, запустить проект или сертифицировать продукты, вы можете положиться на наших экспертов по встроенным системам и ОС, которые предоставят вам необходимые знания и опыт.
Предлагаем:
- Услуги безопасности и решения для двоичного анализа
- Разработка под заказ
- Службы безопасности, которые помогут вам получить сертификаты IEC 61508, ISO 26262, IEC 62304 и EN 5012X.
- Учебные курсы, разработанные и проводимые экспертами в области функциональной безопасности и разработки встроенного программного обеспечения.