Dans cet article, vous découvrirez la différence entre le ISR et appel de fonction , mais avant de discuter des différences, vous devez connaître brièvement l'ISR et l'appel de fonction.
Qu’est-ce que l’ISR ?
Une routine de service d'interruption (ISR) est une routine logicielle que le matériel appelle en réponse à une interruption. ISR examine une interruption, détermine comment la gérer, l'exécute et renvoie une valeur d'interruption logique. Si aucune autre manipulation n'est requise, l'ISR notifie au noyau une valeur de retour. Un ISR doit s'exécuter très rapidement pour éviter de ralentir le fonctionnement de l'appareil et celui de tous les ISR de moindre priorité.
Bien qu'un ISR puisse déplacer des données d'un registre CPU ou d'un port matériel vers une mémoire tampon, il s'appuie généralement sur un thread (ou tâche) d'interruption dédié, appelé thread de service d'interruption (IST), pour effectuer la plupart du traitement requis. Si un traitement supplémentaire est requis, l'ISR renvoie une valeur d'interruption logique au noyau. Ensuite, il mappe un numéro d'interruption physique à une valeur d'interruption logique.
Mécanisme de gestion des interruptions
Vous trouverez ci-dessous le mécanisme de gestion des interruptions dans les étapes suivantes, telles que :
- Une interruption est une condition qui oblige le CPU à suspendre le programme en cours et à exécuter un ISR. Un ISR est un programme spécialement écrit pour gérer la condition qui a provoqué l'interruption.
- Une fois qu'une interruption est traitée, la CPU revient au programme principal, exactement à l'instruction suivante là où elle s'était arrêtée.
- Dans le transfert de données piloté par interruption, chaque fois que le périphérique d'E/S est prêt pour le transfert de données, il interrompt le processeur. Dans l'ISR, le CPU effectuera le transfert de données.
- Cette méthode est meilleure que l'interrogation car le processeur ne perd pas de temps à vérifier l'état du périphérique d'E/S. Un clavier est un bon exemple d’accès aux E/S piloté par interruption.
- Au lieu de vérifier le processeur, le clavier doit interrompre le processeur lorsqu'une touche est enfoncée. Ainsi, on ne perdra pas de temps à vérifier à plusieurs reprises le clavier lorsque l'utilisateur ne tape pas du tout.
- Le périphérique d'E/S demande une interruption en envoyant le $overline{INTR}$ signal au processeur.
- Chaque fois que le processeur reçoit $overline{INTR}$ signal, il termine l’exécution de l’instruction en cours puis exécute l’ISR. Lorsque le processeur est prêt, il envoie un signal d'accusé de réception via le ALORS QUE doubler.
- ISR est exécuté et le CPU revient au programme principal.
- Les périphériques d'E/S éteignent le $overline{INTR}$ signal après exécution.
Par exemple: Dans l'exemple ci-dessous, transfert d'E/S par E/S pilotées par interruption.
- Si un périphérique d'E/S souhaitant effectuer un transfert de données avec le processeur doit interrompre le processeur.
- Une interruption est une condition qui oblige le processeur à exécuter une routine de service d'interruption.
- Dans l'ISR, le processeur effectuera le transfert de données avec le périphérique d'E/S.
Dans cet exemple, interrompez la demande en appuyant sur la touche du clavier,
- Au lieu que le processeur vérifie si une touche est enfoncée, le clavier interrompt le processeur lorsque vous appuyez sur une touche.
- Dans l'ISR du clavier, qui fait partie du logiciel pilote du clavier, le processeur lira les données du clavier.
Avantages de l'ISR
Vous trouverez ci-dessous les avantages suivants de l’ISR, tels que :
- Les événements asynchrones ISR peuvent survenir à tout moment pendant l'exécution du programme.
- ISR enregistre le PC, les drapeaux et les registres sur la pile, désactive toutes les interruptions et charge l'adresse de l'ISR.
- ISR ne peut pas avoir d'arguments pouvant lui être transmis.
- ISR ne peut pas renvoyer de valeurs.
- ISR active les interruptions.
- Généralement, l'ISR est petit car il prend du temps d'un autre processus.
- Certains ISR ont leur propre pile.
Qu’est-ce que l’appel de fonction ?
Un appel de fonction est également appelé appel de sous-programme. Un sous-programme est un ensemble d'instructions nécessaires à plusieurs reprises au programme. Il fait partie d'un programme plus vaste chargé d'effectuer une tâche spécifique. Le programme le plus volumineux peut exécuter une lourde charge de travail et le sous-programme peut effectuer simplement une tâche simple, qui est également indépendante du codage restant du programme.
Une fonction est codée de telle manière qu’elle peut être appelée plusieurs fois et depuis différents endroits (même depuis d’autres fonctions). Lorsqu'une fonction est appelée, le processeur peut se rendre là où réside le code de la fonction et exécuter les instructions de la fonction une par une. Après avoir terminé les fonctions, le processeur reviendra exactement là où il s'était arrêté et poursuivra l'exécution à partir de l'instruction suivante.
Les fonctions sont un excellent outil pour la réutilisation du code. De nombreux langages de programmation modernes prennent en charge des fonctions. Un ensemble de fonctions est appelé un bibliothèque . Les bibliothèques sont souvent utilisées comme moyen de partage et d'échange de logiciels. Dans certains cas, l'ensemble du programme peut être une séquence de sous-programmes.
Dans le cas d'un processeur 8086, un sous-programme est invoqué par un APPEL instruction, et le contrôle revient par un DROITE instruction. Cela réduit la taille du programme.
Différence entre ISR et appel de fonction
Une fonction doit être explicitement appelée et fait partie du même contexte et du même thread d'exécution que son appelant. Un ISR matériel n'est pas explicitement appelé mais plutôt invoqué par un événement externe. Le contexte du thread actuel est automatiquement conservé lorsqu'une interruption est appelée avant de basculer le contexte vers l'ISR.
En retour, le changement de contexte inverse se produit, rétablissant l'état du processeur avant l'interruption afin que l'exécution continue à partir du point d'interruption. Vous trouverez ci-dessous quelques différences supplémentaires entre ISR et l'appel de fonction.
ISR | Appel de fonction |
---|---|
L'interruption est généralement initiée par un microprocesseur de signal interne ou externe plutôt que par l'exécution d'instructions. L'ISR est exécuté après avoir stocké l'état actuel du programme dans la pile. ISR effectue différentes tâches en fonction de l'appareil interrompu ou des instructions écrites par un programmeur. | L'appel de fonction est invoqué en exécutant des instructions qui exécutent les tâches spécifiques et réduisent la taille du programme. |
Le matériel détermine l'adresse de l'ISR. L'adresse ISR est écrite dans la table des vecteurs d'interruption et l'adresse ISR de chaque interruption est fixe. | L'adresse du sous-programme est écrite dans l'instruction, qui est écrite dans le code du programme principal. |
ISR est utilisé pour toutes les tâches à usage général. | Les appels de fonction sont effectués pour des tâches spécifiques au programme. |
Lorsqu'une interruption se produit lors de l'exécution d'un programme en cours, donc après l'exécution de l'instruction en cours, le processeur exécute ISR. Après l'exécution d'ISR, le processeur doit reprendre le programme exactement comme avant l'interruption. Pour cela, le contenu du PC, les registres µP et certaines conditions d'état sont stockés. L'ensemble de toutes les conditions des bits d'état dans un microprocesseur est appelé PSW (program status word).
| Ici, seul un PC est stocké sur la pile pour obtenir l'adresse de la prochaine instruction du programme principal. Le sous-programme doit avoir accès aux données du sous-programme appelant et renvoyer les résultats à ce sous-programme. Par conséquent, les paramètres des sous-programmes et la liaison des données sont effectués. Cela peut être fait à travers
|