0

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

Итак, вопрос в том, как выбрать процессор, который фактически выполнит этот аппаратный обработчик прерывания?

можно ответить на этот вопрос для Linux и/или BSD систем

+0

AFAIK mainline Linux поддерживает только SMP, симметричное многопроцессорное оборудование, что означает, что любой процессор может обслуживать прерывания. Я видел, что UNIX портирован на асимметричное оборудование, т. Е. Есть процессор, предназначенный для ввода-вывода и прерываний. BTW процессор не выполняет «прерывание» *. Он может * обслуживать * прерывание, то есть выполнять процедуру обслуживания прерываний, ISR. – sawdust

+0

Подождите, UP также поддерживается. – 0andriy

ответ

1

Это действительно зависит от реализации операционной системы.

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

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

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

+0

Спасибо за ваш ответ +1. Хотел быть уверен, что ваш ответ касается аппаратных прерываний, а не обработки нижней половины, которая на самом деле является запланированной. –

+0

Я не различал «нижнюю половину» обработчика прерываний и аппаратное прерывание. Но некоторые аппаратные системы могут подключать аппаратные прерывания к подмножеству процессоров или даже к одному процессору, что делает операционную систему еще более интересной. (помните, что в архитектуре систем IBM-PC/AT есть больше, чем X86.) –

+1

Это частично зависит от реализации ОС, более сильно зависит от аппаратных реализаций ПОС, PIR и т. Д. – 0andriy

1

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

В случае linux файловая система /proc имеет возможность показывать/настраивать сродство прерываний.

1) Файл smp_affinity для соответствующего IRQ имеет битовую маску, которая может использоваться для конфигурирования IRQ, которые будут обслуживаться соответствующей сердцевины в многоядерной системе:

/Proc/IRQ/'irq_number'/smp_affinity

echo 2 > /proc/irq/12/smp_affinity -> Configures the affinity of IRQ 12 to CPU 1 
echo 4 > /proc/irq/14/smp_affinity -> Configures the affinity of IRQ 14 to CPU 2 

2) файл smp_affinity_list помогает в настройке диапазона CPU для конкретного IRQ, избегая метод битовой маски для настройки ядра:

/Proc/IRQ/'irq_number'/smp_affinity_list

cat /proc/irq/12/smp_affinity_list -> Configures the affinity of IRQ 12 to CPU cores 0 to 3 

3) Кроме того, Linux предлагает прерывание балансировки нагрузки демона, называемого irqbalance, который может помочь в распределении прерываний по процессорным ядрам для оптимизации производительности. Этот демона может быть включен по умолчанию в определенной системе, и, следовательно, это должно быть отключено, если вы хотите, чтобы вручную настраивать сродство прерывания, иначе это может переопределить настроенное сродство после каждого сброса.

Смежные вопросы