Для чего используется номер прерывания irq: Микропроцессоры

IRQ

IRQ

Михаил Тычков aka Hard

Доброго времени суток.

Давайте рассмотрим такую вот ситуевину: процессор обрабатывает какие-то данные, не важно какие. В этот момент у какого-нить устройства тоже появились данные для обработки. Че делать? Надо просить процессор, что бы тот соизволил обратить на просьбу внимание и решил бы, сейчас обрабатывать эти данные или потом. Так вот эта просьба и есть IRQ или прерывания (вообще-то существуют два типа прерываний: аппаратные (внешние) и программные (внутренние), но поскольку мой раздел называется «Железо и сети», то разговор я буду вести только об аппаратных прерываниях). Строго говоря IRQ – это каналы запросов прерывания, которые используются всевозможными девайсами для того, что бы сообщить процессору о том, что необходимо обработать определенный запрос. Физически, IRQ представляют собой отдельно проложенные линии (проводники) и соответствующие этим линиям контакты в интерфейсах. Все это находится, ессесно на материнской плате. Линии IRQ предназначены только для передачи запросов прерывания.

А ну-ка разберемся, как вся эта фигня с IRQ происходит. Итак, после получения запроса прерывания, камень сохраняет в стеке содержимое регистров. Затем он обращается к таблице векторов прерываний, где есть список адресов памяти программ, соответствующих определенным номерам прерываний. От номера прерывания зависит, какая программа будет запущена. В основном этими программами являются драйвера, относящиеся к устройствам, пославшим запрос (а уж драйвера туго знают свое дело и разберутся, что дальше делать). После всего этого, процедура обработки возвращает из стека то, с чем работал камень, а проще говоря, отдается управление системой той программе, что работала до запроса прерывания. И так постоянно. Сама таблица находится в оперативной памяти и состоит из 256 элементов по 4 байта и начинается с адреса 0000:0000. Занимает она 1024 Кбайт. Надеюсь, что Вы усвоили простую истину: если необходимо обработать хотя бы один новый байт от какого-либо устройства, необходимо сначала обработать IRQ этого устройства.

Что бы не было путаницы у IRQ есть иерархия или говоря другим языком – приоритеты. Чем меньше номер прерывания, тем выше приоритет и наоборот, чем больше номер прерывания, тем ниже приоритет. IRQ всего 16. Самый высокий приоритет у IRQ 0, а самый низкий у IRQ 15. Приведу таблицу иерархии:

IRQ

Стандартная функция

0

Системный таймер

1

Контроллер клавиатуры

2

Программируемый контроллер прерываний

3

Последовательный порт COM 2

4

Последовательный порт COM 1

5

Звуковая или сетевая карты или свободен

6

Стандартный контроллер гибких дисков

7

Параллельный порт LPT

8

CMOS и часы

9

Звуковая или сетевая карты или свободен

10

Свободен

11

USB или SCSI или свободен

12

PS/2 совместимый порт мыши

13

Сопроцессор

14

Основной контроллер IDE

15

Дополнительный контроллер IDE

А хотите посмотреть свои прерывания? Выберите «Пуск – Выполнить», наберите «msinfo32». В появившимся окне «Сведения о системе», слева, выберите вкладку «Ресурсы аппаратуры – Прерывания IRQ».

С прерываниями случаются и геморрои. Если произойдет генерация большого количества IRQ, то стек может переполниться и тогда…. тогда Вы потянитесь к кнопочке [Reset]. Ежели такая фигня будет происходить часто, то необходимо в файле Config.sys увеличить параметр Stacks. Кроме, этого двум различным устройствам PCI может быть назначено одно и то же прерывание. Теоретически такое не должно происходить, но вот на практике случается. В этом случае Вам придется самому назначить прерывание одному из заглючивших устройств. Как это сделать? Жмем [Win][Pause/Break]. Выскакивает окно «Свойства: Система». Выбираем вкладку «Устройства», ищем в списке то устройство, IRQ которого будем подправлять и жмем на него пару раз мышью. Выскочит окно его свойств, где выберем вкладку «Ресурсы» и снимем галку «Автоматическая настройка». Затем чуть ниже выбираем «Запрос на прерывания» и кликаем опять два раза мышью. Появится окно, где можно изменить номер IRQ. Ни фиг себе и сложно. Но… Назначать прерывания надо с умом. Сверьтесь с таблицей: какие IRQ для чего предназначены. Посмотрите у себя, какие свободны. Может так случится, что свободных прерываний у Вас и не будет. Думаете – все, жопа? Нет! Новых IRQ Вы конечно не добавите, но подумайте, все ли устройства Вам необходимы. Например, как часто Вы используете порты COM. Я ими последние года три не пользуюсь вообще. Ну и на фиг их из системы. Это можно сделать из BIOS. И вот Вам свободные IRQ. Короче, в решении подобной проблемы надо приложить голову и все у Вас получится. А всяких там кулых спецов хочу предупредить сразу - не пишите мне письма типа: «После твоей статьи клиенты пачками стали нести к нам в магазин компы с развороченными настройками!». Я не отвечаю за действия людей, у которых голова и руки растут из того же места, что и ноги. Когда-то я и сам в этом ни черта не смыслил, но ведь разобрался же. Причем мне никто ничего не объяснял. Дорогу осилит идущий!

Двигаемся дальше. Вообще, следует отметить, что каналы запросов прерывания относятся к системным ресурсам. Дам короткое но очень меткое определение: системными ресурсами называются коммуникационные каналы, адреса и сигналы, используемые узлами компьютера для обмена данными с помощью шин. Вот так вот просто и понятно. К системным ресурсам кроме IRQ относятся: адреса памяти, каналы прямого доступа к памяти и адреса портов ввода/вывода. Но об этом в других статьях. А на сегодня все. Удачи в Ваших начинаниях.

12.09.02

читать еще по теме

Микропроцессоры


Способы обмена информацией в микропроцессорной системе

Организация прерываний в микроЭВМ

Одной из разновидностей программно-управляемого обмена данными с ВУ в микроЭВМ является обмен с прерыванием программы, отличающийся от асинхронного программно-управляемого обмена тем, что переход к выполнению команд, физически реализующих обмен данными, осуществляется с помощью специальных аппаратных средств. Команды обмена данными в этом случае выделяют в отдельный программный модуль - подпрограмму обработки прерывания. Задачей аппаратных средств обработки прерывания в процессоре микроЭВМ как раз и является приостановка выполнения одной программы (ее еще называют основной программой) и передача управления подпрограмме обработки прерывания. Действия, выполняемые при этом процессором, как правило, те же, что и при обращении к подпрограмме. Только при обращении к подпрограмме они инициируются командой, а при обработке прерывания - управляющим сигналом от ВУ, который называют "Запрос на прерывание" или "Требование прерывания".

Эта важная особенность обмена с прерыванием программы позволяет организовать обмен данными с ВУ в произвольные моменты времени, не зависящие от программы, выполняемой в микроЭВМ. Таким образом, появляется возможность обмена данными с ВУ в реальном масштабе времени, определяемом внешней по отношению к микроЭВМ средой. Обмен с прерыванием программы существенным образом экономит время процессора, затрачиваемое на обмен. Это происходит за счет того, что исчезает необходимость в организации программных циклов ожидания готовности ВУ (см. примеры 2.1 и 2.2, Параллельная передача данных), на выполнение которых тратится значительное время, особенно при обмене с медленными ВУ.

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

Обычно задача сохранения содержимого счетчика команд и регистра состояния процессора возлагается на аппаратные средства обработки прерывания. Сохранение содержимого других регистров процессора, используемых в подпрограмме обработки прерывания, производится непосредственно в подпрограмме. Отсюда следует достаточно очевидный факт: чем больший объем информации о прерванной программе сохраняется программным путем, тем больше время реакции микроЭВМ на сигнал прерывания, и наоборот. Предпочтительными с точки зрения повышения производительности микроЭВМ (сокращения времени выполнения подпрограмм обработки, а, следовательно, и основной программы) являются уменьшение числа команд, обеспечивающих сохранение информации о прерванной программе, и реализация этих функций аппаратными средствами.

Формирование сигналов прерываний - запросов ВУ на обслуживание происходит в контроллерах соответствующих ВУ. В простейших случаях в качестве сигнала прерывания может использоваться сигнал "Готовность ВУ", поступающий из контроллера ВУ в системный интерфейс микроЭВМ. Однако такое простое решение обладает существенным недостатком - процессор не имеет возможности управлять прерываниями, т. е. разрешать или запрещать их для отдельных ВУ. В результате организация обмена данными в режиме прерывания с несколькими ВУ существенно усложняется.

Рис. 3.11. Фрагмент блок-схемы контроллера ВУ с разрядом "Разрешение прерывания" в регистре состояния и управления

Для решения этой проблемы регистр состояния и управления контроллера ВУ (рис. 3.11) дополняют еще одним разрядом - "Разрешение прерывания". Запись 1 или 0 в разряд "Разрешение прерывания" производится программным путем по одной из линий шины данных системного интерфейса. Управляющий сигнал системного интерфейса "Запрос на прерывание" формируется с помощью схемы совпадения только при наличии единиц в разрядах "Готовность ВУ" и "Разрешение прерывания" регистра состояния и управления контроллера.

Аналогичным путем решается проблемам управления прерываниями в микроЭВМ, в целом. Для этого в регистре состояния процессора выделяется разряд, содержимое которого определяет, разрешены или запрещены прерывания от внешних устройств. Значение этого разряда может устанавливаться программным путем.

В микроЭВМ обы

Система прерываний.



Система прерываний.

02/19/95 03:26pm prer.lek
Роберт Журден "Справочник программиста на компьютере фирмы IBM".
А.Г.Шевчик, Т.В.Демьянков "Справочник программиста и пользователя" серия "Карманная энциклопедия" М."Кварта" 1993.
П.Нортон, Р.Уилтон "IBM PC и PS/2 руководство по программированию" перевод В.Н.Григорьева М "Радио и связь" 1994

Система прерываний.

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

Адреса подпрограмм обслуживания прерываний находятся в специальной таблице и называются векторами прерывания. В реальном режиме таблица вектров распологается в начале физической памяти; вектор имеет длину четыре байта и храниться в форме CS:IP. В защищенном режиме таблица векторов может быть расположена в любом месте и содержит более сложные дескрипторы (в режиме V86 имеется подобие таблицы реального режима).

Работа с системой прерываний может рассматриваться с двух точек зрения:

  1. Работа с векторами прерываний;

  2. Работа с микросхемами контроллеров прерываний (современные рашины могут не иметь отдельной микросхемы контроллера прерываний, но их регистры сохранены в адресном пространстве).

ПРИМЕЧАНИЕ: Еще раз подчеркивается, что речь идет прежде всего о реальном режиме. Попытка "попробовать" в любом другом может иметь непредсказуемые последствия.

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

При работе в режиме V86 возможно изменение образа таблицы прерываний, но последствия определяются возможностями виртуального монитора!

Работа с векторами прерываний.

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

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

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

  3. Возможна подмена существующего прерывания на ваше собственное. Одно из таких прерываний это прерывание времени суток, которое автоматически вызывается 18.2 раза в секунду. Обычно это прерывание только обновляет показание часов, но Вы можете использовать его для синхронизации событий внутри Вашей программы. Другие возможности - это написание процедуры обработки Ctrl-Break если Ваша программа должна выполнять некие специфические действия перед своим завершением.

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

Таблица векторов прерываний занимает 1Кбайт памяти в диапазоне 00000h - 00400h. Каждому вектору отводится четыре байта в таблице и присваивается номер от 00h до FFh. При инициализации системы вектора настраиваются на подпрограммы, расположенные в ROM BIOS или DOS.

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

Функция 25H прерывания 21H устанавливает вектор прерывания на указанный адрес. Адреса имеют размер два слова. Старшее слово содержит значение сегмента (CS), младшее содержит смещение (IP). Чтобы установить вектор, указывающим на одну из Ваших процедур, нужно поместить сегмент процедуры в DS, а смещение в DX Затем поместите номер прерывания в AL и вызовите функцию. Функция 25H автоматически запрещает аппаратные прерывания в процессе изменения вектора, поэтому не существует опасности, что посреди дороги произойдет аппаратное прерывание, использующее данный вектор.

;---установка прерывания

PUSH DS ;сохраняем DS

MOV DX,OFFSET ROUT ;смещение для процедуры в DX

MOV AX,SEG ROUT ;сегмент процедуры

Что такое номер запроса на прерывание на ПК?

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

Запрос на прерывание - это сигнал от аппаратного устройства на вашем компьютер к вашему процессору. Когда аппаратному устройству требуется ЦП для выполнения что-то (например, перемещайте курсор при перемещении мыши), устройство отправляет запрос на прерывание в ЦП. Поскольку процессор может получить несколько эти запросы на прерывание одновременно с разных устройств на одном путь (e.g., последовательный порт или шина 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 (жесткие диски)

Что такое 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, Ресурс

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

Статья посвящена процессу доставки прерываний с внешних устройств в системе x86. Он пытается ответить на такие вопросы, как:
  • Что такое PIC и для чего он нужен?
  • Что такое APIC и для чего он нужен? Какова цель LAPIC и I / O APIC?
  • В чем разница между APIC, xAPIC и x2APIC?
  • Что такое MSI? В чем разница между MSI и MSI-X?
  • Какова роль таблиц $ PIR, MPtable и ACPI?

Если вы хотите узнать ответ на один из этих вопросов или просто хотите узнать об эволюции контроллера прерываний, добро пожаловать.

Введение


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

Существует два типа прерываний: аппаратные прерывания и программные прерывания (softirqs):

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

Эта статья об аппаратных / внешних прерываниях IRQ.

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

А что делать, если внешних устройств много? Было бы очень непродуктивно делать тонну контактов INTR на процессоре для всех из них.

Для решения этой проблемы была изобретена специальная микросхема - контроллер прерываний.

ПИК


(wiki / osdev)

Первой микросхемой контроллера прерываний была Intel 8259 PIC. Он имел 8 входных линий (IRQ0-7) и 1 выходную линию (которая соединяет контроллер прерываний с линией INTR процессора). Когда на его входных линиях есть прерывание от одного из устройств, 8259 подаст сигнал по линии INTR. После этого ЦП узнает, что какое-то устройство требует его немедленного внимания, и процессор спросит у PIC, какая из 8 входных линий (IRQx) была источником этого прерывания.Этот опрос связан с некоторыми накладными расходами, но теперь у нас 8 строк прерывания вместо 1.

Вскоре 8 строк было недостаточно. Для увеличения общего количества линий прерывания два контроллера 8259 (главный и подчиненный) были соединены в каскад (Dual PIC).

IRQ от 0 до 7 обрабатываются с помощью первого PIC Intel 8259 (ведущего), а IRQ от 8 до 15 обрабатываются со вторым PIC Intel 8259 (ведомый). Только мастер подключен к CPU и может сигнализировать о входящих прерываниях.Если есть прерывание на линиях 8-15, второй PIC (slave) сообщит об этом мастеру по линии IRQ2, а после этого мастер подаст сигнал CPU. Это каскадное прерывание забирает 1 из 16 линий, но дает в общей сложности 15 прерываний для всех внешних устройств.

Эта схема была принята сообществом, и теперь, когда кто-то говорит о PIC (программном контроллере прерываний), они имеют в виду эту систему Dual PIC. Через некоторое время контроллеры 8259 были усовершенствованы и получили новое имя: 8259A.С этими контроллерами в набор микросхем была включена система DUAL PIC. В то время, когда основной шиной для подключения внешних устройств была ISA, этой системы было достаточно. Было только необходимо, чтобы разные устройства не подключались к одной и той же линии IRQ, поскольку прерывания ISA не могут использоваться совместно.

Отображение прерываний устройства было довольно стандартным:

Пример (отсюда):
IRQ 0 - системный таймер
IRQ 1 - контроллер клавиатуры
IRQ 2 - каскад (прерывание от ведомого контроллера)
IRQ 3 - последовательный порт COM2
IRQ 4 - последовательный порт COM1
IRQ 5 - параллельный порт 2 и 3 или звуковая карта
IRQ 6 - контроллер гибких дисков
IRQ 7 - параллельный порт 1
IRQ 8 - таймер RTC
IRQ 9 - ACPI
IRQ 10 - открыть / SCSI / NIC
IRQ 11 - открыть / SCSI / NIC
IRQ 12 - контроллер мыши
IRQ 13 - математический сопроцессор
IRQ 14 - канал 1 ATA
IRQ 15 - ATA канал 2

Настройка и работа с 8259 микросхемами осуществляется с портами ввода / вывода:


Полную документацию на 8259A можно найти здесь.

Шина PCI позже заменила шину ISA. К сожалению, количество устройств стало превышать число 15. Кроме того, вместо статической шины ISA, устройства на шине PCI могут быть добавлены в систему динамически, что потенциально может привести к еще большим проблемам. Но, к счастью, прерывания в шине PCI могут использоваться совместно, поэтому можно подключить множество устройств к одной линии прерывания IRQ. В конце концов, для решения проблемы отсутствия линий прерываний было решено сгруппировать прерывания со всех устройств PCI в линии PIRQ (Programmable Interrupt Request).

Например, предположим, что у нас есть 4 свободные линии прерывания на контроллере PIC и 20 устройств PCI. Мы можем объединить прерывания от 5 устройств в одну линию PIRQx и подключить эти линии PIRQx к контроллеру PIC. В этом случае, если есть прерывание на одной из линий PIRQx, процессор должен будет запросить все устройства, подключенные к этой линии, о прерывании, чтобы узнать, кто за него отвечает, но в конце концов это решит проблему. Устройство, которое соединяет линии прерывания PCI с линиями PIRQ, часто называют маршрутизатором PIR.

При использовании этого метода необходимо убедиться, что линии PIRQx не соединяются с линиями с прерываниями ISA (так как это приведет к конфликтам) и что линии PIRQx сбалансированы (чем больше устройств мы подключаем к одной линии, тем больше устройств CPU потребуется опрос, когда необходимо проверить, какое устройство отвечает за прерывание).

Примечание : на изображении отображение устройства PCI -> PIR изображено абстрактно, так как в реальном случае это немного сложнее.В реальном мире каждое устройство PCI имеет 4 линии прерывания (INTA, INTB, INTC, INTD) и до 8 функций, причем каждая функция может иметь только одно из этих прерываний INTx. Какая линия INTx будет использоваться каждой функцией, определяется конфигурацией набора микросхем.

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

Информация о маршрутизации прерывания контроллера PIC отправляется в ОС BIOS с помощью таблицы $ PIR и через регистры 3Ch (INT_LN Interrupt Line (R / W)) и 3Dh (INT_PN Interrupt Pin (RO) ) конфигурационного пространства PCI для каждой функции.

Спецификация для таблицы $ PIR недавно была на веб-сайте Microsoft, но в настоящее время недоступна. Содержание таблицы можно понять из спецификации PCI BIOS [4.2.2. Получить параметры маршрутизации прерываний PCI] или отсюда (последняя ссылка на русском языке, но вы можете попробовать погуглить «Спецификация таблицы маршрутизации PCI IRQ»)

APIC


(wiki, osdev)

Последний метод работал до появления многопроцессорных систем.По своей природе PIC может отправлять прерывания только одному ЦП, а в многопроцессорной системе желательно загружать ЦП сбалансированным образом. Решением этой проблемы стал новый интерфейс APIC (Advanced PIC).

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

Когда на вход I / O APIC поступает внешнее прерывание, контроллер отправляет сообщение прерывания на LAPIC одного из системных процессоров. Таким образом, APIC-контроллер ввода-вывода помогает сбалансировать нагрузку прерываний между процессорами.

Первой микросхемой APIC была 82489DX, которая представляла собой отдельную микросхему, в которой были подключены LAPIC и APIC ввода-вывода. Для двухпроцессорной системы потребовалось три таких чипа: два для LAPIC и один для APIC ввода-вывода. Позже функциональность LAPIC была напрямую включена в процессоры, а часть I / O APIC была выделена в микросхему 82093AA.

У APIC 82093AA ввода-вывода было 24 входа, а архитектура APIC могла поддерживать до 16 процессоров. Прерывания 0-15 были оставлены для старых прерываний ISA для совместимости со старыми системами, а прерывания 16-23 предназначались для всех устройств PCI. Благодаря такому разграничению можно легко избежать всех конфликтов между прерываниями ISA и PCI. С увеличением количества свободных линий прерывания также стало возможным увеличить количество линий PIRQx.

Программирование APIC и LAPIC ввода-вывода выполняется с помощью MMIO.Регистры LAPIC обычно размещаются по адресу 0xFEE00000, а регистры I / O APIC по адресу 0xFEС00000, хотя их можно перенастроить.

Как и в случае с PIC, отдельные чипы вначале стали частью чипсета позже.

Архитектура APIC была позже модернизирована, и ее новый вариант получил название xAPIC (x - расширенный). Благодаря полной обратной совместимости общее количество возможных процессоров в системе было увеличено до 256.

Следующий шаг в развитии архитектуры получил название x2APIC.32. Эти контроллеры могут работать в режиме обратной совместимости с xAPIC или они могут работать в новом режиме x2APIC. В этом новом режиме программирование контроллера выполняется не через MMIO, а через регистры MSR (которые намного быстрее). По этой ссылке для этого режима необходима поддержка IOMMU.

Следует отметить, что в системе может быть несколько контроллеров ввода / вывода APIC. Например, одно на 24 прерывания в южном мосту, а другое на 32 прерывания в северном мосту.В контексте APIC ввода-вывода прерывания обычно называются GSI (Global System Interrupt). Итак, вышеупомянутая система имеет GSI 0-55.

Как мы можем определить, имеет ли ЦП внутренний LAPIC и какую архитектуру APIC он поддерживает? На эти вопросы можно ответить, проверив битовые флаги CPUID.
Чтобы помочь ОС обнаружить LAPIC и I / O APIC, BIOS должен предоставлять информацию о них либо через MPtable (старый метод), либо через таблицу ACPI (в данном случае таблица MADT).Помимо общей информации, и MPtable, и ACPI (в данном случае таблица DSDT) должны содержать информацию о маршрутизации прерываний. Это означает информацию о том, какое устройство использует какую линию прерывания (аналогично таблице $ PIR).

О MPtable можно прочитать в официальной спецификации. Раньше спецификация была на сайте Intel, но сейчас ее можно найти только в архивной версии. Спецификацию ACPI можно найти на сайте UEFI (текущая версия - 6.2). Стоит отметить, что с помощью ACPI можно объявить маршрутизацию прерываний для систем без APIC (вместо предоставления отдельной таблицы $ PIR).

MSI


(wiki)

Последний вариант APIC был хорош, но не без минусов. Все линии прерывания от устройств усложняли систему и, следовательно, увеличивали вероятность ошибки. Шина PCI Express пришла на смену шине PCI, что полностью упростило все системы прерывания. У него вообще нет линий прерывания.Для обратной совместимости сигналы прерывания (INTx #) эмулируются с помощью отдельного вида сообщений. С линиями прерывания PCI их соединение осуществлялось физическими проводами. С линиями прерывания PCI Express соединение является логическим и осуществляется посредством мостов PCI Express. Но эта поддержка устаревших прерываний INTx существует только для обратной совместимости с шиной PCI. PCI Express представляет совершенно новый метод доставки прерываний - MSI (Message Signaled Interrupts). В этом методе устройство сигнализирует о прерывании просто путем записи в специальное место в области MMIO процессоров LAPIC.

Раньше одно устройство PCI (то есть все его функции) могло иметь только 4 прерывания, но теперь появилась возможность адресовать до 32 прерываний.

В случае MSI нет разделения линий прерывания: каждое прерывание, естественно, соответствует своему устройству.

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

Стоит отметить, что прерывания MSI не могут работать без LAPIC, но MSI могут заменить I / O APIC (еще одно упрощение конструкции).

Через некоторое время метод MSI был распространен на MSI-X. Теперь каждое устройство может иметь до 2048 прерываний. Также теперь можно указать, какой процессор какое прерывание должен обрабатывать. Это может быть очень полезно для устройств с высокой нагрузкой, например сетевых карт.

Нет необходимости в отдельной таблице BIOS для поддержки MSI. Но устройство должно указать свою поддержку MSI через одну из возможностей в своем пространстве конфигурации PCI. Также драйвер устройства должен включать всю необходимую поддержку для работы с MSI.

Заключение


В этой статье мы изучили информацию об эволюции контроллера прерываний и получили общие теоретические знания о доставке прерываний от внешних устройств в системе x86.

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

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

Ссылки:


Благодарности

Особая благодарность Джейкобу Гарберу из сообщества coreboot за помощь в переводе этой статьи.

LinkinWiki

Laboratorio de Investigación en Nuevas Tecnologías Informáticas

Развитие технологии аппаратного обеспечения, изменение данных и разработка программного обеспечения по контрасту с использованием системы защиты и системы, действующей системы не hayan tenido avances значительно en las últimas tres décadas.

Esta línea devestigación se enfoca en identity próxima generación.


Nuevas técnicas de virtualización

Recientemente, dos nuevas técnicas de virtualización han logrado un nivel de performance sorprendente conpecto a la performance en la ejecución nativa. Паравиртуализация и асистия виртуализации для оборудования, разделение или комбинирование (совместная виртуализация), такая позиция, как новая, капа-де-абстракция, установленная в революционной системе, построена на базе центросов, децентрализованных и сокращенных. , la reducción en el uso de energía, la migración de hosts virtuales sin interrumpir los servicios и т. д.La línea de trabajo se enfoca en compare las técnicas alternativas, оценивает интеграцию этой функции в ядре и обнаруживает последние возможности многоядерной архитектуры и истории технологий.

Estamos encarando un nuevo proyecto que pretende demostrar las ventajas de escribir un sistema operativo disñado específicamente para ejecutarse sobre un hypervisor (Lguest).


Un kernel asimétrico y activo

Ядро активизирует эволюцию вертикального режима ядра и поддерживает выделенные процессоры или ядра, которые реализуют исключительную активность ядра.Al ser un agent activo, возможно, это ядро, которое является совместным с аппаратным обеспечением, и может использоваться как альтернативное оборудование, как альтернативное программное обеспечение (прерывания аппаратного и программного обеспечения). Nuestro trabajo se centra en el estudio de las posibilidades que ofrecen estos Conceptos en el tratamiento de la entrada / salida de red. Sin embargo, se han Identificado Posibles aplicaciones en otros dominios (virtualización, tiempo real и т. Д.).


Llamadas al sistema asincrónicas y basadas en memoria comptida

La semántica de pasaje de parámetros puede tener un impacto important en la eficiencia de la transferencia de datos entre el kernel y las aplicaciones.La línea de trabajo se centra en idea alternativas orientadas a incrementar la eficiencia del kernel Linux en el manejo de entrada / salida, relacionadas mainmente con la posibilidad de realizar operaciones vectorizadas (lo que favorece las mem operaciones scatter-gathering entor elizando elizando elizando). Ядро и эль espacio de usuario, para evitar las copias físicas en memoria de un dominio de protección al otro. Además, para lograr mayor escalabilidad, evitando el overhead que impla el scheduling de grandes cantidades de thread, se están оценочные API, которые представляют собой семантику энтрада / салида, которая используется для работы сокетов и архивов.

Artículos

слайды capitulo 6 Общие сведения о ядре Linux 3

слайды capitulo 5 Общие сведения о ядре Linux 3

слайды capitulo 4 Общие сведения о ядре Linux 3

слайды capitulo 3 Общие сведения о ядре Linux 3

слайды capitulo 2 Общие сведения о ядре Linux 3

Introduction a materia de SOs (UNNOBA), en la que usamos el kernel Linux como material de estudio

слайдов с презентацией новых технических средств виртуализации

слайда с ознакомлением с ядром Linux

слайдов архитектуры ядра Linux

слайдов, которые объясняют, как механизмы ядра используются на высоких скоростях

отчет о взаимосвязи между сеткой и виртуализацией

слайдов lguest (пример реализации гипервизора)

Informe Аппаратная виртуализация с поддержкой - Intel VMX (en englés)

бумага jaiio 36

бумага Викк 2007

бумага Викк 2006

График работы: Производительность и повышение производительности ядра Linux с применением более высокой скорости

Informe Checkpoint / Процесс перезапуска

Informe Supercomputado - топ 500

Информация о параллельности и синхронизации в ядре Linux

Informe Manejo de buffers de entrada salida в GNU / Linux

Informe Compresión в файловой системе для флэш-памяти - OLPC

 sitio en construcción
                   contacto: matiasz (AT) информация.unlp.edu.ar
 

2,4. Привязка прерываний и процессов Red Hat Enterprise Linux в реальном времени 7

Средам реального времени необходимо минимизировать или устранить задержку при реагировании на различные события. В идеале прерывания (IRQ) и пользовательские процессы могут быть изолированы друг от друга на разных выделенных ЦП.

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

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

Для многих процессов, описанных здесь, вам необходимо знать маску ЦП для данного ЦП или диапазона ЦП. Маска ЦП обычно представлена ​​как 32-битная битовая маска. Оно также может быть выражено как десятичное или шестнадцатеричное число, в зависимости от используемой команды.Например: Маска ЦП только для ЦП 0 - 00000000000000000000000000000001 в виде битовой маски, 1 в десятичной форме и 0x00000001 в шестнадцатеричной системе. Маска ЦП для ЦП 0 и 1 составляет 00000000000000000000000000000011 в виде битовой маски, 3 в десятичной форме и 0x00000003 в шестнадцатеричной системе.

Процедура 2.3. Отключение irqbalance Daemon

Этот демон включен по умолчанию и периодически заставляет ЦП обрабатывать прерывания равномерно и справедливо.Однако при развертывании в реальном времени приложения обычно выделяются и привязаны к конкретным процессорам, поэтому демон irqbalance не требуется.

  1. Проверьте состояние демона irqbalance .

     ~] #  Состояние systemctl irqbalance 
    irqbalance.service - демон irqbalance
       Загружено: загружено (/usr/lib/systemd/system/irqbalance.service; включено)
       Активный: активен (работает)…
     
  2. Если демон irqbalance работает, остановите его.

     ~] #  systemctl stop irqbalance  
  3. Убедитесь, что irqbalance не перезапускается при загрузке.

     

Решено: ПРЕРЫВАНИЕ GPIO - Сообщество NXP

проблема: в старых версиях / proc / interrupts выглядит так:

root @ freescale / proc / irq $ cat / proc / interrupts

CPU0 CPU1 CPU2 CPU3

34: 1 0 0 0 GIC sdma

35 : 0 0 0 0 GIC VPU_JPG_IRQ

37: 0 0 0 0 GIC imx-ipuv3

38: 0 0 0 0 GIC imx-ipuv3

39: 0 0 0 0 GIC imx-ipuv3

40: 0 0 0 0 GIC imx-ipuv3

44: 0 0 0 0 GIC VPU_CODEC_IRQ

51: 0 0 0 0 GIC snvs_rtc

56: 48 0 0 0 GIC mmc1

57: 0 0 0 0 GIC mmc0

59: 1832 0 0 0 GIC IMX-uart

63: 4 0 0 0 GIC spi_imx

68: 468 0 0 0 GIC imx-i2c

69: 0 0 0 0 GIC imx-i2c

70: 1 0 0 0 GIC imx-i2c

72: 25 0 0 0 GIC usb_wakeup

75: 0 0 0 0 GIC usb_wakeup

82: 0 0 0 0 GIC asrc

87: 248984 0 0 0 GIC i.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *