0

En général, les interruptions matérielles doivent être traitées immédiatement, au moins de manière à les acquitter et à effectuer un premier niveau de traitement. Si je comprends bien ce n'est pas une activité prévue. S'il vous plaît corrigez-moi.Quel processeur exécutera l'interruption matérielle dans un système de muticore

Donc la question est de savoir comment choisir un processeur qui exécuterait réellement ce gestionnaire d'interruption de matériel?

On peut répondre à cela pour Linux et/ou systèmes BSD

+0

AFAIK mainline Linux ne prend en charge que le matériel multiprocesseur symétrique SMP, ce qui signifie que tout processeur peut traiter les interruptions. J'ai vu UNIX porté à un matériel asymétrique, c'est-à-dire qu'il y a un processeur dédié aux E/S et aux interruptions. BTW un processeur ne * "exécute pas d'interruption" *. Il peut * desservir * une interruption, c'est-à-dire exécuter une routine de service d'interruption, ISR. – sawdust

+0

Attendez, UP est également supporté. – 0andriy

Répondre

1

Cela dépend vraiment de la mise en œuvre du système d'exploitation.

Certains assignent toutes les interruptions à un seul processeur, tandis que d'autres distribuent la gestion des interruptions sur certains ou tous les processeurs.

Sur les systèmes NUMA, le système d'exploitation doit tenter d'affecter la gestion des interruptions à un processeur "proche".

Vous devrez lire la source du système d'exploitation (et la version) qui vous intéresse pour savoir ce qu'il utilise.

+0

Merci pour votre réponse +1. Je voulais être sûr que votre réponse concerne les interruptions matérielles, et non le traitement de la moitié inférieure qui est en fait une activité planifiée. –

+0

Je ne faisais pas de différence entre la "moitié inférieure" du gestionnaire d'interruption et l'interruption matérielle. Mais certains systèmes matériels peuvent câbler des interruptions matérielles à un sous-ensemble de processeurs, voire à un seul processeur, rendant le système d'exploitation encore plus intéressant. –

+1

Cela dépend en partie de l'implémentation du système d'exploitation. Plus fortement, cela dépend des implémentations matérielles des PIC, des PIR, etc. – 0andriy

1

En général, cela dépend des fonctionnalités offertes par le processeur multicœur et le système d'exploitation. Lors de l'utilisation de processeurs multicœurs, vous devrez peut-être configurer l'affinité de l'interruption selon vos besoins.

Dans le cas de linux, le système de fichiers /proc permet d'afficher/configurer l'affinité des interruptions.

1) Le fichier smp_affinity pour IRQ respectif est titulaire d'un masque de bits qui peut être utilisé pour la configuration de l'IRQ à desservir par le noyau respectif dans le système à noyaux multiples:

/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) le fichier smp_affinity_list aide dans la configuration d'une gamme de CPU pour une IRQ notamment en évitant le procédé de masque de bits pour configurer les noyaux:

/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 propose également une interruption démon d'équilibrage de charge appelé irqbalance qui peut aider à la distribution des interruptions dans les cœurs de processeur pour optimiser les performances. Ce démon peut être activé par défaut dans certains systèmes et par conséquent cela doit être désactivé si vous voulez configurer manuellement l'affinité de l'interruption sinon cela pourrait remplacer l'affinité configurée après chaque réinitialisation.