2009-03-01 5 views
18

J'ai une idée de la façon dont les interruptions sont traitées par un processeur dual core. Je me demandais comment la gestion des interruptions est implémentée sur une carte avec plus d'un processeur physique.Comment les interruptions sont-elles gérées par des machines à double processeur?

L'une des responsabilités d'interruption est-elle déterminée par la configuration de la carte physique? Chaque processeur doit être capable de gérer certains types d'interruptions, comme les E/S disque. À moins qu'il y ait des circuits pour gérer et envoyer les interruptions au processeur approprié? Ma conjecture est que le schéma doit être neutre du processeur, de sorte que n'importe quel processeur et noyau puisse exécuter le gestionnaire d'interruption.

Si un noyau est en attente sur une lecture de disque, ce noyau sera le seul à exécuter le gestionnaire d'interruption lorsque le disque est prêt?

+1

Je vois maintenant qu'un noyau attend jamais sur une lecture, un thread attend. Lorsque la lecture est terminée cependant, il semble qu'il serait probablement préférable d'exécuter le thread nouvellement réveillé sur le même processeur que précédemment en raison de la possibilité pour les données encore en cache sur ce processeur. – jeffD

Répondre

8

Sur les systèmes x86 chaque CPU obtient son propre APIC locale (Advanced Programmable Interrupt Controller) qui sont également câblés les uns aux autres et à un APIC E/S qui gère dispositif de routage des interruptions aux APIC locales.

Le système d'exploitation peut programmer les APIC pour déterminer les interruptions se routé vers les processeurs (ou de laisser le APIC prendre cette décision).

J'imagine qu'un processeur multi-core aurait un APIC local pour chaque noyau, mais je ne suis honnêtement pas certain.

Voir ces liens pour plus de détails:

0

Je dirais que cela dépend du fabricant de matériel ...

Cependant this link me fait croire la plupart sont probablement traitées par le processeur principal et/ou premier noyau.

Another link

3

Qu'est-ce qui vous intéresse est l'affinité du processeur SMP. Here est un excellent article sur la façon dont il est géré sous Linux. Le Advanced Programmable Interrupt Controller (APIC) est comment vous gérez cela dans un système moderne. Fondamentalement, la valeur par défaut serait de tous aller au processeur 0 sauf si vous aviez un système d'exploitation qui utilisait cette interface pour configurer les choses correctement. En outre, vous ne voulez pas nécessairement que le noyau qui a émis une commande attende une interruption particulière. Vous voulez que les noyaux les moins chargés le reçoivent.

+0

Merci, le lien sur SMP sous Linux était intéressant. Il est bon de savoir qu'il est possible de modifier les serveurs de cette manière. – jeffD

1

J'ai déjà posé cette question tout à l'heure. Peut-être qu'il peut vous offrir un aperçu :)

how do interrupts in multicore/multicpu machines work

+0

Informations utiles sur la manière dont les E/S de disque programmatiques sont décomposées en opérations d'E/S de secteur et en interruption associée. – jeffD

Questions connexes