Cinq étapes du processus de traitement des interruptions : 1. Étape de demande d'interruption ; 2. Étape d'arbitrage d'interruption, il existe deux méthodes d'arbitrage matériel et d'arbitrage logiciel 3. Étape de réponse d'interruption, le CPU envoie un message au ; source d'interruption Signal de réponse d'interruption ; 4. Phase de service d'interruption ; 5. Phase de retour d'interruption, retour au point d'arrêt du programme d'origine, restauration du site matériel et poursuite de l'exécution du programme d'origine.
L'environnement d'exploitation de ce tutoriel : système Windows 7, ordinateur Dell G3.
Le processus de base du traitement des interruptions comprend cinq étapes : demande d'interruption, arbitrage d'interruption, réponse d'interruption, service d'interruption et retour d'interruption.
1) Les interruptions qui se produisent à l'intérieur du CPU (Interruptions internes) ne nécessitent pas de demandes d'interruption, La logique de contrôle d’interruption à l’intérieur du CPU la reçoit et la traite directement.
2) Interruption externe La demande est effectuée par la source d'interruption. La source d'interruption externe utilise la broche d'entrée d'interruption du CPU pour entrer un signal de demande d'interruption. Généralement, le processeur dispose de deux broches d'entrée de demande d'interruption : une broche d'entrée de demande d'interruption masquable et une broche d'entrée de demande d'interruption non masquable.
Le moment où chaque source d'interruption envoie un signal de demande d'interruption est incertain, et le moment où le CPU répond à l'interruption est également incertain . Certainement. Par conséquent, chaque source d'interruption possède une bascule de demande d'interruption, qui verrouille son propre signal de demande d'interruption et le maintient jusqu'à ce que la CPU réponde à la demande d'interruption avant de l'effacer.
Il y a une bascule d'activation d'interruption à l'intérieur du CPU Lorsqu'elle est à "1", elle permet au CPU de répondre. interruptions, appelées Activer les interruptions. S'il est "0", le CPU n'est pas autorisé à répondre aux interruptions et les interruptions sont masquées, ce que l'on appelle interruptions désactivées.
%%Normalement, lorsque le processeur est réinitialisé, la bascule d'activation des interruptions est également réinitialisée à "0", ce qui signifie que les interruptions sont désactivées. Lorsque l'interruption du processeur répond, le processeur désactive automatiquement l'interruption et il lui est interdit d'accepter une autre nouvelle interruption.
%%L'état du déclencheur d'activation d'interruption peut être défini à l'aide de l'instruction d'activation ou de désactivation de l'interruption.
Le CPU ne peut accepter une demande d'une source d'interruption à la fois que lorsque plusieurs sources d'interruption envoient des demandes d'interruption au système. CPU en même temps, le CPU doit trouver la source d'interruption avec la priorité d'interruption la plus élevée, ce processus est appelé arbitrage d'interruption.
L'arbitrage d'interruption peut utiliser des méthodes matérielles ou des méthodes logicielles.
Une fois que le CPU a détecté une demande d'interruption, il lit d'abord le contenu du registre de demande d'interruption et détecte son état petit à petit. Si un certain bit est 1, il est déterminé que la source d'interruption correspondante a une demande d'interruption et sa routine de service d'interruption est exécutée.
Celui qui est détecté en premier aura une priorité plus élevée, celui qui est détecté plus tard aura une priorité inférieure. L'ordre de détection est l'ordre de priorité de chaque source d'interruption.
Supposons que l'adresse du port d'entrée dans la figure ci-dessus est 87FFH. Il existe le programme de requête suivant :
MOV DX, 87FFH
IN AL, DX ; Lire le contenu du registre de demande d'interruption
SHR AL, 1
JC IR0 ; il y a une demande pour IRQ0, transférer vers IR0
SHR AL,1
JC IR1 ;S'il y a une demande dans IRQ1, transmettre à IR1
SHR AL,1
JC IR2 ;S'il y a une requête dans IRQ2, transmettre à IR2
… …
Logiciel Le processus de prise de décision prend beaucoup de temps. S'il existe de nombreuses sources d'interruption, les performances en temps réel des interruptions seront médiocres, mais la configuration des priorités logicielles est flexible.
Utiliser des circuits matériels spécialisés pour déterminer la priorité des sources d'interruption Il existe deux manières courantes : Arbitrage en guirlande Circuit optimal. et interrompre l'arbitrage du contrôleur .
Idée de conception : Chaque source d'interruption a un circuit logique d'interruption, toute logique d'interruption Les circuits forment un chaîne, comme une guirlande. La source d'interruption située à l'avant de la chaîne a la priorité la plus élevée, et plus le périphérique est éloigné, plus la priorité est faible.
Processus de mise en œuvre : Le CPU reçoit une demande d'interruption si l'interruption est autorisée, le CPU envoie un signal de réponse d'interruption. Le signal de réponse à l'interruption atteint d'abord l'extrémité avant de la guirlande. Si la source d'interruption 1 fait une demande d'interruption, elle interceptera le signal de réponse à l'interruption et le bloquera afin qu'il ne puisse pas être transmis à la source d'interruption suivante. Que les sources d'interruption suivantes aient ou non émis des demandes d'interruption, il est impossible de recevoir des signaux de réponse d'interruption, de sorte qu'il est impossible de répondre à leurs demandes d'interruption.
Les contrôleurs d'interruption, tels que Intel8259A, peuvent définir la priorité d'interruption des sources d'interruption de diverses manières. Il existe un discriminateur de priorité d'interruption dans le contrôleur d'interruption, qui détermine automatiquement la source d'interruption la plus prioritaire demandant actuellement une interruption et envoie son code vectoriel d'interruption au bus de données. La CPU reçoit le code vectoriel d'interruption et le trouve en conséquence. .
Après l'arbitrage de l'interruption, le traitement de l'interruption entre dans la phase de réponse à l'interruption. En répondant à une interruption, le CPU envoie un signal de réponse d'interruption à la source d'interruption, et en même temps :
① Protégez le site matériel
② Désactivez les interruptions ;
③ Protéger les points d'arrêt ;④ Obtenir l'adresse d'entrée de la routine de service d'interruption.
Protégez le site. Organisez plusieurs instructions push au début de la routine de service d'interruption pour pousser le contenu de chaque registre sur la pile pour le stockage.
2)Activer les interruptions. Pendant l'exécution de la routine de service d'interruption, les demandes d'interruption de niveau supérieur sont autorisées à interrompre la routine de service d'interruption actuelle pour réaliser l'imbrication des interruptions.
3)Interruption du service. Remplissez les exigences spécifiques aux sources d'interruption.
4)Restaurer la scène. Avant la fin de la routine de service d'interruption, la scène d'interruption du programme principal doit être restaurée. Habituellement, les informations locales enregistrées dans la pile sont insérées dans le registre d'origine.
5)Interruption du retour. Revenez au point d'arrêt du programme d'origine et continuez à exécuter le programme d'origine.
L'opération de retour d'interruption est le processus inverse de l'opération de réponse d'interruption.
Vidéo de programmation ! !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!