I/O APIC внешнее статическое распределение IRQ

Я читаю ULK3 и получил следующее утверждение

«Запросы на прерывание, поступающие от внешних аппаратных устройств, могут распределяться между доступными ЦП двумя способами:

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

Я знаю, что Linux не использует статический дистрибутив, но мой вопрос:

Если ОС инициирует одну запись в таблице перенаправления прерываний, используя статическое распределение, и это IRQ поднято, а затем система с несколькими APIC выбирает два ЦП (здесь это просто пример того, что в записи указаны два ЦП) и доставляет сигнал к соответствующему локальному APIC, и оба этих локальных APIC принимают прерывание.

  1. Только один процессор будет обрабатывать прерывание? или оба? Если один, то как выбрать?
  2. Существует ли ОС, использующая статическое распределение?

Если да, покажите пример

Если нет, то почему он существует? Это из-за какой-то исторической проблемы? Какова первоначальная причина этого дизайна?


person gankme    schedule 31.07.2013    source источник


Ответы (1)


вот ссылка, описывающая механизмы локальной шины APIC, IO APIC и ICC.

http://syszux.com/book/kernel/Understanding.the.Linux.Kernel(3rd%20Edition)/understandlk-CHP-4-SECT-2.html

Ниже приведен абзац, извлеченный из этой страницы, который может быть ответом на ваш вопрос:

Динамическое распределение

Сигнал IRQ доставляется на локальный APIC процессора, выполняющего процесс с самым низким приоритетом.

Каждый локальный APIC имеет программируемый регистр приоритета задачи (TPR), который используется для вычисления приоритета текущего процесса. Intel ожидает, что этот регистр будет изменяться в ядре операционной системы при каждом переключении процесса.

Если два или более ЦП имеют наименьший приоритет, нагрузка распределяется между ними с помощью метода, называемого арбитражем. Каждому ЦП назначается различный арбитражный приоритет в диапазоне от 0 (самый низкий) до 15 (самый высокий) в регистре арбитражного приоритета локального APIC.

Каждый раз, когда прерывание доставляется ЦП, его соответствующий арбитражный приоритет автоматически устанавливается на 0, в то время как арбитражный приоритет любого другого ЦП увеличивается. Когда регистр арбитражного приоритета становится больше 15, он устанавливается равным предыдущему арбитражному приоритету ЦП-победителя, увеличенному на 1. Таким образом, прерывания распределяются циклическим образом между ЦП с одинаковым приоритетом задачи.[*]

person Houcheng    schedule 14.03.2014