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.
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.
Une interruption matérielle ne fait pas vraiment partie du multitâche CPU, mais peut la conduire.
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.)
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.)
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.
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.
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:
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.
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.