Программа irq что это

Программа irq что это

Дорогие читатели! Редакция сайта iXBT.com обращается к вам с просьбой отключить блокировку рекламы на нашем сайте.

Редакция сайта iXBT.com обращается к вам с просьбой отключить блокировку рекламы на нашем сайте.

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

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

Спасибо вам за поддержку!

Источник: www.ixbt.com

7.3. Irq

Прерывания подразделяются на аппаратные (маскируемые и немаскируемые) и программные. Программные прерывания, собственно, прерываниями не являются, это способ вызова определенных процедур. Но процессором программные прерывания обрабатываются как один из типов прерываний.

What is IRQ? NCII Review

То, что в соответствии с PCI-спецификациями должны уметь все PCI-карты, но в действительности очень редко реализуется, называется «IRQ-Sharing». Теоретически это означает, что несколько компонент должны довольствоваться одним и тем же IRQ.

Но поскольку лишь немногие PCI-карты общаются друг с другом столь гармонично, «Windows 9x» ставит в соответствие каждой карте, насколько это возможно, собственный IRQ. Сложности конфигурирования системных ресурсов, их распределения между сетевыми и звуковыми картами, 3D-ускорителями, стандартными последовательными и параллельными устройствами, а ныне еще видео- и DVD-декодерами постепенно ослабляются с массовым внедрением USB-шины, точнее массовым распространением USB-периферии. Правда, шина USB сама занимает один IRQ. Но зато она обязана включить в систему без дальнейшего расходования ресурсов все периферийные устройства, будь то мышь, клавиатура, сканер или видеокамера.

Еще один термин. «Polling mode» — работа устройства без использования прерываний. Это встречается при работе с простыми SCSI-контроллерами на шине ISA.

Системное прерывание. Генерируется 91 раз за 5 сек. В данном качестве применяется со времени первого PC.

Системное прерывание, генерируемое контроллером клавиатуры.

Каскадировано (связано) с IRQ9. Могут возникнуть конфликты, когда одновременно на IRQ2 и IRQ9 должны работать различные устройства. Его использование системой сохраняется для совместимости.

Используется вторым коммуникационным адаптером (UART2). Какое же устройство будет его генерировать? Это может быть второй последовательный порт COM2 (интегрирован на материнской плате), внутренний модем, настроенный на COM2 или COM4, или инфракрасный адаптер. Можно отключить UART2, но присвоить IRQ3 ничему не удастся. Делит одно и то же IRQ3 с COM4 (при наличии последнего).

Урок 14. Прерывания в компьютере

Возможен конфликт при одновременном использовании.

Используется первым коммуникационным адаптером. Все практически идентично: генерируется первым последовательным портом COM1, модемом на COM1 или COM3 (за исключением инфрапорта). Делит одно и то же IRQ4 с COM3 (при наличии последнего). В системах с подключенной к COM1 мышью использовать COM3 не следует.

Прерывание изначально предназначалось для использования вторым параллельным портом LPT2. Практического применения такое решение не нашло, поэтому IRQ5 перешло в разряд свободных. В IBM XT на IRQ5 «висел» жесткий диск. Через некоторое время «Creative Labs», создавая звуковую карту «Sound Blaster Pro», нашла применение прерыванию. С тех пор IRQ5 стало излюбленным для большинства звуковых ISA-карт.

Звуковые PCI-карты также иногда используют это прерывание для эмуляции «SB Pro». IRQ5 можно привязать к слоту PCI.

Прерывание используется контроллером флоппи-дисковода, начиная с первых ПК. Ныне его можно отключить, если перейти на совместимый с обычными дискетами накопитель LS-120 с интерфейсом EIDE. Однако прерывание все равно не может быть использовано: ISA-карты на работу с ним не рассчитаны, и к слоту PCI привязать его нельзя. Может быть использовано для привода на на магнитной ленте.

По умолчанию прерывание первого параллельного порта LPT1. При отключенном порте (если принтер отсутствует или рассчитан на USB) может использоваться различными устройствами: сетевыми, ISDN-картами. Это также «запасное» место для звуковых карт.

Часы реального времени (RTC)

Системное прерывание со времени первых IBM AT.

Каскадировано с IRQ2. В остальном может использоваться по усмотрению.

Может быть использовано по усмотрению. Устаревшие IDE-контроллеры на старых звуковых картах иногда используют это IRQ.

Может быть использовано по усмотрению, часто используется видеокартами. В современных ПК обычно резервируется для шины USB. При отключении последней в BIOS может быть задействовано иначе.

свободен или PS/2-мышь

Если используется мышь, это IRQ в большинстве случаев выдается лишь по разрешению BIOS. Почти всегда прерывание свободно.

Системное прерывание. Изначально применялось арифметическим сопроцессором, который в первых ПК являлся отдельной микросхемой. Ныне это прерывание зарезервировано для совместимости со старым ПО.

По разрешению BIOS может быть использовано в SCSI- системах.

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

15 — наивысший приоритет,

— эти системные компоненты жестко зафиксированы и их конфигурация не может быть изменена.

При установке в слоты карт расширения необходимо помнить о следующем:

— слоту AGP и первому слоту PCI присваивается один и тот же номер прерывания,

— если слотов PCI пять, то один номер разделяют также четвертый и пятый слоты,

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

IRQ n Assigned to — (прерывание с номером n назначено на. ). Использование этой опции возможно, если установлен «ручной» режим конфигурации устройств. В данной опции каждому прерыванию системы может быть назначен один из следующих типов устройств:

«Legacy ISA» (классические ISA-карты) — обычные карты для ISA-шины, такие как модемы или звуковые карты, без поддержки технологии «Plug. Эти карты требуют назначения прерываний в соответствии с документацией на них.

«PCI/ISA PnP» (устройства для шин PCI или ISA с поддержкой «Plug) — этот параметр устанавливается только для карт расширения на PCI- или ISA-шинах с поддержкой «Plug.

Несколько устаревшая опция «AMI BIOS» может носить название «IRQn» , а ее значения следующие: «ISA/EISA» и «PCI/PnP». При этом IRQ12 оказывается «в списке», если предварительно опция «Mouse Support» (или ей подобная) отключена. Точно также IRQ14 и 15 будут доступны, если будет отключен IDE-интерфейс или один из каналов.

IRQ n Used By ISA — (прерывание с номером n используется на шине ISA). Параметр может принимать значения:

«No/ICU» (нет/конфигурационная утилита для ISA) — если установлено это значение, то BIOS может распоряжаться прерыванием по своему усмотрению. Для DOS настройка параметров в этом случае может также выполняться с помощью программы «ISA Configuration Utility» от «Intel»,

«Yes» (да) — означает принудительное освобождение прерывания для какой-либо карты на шине ISA, не поддерживающей «Plug. Рекомендуется всегда указывать «Yes» для таких карт и нужных им прерываний, так как в противном случае BIOS может назначить прерывание, жестко используемое какой-либо картой на ISA, другой карте, что может вызвать даже прекращение нормальной работы компьютера.

Для этой опции аналогичной может также оказаться опция «IRQ n» со значениями «Available» (по умолчанию) и «Used By ISA Card». Стоит напомнить ряд возможных прерываний: 3, 4, 5, 7, 9, 10, 11, 12, 14, 15. Первое значение позволяет системе решать проблему распределения ресурсов через автоконфигурирование, второе же напрямую назначает прерывание ISA-карте. При этом также может быть использована утилита ICU.

IRQ to PCI VGA — установка этой опции в «Disabled» позволит сэкономить одно прерывание благодаря тому, что графические карты при работе с обычным набором офисных приложений не используют IRQ. Ситуация меняется при установке 3D-акселератора.

Выделение аппаратного прерывания для графической карты требуется уже не только для ее корректной работы в системе, а становится необходимым для организации обработки огромных массивов информации, для взаимодействия между центральным процессором, системной памятью и видеопроцессором. Это же справедливо и для случая, когда карта содержит, например, дополнительный модуль MPEG-декодера. Ведь в этом случае используется режим «Busmastering», при котором карта расширения отбирает у процессора управление потоком данных. Необходимо напомнить, что режим «Busmastering» требует по одному IRQ для каждой из карт, поддерживающих этот режим.

Опция может носить название «Assign IRQ For VGA» или, как в «AMI BIOS», «Allocate IRQ to PCI VGA» со значениями «Yes» и «No».

Modem Use IRQ — в таком виде данная опция, как правило, располагается в разделах BIOS, посвященных расширенным установкам режимов ACPI. Если опция, подобная «Modem Ring Resume», включена, то тогда надо указать номер аппаратного прерывания, используемого модемом. Входящий звонок тогда должен вызвать пробуждение системы.

PCI Device Search Order — эта удивительная опция «AMI BIOS» позволяет изменить порядок PCI-слотов, что может пригодиться при расстановке прерываний в процессе конфигурирования ресурсов. По сути меняется последовательность сканирования слотов, производимого BIOS при начальных проверке и конфигурировании системы. Может принимать значения:

PCI IRQ Activated by — (прерывания активизируются по . ). Выбор метода, с помощью которого контроллер прерываний будет распознавать запрос на прерывание от устройств на шине PCI. Смысл опции — в минимизации времени «захвата» шины и дальнейшей передачи данных от устройства. По умолчанию предлагается значение «Level», и менять его не следует, если только это не будет необходимо для конкретного случая, о чем должно быть написано в руководстве к устройству. Параметр может принимать значения:

Читайте также:
Redmine что это за программа и нужна ли она

«Level» (уровень) — контроллер прерываний реагирует только на логический уровень сигнала,

«Edge» (перепад) — контроллер прерываний реагирует только на перепад уровня сигнала.

Аналогичная опция, но укороченная — «PCI IRQ Actived By». Также аналогичная опция, но с редко встречающимся наименованием — «Edge/Level Select». Необходимо добавить, что в очень редких случаях может быть предоставлена возможность установки реакции на прерывание от конкретного устройства. Тогда значение «Edge» имеет смысл установить для интерфейса PCI IDE.

PCI/PNP ISA IRQ Resource Exclusion — в данном случае это специализированное подменю «Phoenix BIOS», с помощью которого можно индивидуально блокировать отдельные аппаратные прерывания и предоставить их стандартным ISA-картам (т.е. не PlugAvailable» (по умолчанию) означает, что прерывание может быть использовано PCI- и PReserved» означает, что прерывание не может быть использовано этими же устройствами.

Аналогичная опция и с теми же значениями может называться «IRQ Reservation».

PCI Slot n IRQ Priority — в данной опции понятие «priority» (приоритет, первоочередность) не несет того смысла, с которым пользователь столкнулся выше при рассмотрении темы «арбитраж». Речь идет по сути о назначении PCI-слотам конкретного аппаратного прерывания. Здесь нет никаких противоречий с информацией об автоконфигурировании PCI-устройств. Дело в том, что существуют промышленные изделия (платы расширения для PCI-шины), которые лишены встроенного BIOS, настраиваемые на определенное прерывание и тем самым как бы «выпадающие» из обычного рассмотрения PCI-устройств. По сути такие PCI-платы не являются 100%-ными PAuto», «IRQ 3», «IRQ 4″,»IRQ 5» и т.д. Понятно, что выбор «Auto» приводит ситуацию в режим автоконфигурирования.

Report No FDD For WIN 95 — (сообщение об отсутствии накопителя на гибких дисках для «Windows 95»). Параметр используется, как правило, в сетевых компьютерах без флоппи-дисковода или в случае необходимости размещения в компьютере устройства, для которого не хватает прерывания. При выборе «Yes» и одновременном выборе «Disable» в параметре «Onboard FDC Controller» (обычно в разделе «Integrated Peripherals» «BIOS Setup») «Windows 9x» освободит IRQ6, занимаемое контроллером флоппи-дисковода, для использования другим устройством. Может принимать значения:

«Yes» (или «Enabled») — освободить IRQ6,

«No» (или «Disabled») — не освобождать (независимо от того, есть ли флоппи-дисковод или нет).

Значительно реже встречается аналогичная опция под названием «FDD IRQ Can Be Free». Выбор значений параметра также аналогичен: «Yes» и «No».

Slot n IRQ for VGA — опция, позволяющая назначить конкретное прерывание для конкретного PCI-слота с учетом того, что в этот слот установлен графический адаптер. Из приведенных выше опций уже понятно, что это также небольшое меню с количеством опций, равным количеству слотов. Их число может равняться 4, 5 и даже 6. Поскольку речь идет об одном слоте, то остальные опции блокируются («Disabled»).

Trigger Method — опция, позволяющая оптимизировать установку IRQ для PCI-слотов и могущая принимать значения «Auto» или «Forced». Для PCI- карты необходимо установить значение «Auto». Эта установка проверяет, нуждается ли PCI-карта в IRQ. Если карта не нуждается в IRQ, то система оставляет его для других ресурсов.

Установка «Forced» используется в том случае, если BIOS автоматически не определяет, нуждается ли PCI-карта в прерываниях. Если установлено значение «Forced», то выделенный IRQ может использовать только данная PCI-карта.

Примечание! Если используемый в системе SCSI-контроллер с NCR-чипом не работает, то для этого контроллера необходимо установить прерывание IRQ15 и опцию «Level Trigger».

USB IRQ — (прерывание шины USB). Параметр разрешает/запрещает назначение прерывания для контроллера шины USB. Поскольку в системе может не хватать свободного прерывания, разрешать этот параметр следует только при наличии устройства на шине USB. Также были замечены конфликты при одновременном использовании USB-устройств и звуковых карт на чипах «Aureal», и это было связано с распределением прерываний. Так что требуется внимательность. Может принимать значения:

«Enabled» — разрешено, «Disabled» — запрещено.

Опция может носить название «Assign IRQ For USB» или «Use An IRQ for USB». Для последней опции параметрами были «No» и «Yes».

Use IRQ12 For Mouse Port — предварительно имеет смысл ознакомиться с расположенной выше опцией «PS/2 Mouse Function Control». В данной опции значениями параметра служат «No» и «Yes», что абсолютно идентично указанной опции и относится к использованию в системе PS/2-мыши.

Источник: studfile.net

Что такое IRQ (запрос прерывания)?

Устройства отправляют 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 с помощью диспетчера устройств:

Важно: . Помните, что внесение неверных изменений в эти настройки может вызвать проблемы, которых у вас не было раньше. Убедитесь, что вы знаете, что делаете, и записали все существующие настройки и значения, чтобы вы знали, к чему следует вернуться, если что-то пойдет не так.

  1. Откройте диспетчер устройств.
  2. Дважды щелкните или дважды нажмите устройство, чтобы открыть его окно Свойства .
  3. На вкладке Ресурсы отмените выбор параметра Использовать автоматические настройки .
  4. Используйте раскрывающееся меню «Настройки на основе:» для выбора конфигурации оборудования, которое необходимо изменить.
  5. В Настройки ресурса> Тип ресурса выберите Запрос прерывания (IRQ) .
  6. Используйте кнопку Изменить настройки … , чтобы изменить значение 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.

Источник: solutics.ru

Прерывания от внешних устройств в системе x86. Часть 1. Эволюция контроллеров прерываний

В данной статье хотелось бы рассмотреть механизмы доставки прерываний от внешних устройств в системе x86 и попытаться ответить на вопросы:

  • что такое PIC и для чего он нужен?
  • что такое APIC и для чего он нужен? Для чего нужны LAPIC и I/O APIC?
  • в чём отличия APIC, xAPIC и x2APIC?
  • что такое MSI? В чём отличия MSI и MSI-X?
  • как с этим связаны таблицы $PIR, MPtable, ACPI?

Введение

Все мы знаем, что такое прерывание. Для тех, кто нет, цитата из википедии:

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

В зависимости от источника возникновения сигнала прерывания делятся на:

  • асинхронные, или внешние (аппаратные) — события, которые исходят от внешних аппаратных устройств (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание (англ. Interrupt request, IRQ) — устройства сообщают, что они требуют внимания со стороны ОС;
  • синхронные, или внутренние — события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение стека, обращение к недопустимым адресам памяти или недопустимый код операции;

В данной статье хотелось бы обсудить внешние прерывания IRQ.

Зачем они нужны? Допустим мы хотим выполнить какое-либо действие со входным пакетом для сетевой карты, когда он придёт. Чтобы не спрашивать сетевую карту постоянно «есть ли у тебя новый пакет?» и не тратить на это ресурсы процессора, можно использовать прерывание IRQ. Линия прерываний устройства соединяется с линией INTR процессора, и при получении пакета сетевая карта «дергает» эту линию. Процессор понимает, что для него есть информация и читает пакет.

Но что делать если устройств много? На все внешние устройства ножек процессора не напасёшься.

Чтобы решить эту проблему, придумали микросхему — контроллер прерываний.

PIC

Первой была микросхема 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 порты:

Чип Регистр I/O port
Master PIC Command 0x0020
Master PIC Data 0x0021
Slave PIC Command 0x00A0
Slave PIC Data 0x00A1

→Документацию на 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

Предыдущий метод работал пока не появились многопроцессорные системы. Дело в том, что по своему устройству 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. Хотя в принципе все эти адреса возможно переконфигурировать.

Как и в случае с PIC первоначально отдельные микросхемы позже вошли в состав чипсета.

В дальнейшем архитектура APIC получила модернизацию и новый вариант получил название xAPIC (x — extended). Сохранена обратная совместимость с предыдущим вариантом. Количество возможных CPU в системе увеличилось до 256.

Следующий виток развития архитектуры получил название x2APIC. Количество возможных CPU в системе увеличилось до 2^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 каждый из описанных контроллеров.

Ссылки:

  • Interrupt Controllers (Stuff in the Middle)
  • What do the different interrupts in PCIe do?
  • Reducing Interrupt Latency Through the Use of Message Signaled Interrupts
  • Архитектура обработки прерываний в Intel совместимых системах

Источник: habr.com

Прерывания или IRQ: как ваш процессор обрабатывает запросы от ПК

ЦП ничего не делают, кроме последовательной обработки программ, но мы настолько навязчивы, что постоянно заставляем их останавливать выполнение программы и прерывать их. Как? Ну, когда вы нажимаете клавишу, двигайте мышью. В этой статье мы собираемся объяснить, как работают запросы прерывания или IRQ.

Запрос на прерывание или более известный как IRQ, что расшифровывается как Interrupt ReQuest, является незаменимым механизмом в каждом ЦП чтобы иметь возможность взаимодействовать с ним на всех уровнях, как для пользователей, так и для остального оборудования.

Прерывания или IRQ

  • Что такое запросы прерывания или IRQ?
  • Запросы прерывания или IRQ через программное обеспечение
  • Как ЦП обрабатывает запрос прерывания или IRQ?
  • ФЛАГИ ЦП
  • Виртуальные прерывания

Что такое запросы прерывания или IRQ?

ЦП последовательно выполняет программу, но внезапно мы нажимаем клавишу и видим, как она печатается на экране. За очень короткое время ЦП должен был остановить основную программу и обработать запрос клавиатуры на печать указанной буквы на экране, поэтому основной поток выполнения был прерван. Это явление прерывания ЦП называется запросом прерывания или IRQ.

Визуализация CPU Código

Запросы прерывания или IRQ обычно представляют собой сигналы, отправляемые ЦП внешними устройствами, особенно периферийными устройствами, подключенными к портам ввода-вывода. Как обрабатываются прерывания, зависит от их источника, но с точки зрения оборудования они возникают, когда периферийное устройство или компонент требует внимания ЦП. Возможно, им нужно обмениваться данными с ЦП через общую согласованную область памяти, или они предупреждают, что выполняемая ими задача уже выполнена.

  • Маскируемые прерывания: В случае нескольких запросов прерывания именно они имеют наименьшее предпочтение при разрешении.
  • Немаскированные прерывания: Когда происходит несколько прерываний одновременно, именно они имеют наибольшее предпочтение, когда дело доходит до разрешения.

Запросы прерывания или IRQ через программное обеспечение

программное обеспечение petición interrupción

Программное обеспечение также может генерировать прерывания через процедуру операционной системы, это делается с помощью «системного вызова». На любом компьютере, работающем под управлением усовершенствованной операционной системы, операционная система должна иметь возможность при необходимости вызывать систему прерывания ЦП.

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

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

Как ЦП обрабатывает запрос прерывания или IRQ?

Механизмы прерывания

Чтобы управлять запросом прерывания, ЦП должен остановить цикл команд на своем пути. Каждый раз, когда инструкция завершается, ЦП сам проверяет, есть ли запрос на прерывание. Если он не существует, он выполнит следующую строку программного кода. Если он существует, он будет сохранять состояние программы в специальном регистре. Состояние, являющееся значением следующей инструкции в программном счетчике.

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

ФЛАГИ ЦП

ФЛАГИ x86

Каждый ЦП имеет серию однобитовых регистров, которые указывают, когда происходят определенные явления. ФЛАГИ ЦП с ISA x86 можно увидеть на хорошо описанном изображении выше. Все они собраны в 32-битном регистре, где каждый бит представляет различное состояние ЦП.

В случае x86 необходимо, чтобы аппаратное устройство, называемое PIC, Programmable Interrupt Controller, к которому подключены различные периферийные устройства, отвечало за выполнение запросов прерывания. Этот посредник изначально был отдельным чипом и был разработан для уменьшения количества интерфейсов к ЦП, но с внедрением контроллера ввода-вывода в современных ЦП он стал частью SoC.

Таким образом, PIC удаленно отвечает за отправку запросов прерывания в CPU, для этого ему нужен только сигнал, который активирует один из битов регистра FLAGS процессора. Но если мы присмотримся, то увидим, что есть три бита, которые управляют прерываниями: флаг разрешения прерывания в бите 9, флаг виртуального прерывания в бите 19 и ожидание виртуального прерывания в бите 20.

Виртуальные прерывания

прерывание IRQ Virtual

Многие современные системы используют виртуальные машины, это означает, что операционная система — это не самое близкое и привилегированное программное обеспечение к процессору, а гипервизор, на котором он работает. Это вызывает конфликт при обработке прерываний на программном уровне. Решение? Дайте гипервизору более высокую иерархию и создайте дополнительные ФЛАГИ.

Флаг разрешения прерывания активируется, когда операционная система выполняется без гипервизора и, следовательно, одна. В случае наличия гипервизора приоритет над флагом разрешения прерывания имеет сам гипервизор.

Если операционная система виртуализирована, то будет установлен бит Virtual Enable Flag. Причина такого разделения заключается в том, что разные работающие операционные системы всегда по-разному видят периферийные устройства и, следовательно, необходимость отдельного управления прерываниями. Обычно при активации флага виртуального включения он напоминает процессору, что для обработки прерывания необходимо останавливать потоки выполнения, связанные с виртуальной машиной, а не другие.

Источник: itigic.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru