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

43

Je ne suis pas sûr de comprendre le concept d'interruption matérielle et logicielle.

Si je comprends bien, le but d’une interruption matérielle est d’attirer l’attention du processeur, notamment lors de la mise en œuvre du traitement multitâche du processeur.

  1. Alors qu'est-ce qui déclenche une interruption matérielle? Est-ce le processus de pilote de matériel?
  2. Si oui, où se déroule le processus du pilote matériel? S'il fonctionne sur le processeur, il n'aura pas à attirer l'attention du processeur par une interruption matérielle, n'est-ce pas? Alors est-ce que ça tourne ailleurs?
  3. Est-ce qu'une interruption matérielle interrompt directement le processeur ou contacte-t-elle d'abord le processus du noyau et ce dernier contacte / interrompt ensuite le processeur?

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

  1. Quelles sont les ressources? Sont-ils tous sous la forme de processus en cours d'exécution? Par exemple, les processus de pilote de processeur et de pilote de mémoire représentent-ils les ressources de processeur et de mémoire? Le processus de 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 les processus (qui représentent les ressources) indirectement via le processus du noyau? Est-il vrai que, contrairement à une interruption matérielle, une interruption logicielle n'interrompt jamais directement le processeur, mais interrompt / contacte le processus du noyau?
Tim
la source

Réponses:

55

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

  1. Les interruptions matérielles sont émises par des périphériques matériels tels que des disques, des cartes réseau, des claviers, des 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, la CPU envoie la demande au pilote de matériel approprié. (Les pilotes matériels sont généralement des sous-routines dans le noyau plutôt qu'un processus séparé.)

  2. Le pilote qui gère l’interruption est exécuté sur la CPU. Le processeur est interrompu par rapport à ce qu'il était en train de faire pour gérer l'interruption, de sorte qu'aucun autre élément n'est requis pour attirer l'attention du processeur. Dans les systèmes multiprocesseurs, une interruption n'interrompt généralement que l'un des processeurs. (Dans certains cas particuliers, les ordinateurs centraux disposent de canaux matériels capables de gérer plusieurs interruptions sans le support de la CPU principale.)

  3. L'interruption matérielle interrompt directement le processeur. Cela provoquera le déclenchement du code correspondant dans le processus du noyau. Pour les processus dont le traitement prend un certain temps, le code d'interruption peut se permettre d'être interrompu par d'autres interruptions matérielles.

    En cas d'interruption du minuteur, le code du planificateur du noyau peut suspendre le processus en cours d'exécution et permettre à un autre processus de s'exécuter. 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 planifieront l’entrée / la sortie. Pour certains périphériques, les E / S sont effectuées immédiatement, mais les E / S sur disque sont généralement mises en file d'attente et effectuées ultérieurement. En fonction des E / S effectuées, le processus peut être suspendu jusqu'à la fin de celle-ci, 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 sur disque.

  2. L'interruption logicielle ne parle qu'au noyau. Il est de la responsabilité du noyau de planifier tout autre processus devant s’exécuter. 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 planifie l'exécution de ce processus en fonction des besoins.

    Il est correct qu'une interruption logicielle n'interrompe pas directement le processeur. Seul le code en cours d'exécution peut générer une interruption logicielle. L'interruption est une demande faite au noyau de faire quelque chose (généralement des E / S) pour exécuter le processus. Une interruption logicielle spéciale est un appel de rendement, qui demande au planificateur de noyau de vérifier si un autre processus peut être exécuté.

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 les E / S en attente pour un traitement ultérieur (commun aux E / S de disque) ou les exécuter immédiatement si possible. La file d’attente est gérée par le pilote, souvent lors de la réponse à 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 afin de ne pas interrompre le processeur. Cependant, ils interrompent le flux du code appelant.

    Si le matériel a besoin que le processeur fasse quelque chose, le processeur interrompt son attention sur le code qu'il exécute. La CPU va pousser son état actuel sur une pile pour pouvoir ensuite revenir à ce qu'elle était en train de faire. L'interruption pourrait arrêter: un programme en cours d'exécution; le code du noyau gérant une autre interruption; ou le processus d'inactivité.

BillThor
la source
Merci! (1) Dans une interruption logicielle, les opérations d'E / S sont-elles effectuées par la routine de pilote de périphérique d'E / S dans le processus du noyau? (2) est-il exact que le chemin emprunté par l'interruption logicielle est un pas plus court que le chemin d'interruption matérielle? En d’autres termes, pour une interruption logicielle: programme logiciel -> routine de pilote de périphérique dans le processus du noyau; pour une interruption matérielle: matériel -> CPU -> routine de pilote de périphérique dans le processus du noyau?
Tim
Merci! Est-il exact que l'interruption matérielle amène le processeur à placer son état actuel sur une pile de manière à ce que le pilote de matériel puisse s'exécuter sur le processeur et repasser ultérieurement le processus interrompu sur le processeur? Une interruption logicielle provoque-t-elle également une juxtaposition du processus en cours d'exécution sur la CPU afin que le service demandé puisse être exécuté sur la CPU?
Tim
Dans les deux cas, l'état sera poussé sur la pile. Cela permet au système de recharger l'état lorsque cela est fait avec l'interruption.
BillThor
Merci! si le service demandé ne s'exécute pas sur la CPU, telles que les opérations IO exécutées sur les périphériques IO au lieu de la CPU, et si le processus demandeur peut continuer à s'exécuter sans attendre la fin du service demandé, le processus demandeur sera-t-il toujours placé dans une pile ?
Tim
Normalement, la lecture d'E / S est appelée de manière synchrone et le processus ne s'exécutera pas tant que l'opération d'E / S ne sera pas terminée. Pour les lectures, vous le souhaitez presque toujours. Les écritures se produisent généralement de manière asynchrone, ce qui permet au processus de continuer à s'exécuter.
BillThor