Comment CPU trouve ISR et de faire la distinction entre les appareils
Je tiens d'abord à partager tout ce que je sais - et c'est le chaos total. Il y a plusieurs questions sur le sujet, donc merci de ne pas m'énerver :).
1) Pour obtenir un rapport de recherche internationale, le PROCESSEUR est fourni avec un numéro d'interruption. Dans les machines x86 (286/386 et ci-dessus) il y a un IVT avec les Rapports de recherche; chaque entrée de 4 octets la taille. Nous avons donc besoin de multiplier le numéro d'interruption par 4 pour trouver le rapport de recherche internationale. Donc, la première série de questions est - je suis complètement confus dans le mécanisme de la CPU de la réception de l'interruption. Pour déclencher une interruption, d'abord appareil doit sonde pour les IRQ - alors quoi ? Le numéro d'interruption voyages "IRQ" vers le CPU? J'ai aussi lu quelque chose comme dispositif de mise ISR adresse sur le bus de données ; quoi que, alors ? Quel est le concept de dispositifs de substitution de l'ISR. Quelqu'un peut-il me dire quelques exemple des dispositifs où les CPU des bureaux de vote pour les interruptions? Et d'où vient qu'il trouve ISR ?
2) Si deux périphériques de partager une IRQ (ce qui est très possible), comment CPU diffère entre eux ? Que faire si les deux appareils de déclencher une interruption de même priorité simultanément. J'ai fait la connaissance il y aura de masquage de même type et de la faible priorité des interruptions - mais comment cette communication s'effectue entre le PROCESSEUR et le contrôleur de périphérique? J'ai étudié le rôle de l'image et de l'APIC pour ce problème, mais ne pouvait pas comprendre.
Merci pour la lecture.
Merci beaucoup pour la réponse.
OriginalL'auteur ultimate cause | 2010-04-10
Vous devez vous connecter pour publier un commentaire.
Cpu n'est pas un sondage pour les interruptions, au moins pas dans un logiciel de sens. Concernant le logiciel, les interruptions sont des événements asynchrones.
Ce qui se passe est que la configuration matérielle dans la CPU reconnaît la demande d'interruption, ce qui est un signal électrique sur une ligne d'interruption, et en réponse, met de côté l'exécution normale des événements pour répondre à l'interruption. Dans la plupart des Processeurs modernes, ce qui se passe ensuite est déterminé par un handshake matériel particulier pour le type de CPU, mais la plupart d'entre eux reçoivent un certain nombre d'un certain type de l'interruption de l'appareil. Ce nombre peut être de 8 bits ou 32 ou que ce soit, selon la conception de la CPU. Le PROCESSEUR utilise ensuite cette interruption numéro d'index dans le vecteur d'interruption de la table, pour trouver une adresse pour commencer l'exécution de la routine de service d'interruption. Une fois que l'adresse est déterminée, (et l'actuel contexte d'exécution en toute sécurité est enregistré dans la pile) le CPU commence à exécuter le rapport de recherche internationale.
Lorsque les deux appareils partagent une ligne de demande d'interruption, ils peuvent causer des différents Rapports à exécuter par le retour d'un autre numéro d'interruption pendant que la poignée de main du processus. Si vous avez assez de vecteur de numéros disponibles, chaque périphérique d'interruption peut utiliser son propre vecteur d'interruption.
Mais deux appareils peuvent même partager une demande d'interruption de ligne et un vecteur d'interruption, à condition que le partage ISR est assez intelligent pour revenir à toutes les sources possibles de l'interrompre, et de vérifier les registres de l'état pour voir quel périphérique service demandé.
Un peu plus en détail
Supposons que vous avez un système composé d'un PROCESSEUR, et le contrôleur d'interruption, et une interruption de l'appareil. Dans les vieux jours, ceux-ci auraient été périphériques physiques distincts mais maintenant tous les trois pourrait même résider dans la même puce, mais tous les signaux sont toujours là à l'intérieur du boîtier en céramique. Je vais utiliser un processeur powerPC (PPC) de l'UC avec un système intégré de contrôleur d'interruption, connecté à un périphérique sur un bus PCI, comme un exemple qui devrait servir joliment.
Disons que l'appareil est un port série de la transmission de certaines données. Typique d'un serial port driver vous permettra de charger tas de données dans l'appareil du FIFO, et le CPU peut faire le travail régulier pendant que l'appareil ne fait sa chose. Généralement, ces appareils peuvent être configurés pour générer une demande d'interruption lorsque l'appareil est en cours d'exécution faible sur les données à transmettre, de sorte que le pilote de périphérique peut revenir et de les nourrir de plus en elle.
La logique matérielle dans l'appareil va attendre un bus PCI interrupt reconnaître, à ce moment-là, un couple de choses peuvent se produire. Certains périphériques 'autovectoring', ce qui signifie qu'ils s'appuient sur le contrôleur d'interruption de voir à ce que la bonne routine de service est sélectionné. D'autres auront un registre, qui le pilote de périphérique pré-programme, qui contient un vecteur d'interruption de l'appareil, qui aura lieu sur le bus de données en réponse à l'interruption de reconnaître, pour le contrôleur d'interruption de ramasser.
Un bus PCI n'a que quatre lignes de requête d'interruption, de sorte que notre série de l'appareil devront affirmer l'un de ceux-ci. (Il n'est pas n'importe qui à l'heure actuelle, il est généralement un peu fente dépendant..) Suivant en ligne est le contrôleur d'interruption (par exemple, le PIC/APIC), qui décide de l'opportunité de reconnaître l'interruption basé sur masque de bits qui ont été installé dans ses propres registres. En supposant qu'il reconnaît l'interrompre, il obtient alors le vecteur de l'interruption de l'appareil (via les données des lignes de bus), ou peut-programmation utiliser un 'conserves' valeur fournie par l'APIC propre pilote de périphérique. Jusqu'à présent, la CPU a été au courant de toutes ces allées et venues, mais c'est pour changer.
Maintenant il est temps pour le contrôleur d'interruption d'obtenir l'attention de la CPU de base. Le CPU doit avoir son propre masque d'interruption bit(s) qui peuvent provoquer des qu'il suffit d'ignorer la demande de la PIC. En supposant que le CPU est prêt à prendre des interruptions, il est maintenant temps pour l'action réelle de départ. L'instruction doit habituellement être à la retraite avant le rapport de recherche internationale peut commencer, donc avec pipeline processeurs c'est un peu compliqué, mais il suffit de dire qu'à un certain point dans le volet enseignement, le contexte processeur est enregistré hors de la pile et le matériel déterminé ISR prend le dessus.
Certains cœurs de PROCESSEUR ont plusieurs lignes de requête, et vous pouvez commencer le processus de rétrécissement vers le bas qui ISR s'exécute via le matériel de la logique qui saute le CPU pointeur d'instruction à l'un d'une poignée de haut niveau des gestionnaires. L'ancien 68K, et, éventuellement, d'autres ont fait de cette façon. Le powerPC (et je crois, le x86) ont une seule demande d'interruption d'entrée. Le x86 lui-même se comporte un peu comme un PIC, et peut obtenir un vecteur de l'extérieur par les PIC(s), mais le powerPC saute juste à une adresse fixe, 0x00000500.
Dans le CPP, le code à 0x0500 est probablement juste va sauter immédiatement à quelque part dans la mémoire, où il ya assez de place pour une véritable prise de décision de code, mais c'est toujours la routine de service d'interruption. Que la routine d'abord aller à la procédure PIC et obtenir le vecteur, et aussi demander le PIC d'arrêter de faire valoir la demande d'interruption dans la CPU de base. Une fois que le vecteur est connu, le plus haut niveau de l'ISR peut affaire à un gestionnaire plus spécifique qui sera au service de tous les dispositifs connus pour utiliser ce vecteur. Le vecteur gestionnaire spécifique puis marche en bas de la liste de périphériques affectés à ce vecteur, la vérification de l'interruption de bits d'état dans ces dispositifs, pour voir ceux qui ont besoin de services.
Lorsqu'un périphérique, comme l'hypothétique port série, est jugé insuffisant le service, le rapport de recherche internationale pour que l'appareil prend des mesures appropriées, par exemple, le chargement de la prochaine FIFO vaut la peine de données d'un système d'exploitation de la mémoire tampon dans le port de transmission du FIFO. Certains appareils seront automatiquement déposer leur demande d'interruption en réponse à accéder, par exemple, l'écriture d'un octet dans la transmission FIFO peut provoquer le port série de l'appareil afin de faire valoir la ligne de demande. D'autres appareils nécessitent un contrôle spécial registre bits à être activé, ensemble, effacé, qu'est-ce-avez-vous, afin de déposer la demande. Il y a des millions de différents périphériques d'e/S et pas de deux d'entre eux semblent jamais faire de la même manière, il est donc difficile de généraliser, mais c'est généralement la façon dont de.
Maintenant, évidemment, il n'y a plus à dire - est-ce que l'interruption des priorités? ce qui se passe dans un processeur multi-core? Qu'en est imbriquée contrôleurs d'interruption? Mais j'ai brûlé assez d'espace sur le serveur. Espérons tout de cette aide.
Belle explication de Jeff. Merci encore pour les efforts. J'ai eu des pensées similaires, comme il pourrait y avoir un arbre comme la structure pour traiter les interruptions. Mais maintenant, je sais aussi les autres pensent de la même manière et vous fait un beau commentaire sur cette. Merci encore.
Une petite question. vecteur d'Interruption est un nombre qui est un apport à la vecteur d'interruption de la table pour obtenir l'adresse de l'ISR. Alors comment est-il un Vector? le numéro d'Interruption est fine.
ce nombre correspond au pic de saisie de chiffres ou pourrait être programmé dans l'apic.
OriginalL'auteur JustJeff
Je suis Arrivé sur cette Question, comme au bout de 3 ans.. Espère que je Peux aider 😉
Intel 8259A ou tout simplement le "PIC" a 8 pins ,IRQ0-IRQ7, toutes les broches se connecte à un seul appareil..
Laisse supposer que u appuyé sur un bouton sur le clavier.. la tension de la IRQ1 pin, qui est relié à la KBD, est Élevé.. donc après que le PROCESSEUR est interrompu, reconnaissez l'Interruption bla bla bla... le PIC n'a tout simplement ajouter 8 au numéro de la ligne IRQ donc IRQ1 signifie 1+8 qui signifie 9
De SORTE que le PROCESSEUR définit sa CS et IP sur l'entrée du 9 dans le vecteur de la table.. et parce que le FPI est un tableau de longs il il suffit de multiplier le nombre de cellules par 4 😉
CPU.CS=IVT[9].CS
CPU.IP=IVT[9].IP
l'ESR traite avec l'appareil à travers les ports d'e/S 😉
Désolé pour mon mauvais anglais .. suis un Arabe bien 🙂
OriginalL'auteur geekybedouin