web-dev-qa-db-fra.com

Que sont les interruptions logicielles et matérielles et comment sont-elles traitées?

Je ne sais pas si je comprends le concept d'interruptions matérielles et logicielles.

Si je comprends bien, le but d'une interruption matérielle est d'attirer l'attention du processeur, une partie de l'implémentation du multitâche du processeur.

  1. Alors qu'est-ce qui cause une interruption matérielle? Est-ce le processus du pilote matériel?
  2. Si oui, où s'exécute le processus du pilote matériel? S'il s'exécute sur le CPU, il n'aura pas à attirer l'attention du CPU par interruption matérielle, non? Alors ça marche ailleurs?
  3. Une interruption matérielle interrompt-elle directement le processeur ou contacte-t-elle d'abord le processus du noyau et le processus du noyau contacte/interrompt-il ensuite le processeur?

D'un autre côté, je pense que le but d'une interruption logicielle est qu'un processus en cours d'exécution sur un CPU demande des ressources.

  1. Quelles sont les ressources? Sont-ils tous sous la forme de processus en cours? Par exemple, les processus de pilote de processeur et les processus de pilote de mémoire représentent-ils des ressources de processeur et de mémoire? Le processus du pilote des périphériques d'E/S représente-t-il des ressources d'E/S? Existe-t-il d'autres processus en cours avec lesquels le processus souhaiterait communiquer avec des ressources?
  2. Si oui, une interruption logicielle contacte-t-elle indirectement les processus (qui représentent les ressources) via le processus noyau? Est-il vrai que contrairement à une interruption matérielle, une interruption logicielle n'interrompt jamais directement le CPU, mais à la place, elle interrompt/contacte le processus du noyau?
45
Tim

Une interruption matérielle ne fait pas vraiment partie du multitâche CPU, mais peut la conduire.

  1. Les interruptions matérielles sont émises par des périphériques matériels tels que disque, cartes réseau, claviers, horloges, etc. Chaque périphérique ou ensemble de périphériques aura sa propre ligne IRQ (Interrupt ReQuest). Sur la base de l'IRQ, le CPU enverra la demande au pilote matériel approprié. (Les pilotes matériels sont généralement des sous-programmes au sein du noyau plutôt qu'un processus distinct.)

  2. Le pilote qui gère l'interruption est exécuté sur la CPU. Le CPU est interrompu par rapport à ce qu'il faisait pour gérer l'interruption, donc rien de plus n'est nécessaire pour attirer l'attention du CPU. Dans les systèmes multiprocesseurs, une interruption n'interrompra généralement que l'un des CPU. (Dans des cas particuliers, les ordinateurs centraux ont des canaux matériels qui peuvent gérer plusieurs interruptions sans prise en charge par le processeur principal.)

  3. L'interruption matérielle interrompt directement le CPU. Cela entraînera le déclenchement du code correspondant dans le processus du noyau. Pour les processus qui prennent un certain temps à traiter, le code d'interruption peut se laisser interrompre par d'autres interruptions matérielles.

    Dans le cas d'une interruption de temporisation, le code du planificateur du noyau peut suspendre le processus en cours d'exécution et autoriser l'exécution d'un autre processus. C'est la présence du code du planificateur qui permet le multitâche.

Les interruptions logicielles sont traitées de la même manière que les interruptions matérielles. Cependant, ils ne peuvent être générés que par des processus en cours d'exécution.

  1. Les interruptions logicielles sont généralement des demandes d'E/S (entrée ou sortie). Celles-ci appellent les routines du noyau qui planifient les E/S. Pour certains périphériques, les E/S seront effectuées immédiatement, mais les E/S disque sont généralement mises en file d'attente et exécutées ultérieurement. Selon les E/S effectuées, le processus peut être suspendu jusqu'à la fin des E/S, ce qui oblige le planificateur du noyau à sélectionner un autre processus à exécuter. Des E/S peuvent se produire entre les processus et le traitement est généralement planifié de la même manière que les E/S disque.

  2. L'interruption logicielle ne parle qu'au noyau. Il est de la responsabilité du noyau de planifier tout autre processus devant être exécuté. Cela pourrait être un autre processus à la fin d'un tuyau. Certains noyaux permettent à certaines parties d'un pilote de périphérique d'exister dans l'espace utilisateur, et le noyau planifiera l'exécution de ce processus en cas de besoin.

    Il est vrai qu'une interruption logicielle n'interrompt pas directement le CPU. Seul le code en cours d'exécution peut générer une interruption logicielle. L'interruption est une demande pour le noyau de faire quelque chose (généralement des E/S) pour exécuter le processus. Une interruption logicielle spéciale est un appel Yield, qui demande au planificateur du noyau de vérifier si un autre processus peut s'exécuter.

Réponse au commentaire:

  1. Pour les demandes d'E/S, le noyau délègue le travail au pilote de noyau approprié. La routine peut mettre en file d'attente les E/S pour un traitement ultérieur (commun pour les E/S disque), ou l'exécuter immédiatement si possible. La file d'attente est gérée par le pilote, souvent lorsqu'il répond à des interruptions matérielles. Lorsqu'une E/S est terminée, l'élément suivant de la file d'attente est envoyé au périphérique.

  2. Oui, les interruptions logicielles évitent l'étape de signalisation matérielle. Le processus générant la demande logicielle doit être un processus en cours d'exécution, de sorte qu'ils n'interrompent pas le processeur. Cependant, ils interrompent le flux du code appelant.

    Si le matériel doit obliger le CPU à faire quelque chose, il fait interrompre son attention sur le code qu'il exécute. Le CPU poussera son état actuel sur une pile afin qu'il puisse plus tard revenir à ce qu'il faisait. L'interruption pourrait s'arrêter: un programme en cours d'exécution; le code du noyau gérant une autre interruption; ou le processus inactif.

57
BillThor