Unterbrechen

Quellen unterbrechen und die Prozessorhandhabung

Im Digitale Computer, ein unterbrechen (manchmal als als bezeichnet als als fangen)[1] ist eine Anfrage für die Prozessor zu unterbrechen Derzeit ausführen Code (wenn dies zulässig), damit das Ereignis rechtzeitig verarbeitet werden kann. Wenn die Anfrage angenommen wird, speichern der Prozessor seine aktuellen Aktivitäten, seine Sparen Zustand, und führen a aus Funktion genannt Interrupt Handler (oder an Service Routine unterbrechen, Isr), um mit der Veranstaltung umzugehen. Diese Unterbrechung ist häufig vorübergehend, sodass die Software wieder aufgenommen wird[a] Normale Aktivitäten nach Abschluss des Interrupt -Handlers, obwohl der Interrupt stattdessen einen tödlichen Fehler anzeigen könnte.[2]

Interrupts werden üblicherweise von Hardware-Geräten verwendet, um elektronische oder physische Zustandsänderungen anzuzeigen, die zeitkritische Aufmerksamkeit erfordern. Interrupts werden auch häufig zur Implementierung verwendet Computer Multitasking, besonders in Echtzeit-Computing. Systeme, die auf diese Weise Interrupts verwenden, werden als interruptgetrieben angesehen.[3]

Typen

2 types of interrupts in operating system.jpg

Interrupt -Signale können als Reaktion auf ausgestellt werden Hardware- oder Software Veranstaltungen. Diese werden als klassifiziert als Hardware unterbricht oder Software unterbricht, beziehungsweise. Für einen bestimmten Prozessor ist die Anzahl der Interrupt -Typen durch die Architektur begrenzt.

Hardware unterbricht

Ein Hardware -Interrupt ist eine Bedingung im Zusammenhang mit dem Status der Hardware, die von einem externen Hardwaregerät signalisiert werden kann, z. B. und eine Interrupt -Anfrage (IRQ) Leitung auf einem PC oder durch Geräte, die in die Prozessorlogik eingebettet sind Betriebssystem (Betriebssystem)[4] Oder, wenn es kein Betriebssystem gibt, aus dem "Bare-Metal" -Programm, das auf der CPU ausgeführt wird. Solche externen Geräte können Teil des Computers sein (z. B.,, Diskontroller) oder sie können extern sein Peripheriegeräte. Zum Beispiel ein drücken a Klaviatur Schlüssel oder Bewegen a Maus in a angeschlossen PS/2 Port löst Hardware -Interrupts aus, die dazu führen, dass der Prozessor die Tastatur- oder Mausposition liest.

Hardware -Interrupts können eintreffen asynchron in Bezug auf die Prozessoruhr und jederzeit während der Anweisungsausführung. Infolgedessen werden alle eingehenden Hardware -Interrupt -Signale durch Synchronisieren mit der Prozessoruhr konditioniert und nur an Anweisungsausführungsgrenzen bearbeitet.

In vielen Systemen ist jedes Gerät mit einem bestimmten IRQ -Signal verbunden. Dies ermöglicht es, schnell zu bestimmen, welches Hardware -Gerät Service anfordert, und die Wartung dieses Geräts zu beschleunigen.

Auf einigen älteren Systemen wie der 1964 CDC 3600,[5] Alle Interrupts gingen an denselben Ort, und das Betriebssystem verwendete eine spezielle Anweisung, um die ausstehende, entlarvte Interrupts mit höchster Priorität zu bestimmen. Auf zeitgenössischen Systemen gibt es im Allgemeinen eine eindeutige Interruptroutine für jede Art von Interrupt (oder für jede Interrupt -Quelle), die häufig als eine oder mehrere implementiert wird Vektortabellen unterbrechen.

Maskierung

Zu Maske Ein Interrupt besteht darin, es zu deaktivieren, während entlarven Ein Interrupt ist es, es zu aktivieren.[6]

Prozessoren haben normalerweise eine interne Maske unterbrechen registrieren,[b] Dies ermöglicht die selektive Aktivierung[2] (und Behinderung) von Hardware -Interrupts. Jedes Interrupt -Signal ist im Maskenregister ein bisschen zugeordnet. In einigen Systemen ist der Interrupt aktiviert, wenn das Bit festgelegt ist, und deaktiviert, wenn das Bit klar ist. Bei anderen ist das Gegenteil wahr, und ein festgelegter Bit deaktiviert den Interrupt. Wenn der Interrupt deaktiviert ist, kann das zugehörige Interrupt -Signal vom Prozessor ignoriert werden, oder es kann noch ausstehend bleiben. Signale, die von der Maske betroffen sind maskierbare Interrupts.

Einige Interrupt -Signale werden nicht von der Interrupt -Maske beeinflusst und können daher nicht deaktiviert werden. Diese nennt man Nicht maskierbare Interrupts (NMIS). Diese zeigen Ereignisse mit hoher Priorität an, die unter keinen Umständen ignoriert werden können, wie z. B. das Timeout-Signal von a Watchdog -Timer.

Falsche Interrupts

A falsch unterrupt ist ein Hardware -Interrupt, für den keine Quelle gefunden werden kann. Der Begriff "Phantom -Interrupt" oder "Ghost Interrupt" kann auch verwendet, um dieses Phänomen zu beschreiben. Falsche Interrupts sind in der Regel ein Problem mit a kabelgebunden-oder Interrupt-Schaltkreis an einen an einem pegelempfindlichen Prozessoreingang angeschlossen. Solche Interrupts können schwer zu ermitteln sein, wenn sich ein System schlecht benimmt.

In einer Kabel oder Schaltung, Parasitäre Kapazität Das Aufladen/Entladen durch den Vorspannungswiderstand der Interrupt -Linie führt zu einer geringen Verzögerung, bevor der Prozessor erkennt, dass die Interrupt -Quelle gelöscht wurde. Wenn das Unterbrechungsgerät in der Interrupt -Service -Routine (ISR) zu spät gelöscht wird, gibt es nicht genug Zeit für die Interrupt -Schaltung, um in den Ruhezustand zurückzukehren, bevor die aktuelle Instanz des ISR endet. Das Ergebnis ist, dass der Prozessor der Ansicht ist, dass ein weiterer Interrupt ausstehend ist, da die Spannung bei seiner Interrupt -Anforderung nicht hoch oder niedrig genug ist, um eine eindeutige interne Logik 1 oder Logik 0 zu ermitteln. Der scheinbare Interrupt hat keine identifizierbare Quelle, daher die " falscher "Moniker.

Ein falscher Interrupt kann auch das Ergebnis von elektrisch sein Anomalien Aufgrund des fehlerhaften Schaltungsdesigns hoch Lärm Ebenen, Stufen, Übersprechen, Timing -Probleme oder seltener, Geräte errata.[7]

Ein falscher Interrupt kann zu einem System -Deadlock oder einer anderen undefinierten Operation führen, wenn der ISR nicht die Möglichkeit eines solchen Interrupts berücksichtigt. Da falsche Interrupts hauptsächlich ein Problem mit kabelgebundenen oder Interrupt-Schaltungen sind, besteht die gute Programmierungspraxis in solchen Systemen darin, dass der ISR alle Interrupt-Quellen für Aktivitäten überprüfen und keine Maßnahmen ergreifen (außer möglicherweise das Ereignis abzumelden), wenn keine der Quellen unterbricht .

Software unterbricht

Ein Software -Interrupt wird vom Prozessor selbst angefordert, wenn bestimmte Anweisungen ausgeführt werden oder wenn bestimmte Bedingungen erfüllt sind. Jedes Software -Interrupt -Signal ist einem bestimmten Interrupt -Handler verbunden.

Ein Software -Interrupt kann absichtlich durch Ausführung eines Spezialitäten verursacht werden Anweisung was durch das Design bei der Ausführung einen Interrupt hervorruft.[c] Solche Anweisungen funktionieren ähnlich wie Unterroutine -Anrufe und werden für eine Vielzahl von Zwecken verwendet, z. B. für die Anfrage von Betriebssystemdiensten und die Interaktion mit Gerätetreiber (z. B. Lesen oder Schreiben von Speichermedien). Software -Interrupts können auch durch Programmausführungsfehler oder durch die ausgelöst werden virtueller Speicher System.

In der Regel das Betriebssystem Kernel wird solche Interrupts fangen und umgehen. Einige Interrupts werden transparent zum Programm behandelt - zum Beispiel die normale Auflösung von a Seitenfehler ist, die erforderliche Seite im physischen Speicher zugänglich zu machen. Aber in anderen Fällen wie a Segmentierungsfehler Das Betriebssystem führt einen Prozessanruf aus. An Unix-artig Betriebssysteme Dies beinhaltet das Senden eines Signal wie zum Beispiel Sigsegv, Sigbus, Sigill oder Sigfpe, die entweder einen Signalhandler aufrufen oder eine Standardaktion ausführen können (Beendigung des Programms). Unter Windows wird der Rückruf verwendet Strukturierte Ausnahmebehandlung mit einem Ausnahmegescode wie STATUS_ACCESS_VIOLATION oder STATUS_INGEGER_DIVIDE_BY_ZZERO.[8]

In einem Kernel ProzessEs ist häufig der Fall, dass einige Arten von Software -Interrupts nicht auftreten sollen. Wenn sie trotzdem auftreten, a Betriebssystemabsturz kann resultieren.

Terminologie

Die Begriffe unterbrechen, fangen, Ausnahme, Fehler, und abbrechen werden verwendet, um Arten von Interrupts zu unterscheiden, obwohl "es keinen klaren Konsens als genaue Bedeutung dieser Begriffe gibt".[9] Der Begriff fangen Kann sich auf einen Interrupt beziehen, auf einen Software -Interrupt, auf eine synchrone Software -Interrupt oder nur auf Interrupts, die durch Anweisungen verursacht werden fangen in ihren Namen. In einigen Verwendungen der Begriff fangen bezieht sich speziell auf a Haltepunkt beabsichtigt, a zu initiieren Kontextschalter zu einem Überwachungsprogramm oder Debugger.[1] Es kann sich auch auf einen synchronen Interrupt beziehen, der durch eine außergewöhnliche Bedingung verursacht wird (z. B.,, Durch Null teilen, Ungültiger Speicherzugriff, Illegaler Opcode),[9] Obwohl der Begriff Ausnahme ist dafür häufiger.

x86 Unterbrechung unterbricht in (Hardware) Interrupts und Software Ausnahmenund identifiziert drei Arten von Ausnahmen: Fehler, Fallen und Abbrüche.[10][11] (Hardware) Interrupts sind Interrupts, die durch ein E/A -Gerät asynchron ausgelöst wurden, und ermöglichen es, dass das Programm ohne Kontinuitätsverlust neu gestartet wird.[10] Ein Fehler ist ebenfalls neu startbar, ist jedoch an die synchrone Ausführung einer Anweisung gebunden - die Rückgabeadresse zeigt auf die Verwerfung. Eine Falle ähnelt einem Fehler, außer dass die Rückgabeadresse auf die Anweisung zeigt, die nach der Einfuhranweisung ausgeführt wird.[12] Eine herausragende Verwendung ist die Implementierung Systemaufrufe.[11] Eine Abration wird für schwerwiegende Fehler wie Hardwarefehler und illegale Werte in Systemtabellen und häufig verwendet[d] erlaubt keinen Neustart des Programms.[12]

ARM Verwendet den Begriff Ausnahme sich auf alle Arten von Interrupts beziehen,[13] und unterteilt Ausnahmen in (Hardware) Interrupts, abbrechen, zurücksetzenund Ausnahmegenerierende Anweisungen. ABORTs entsprechen x86 -Ausnahmen und können abfetchende Abbrüche (fehlgeschlagene Befehlsabfertigungen) oder Datenabsenkungen (fehlgeschlagene Datenzugriffe) sein und können synchron oder asynchron sein. Asynchrone Abbrüche können präzise oder ungenau sein. MMU -Abbrüche (Seitenfehler) sind synchron.[14]

Auslösermethoden

Jeder Interrupt -Signaleingang wird so ausgelegt, dass sie entweder durch eine Logiksignalpegel oder eine bestimmte Signalkante (Pegelübergang) ausgelöst werden. Level-sensitive Inputs fordern den Prozessordienst kontinuierlich an, sofern eine bestimmte (hohe oder niedrige) Logikebene auf die Eingabe angewendet wird. Kantenempfindliche Eingänge reagieren auf Signalkanten: Eine bestimmte (steigende oder fallende) Kante führt zu einer Servicemanktive. Der Prozessor setzt den Riegel zurück, wenn der Interrupt -Handler ausgeführt wird.

Ebene ausgelöscht

A stufig ausgelöster Interrupt wird angefordert, indem das Interrupt -Signal an seinem jeweiligen (hohen oder niedrigen) aktiven Halten gehalten wird Logikebene. Ein Gerät ruft einen stufig ausgelösten Interrupt auf, indem es das Signal nach aktiviert und auf aktivem Niveau hält. Es negiert das Signal, wenn der Prozessor es dazu befiehlt, normalerweise nach der Wartung des Geräts.

Der Prozessor zeichnet das Interrupt -Eingangssignal während jedes Befehlszyklus ab. Der Prozessor erkennt die Interrupt -Anforderung, wenn das Signal bei der Probenahme geltend gemacht wird.

Durch die ausgelöschte Eingänge können mehrere Geräte ein gemeinsames Interrupt-Signal über Kabel oder Verbindungen teilen. Die Prozessorumfragen, um festzustellen, welche Geräte einen Dienst anfordern. Nach der Wartung eines Geräts kann der Prozessor erneut befragt und gegebenenfalls andere Geräte bedienen, bevor er den ISR verlässt.

Kanten ausgelöst

Ein Edge-ausgelöste Interrupt ist ein von a signalisierter Interrupt Niveau -Übergang Auf der Interrupt -Linie entweder eine fallende Kante (hoch bis niedrig) oder eine steigende Kante (niedrig bis hoch). Ein Gerät, das einen Interrupt signalisieren möchte, treibt einen Impuls auf die Linie und setzt dann die Linie in seinen inaktiven Zustand frei. Wenn der Puls zu kurz ist, um von zu erfassen befragter i/o Dann kann eine spezielle Hardware erforderlich sein, um sie zu erkennen. Der wichtige Teil der Kantenauslöser ist, dass der Interrupt, wenn (z. B.) der Interrupt durch einen hohen bis niedrigen Kantenübergang ausgelöst wurde, dass der Niveau, wenn er niedrig blieb, keinen weiteren Interrupt auslösen würde. Es muss auf das hohe Niveau zurückkehren, bevor es wieder fällt, um einen weiteren Interrupt auszulösen. Dies steht im Gegensatz zu einem Pegelauslöser, bei dem das niedrige Niveau weiterhin Interrupts erzeugt (falls sie aktiviert sind), bis das Signal zu seinem hohen Niveau zurückkehrt.

Computer mit von Kanten ausgelösten Interrupts können eine umfassen Interrupt Register Das behält den Status ausstehender Interrupts. Systeme mit Interrupt -Registern haben im Allgemeinen auch Interrupt -Maskenregister.

Prozessorantwort

Der Prozessor zeichnet die Interrupt -Triggersignale oder das Interrupt -Register während jedes Befehlszyklus ab und verarbeitet die höchste vorgestellte Interrupt. Unabhängig von der Auslösermethode beginnt der Prozessor die Interrupt -Verarbeitung an der nächsten Anweisungsgrenze nach einem erkannten Auslöser, wodurch sichergestellt wird:

  • Der Prozessorstatus[e] wird auf bekannte Weise gerettet. Normalerweise wird der Status an einem bekannten Ort gespeichert, aber auf einigen Systemen wird er auf einem Stapel gespeichert.
  • Alle Anweisungen vor dem, auf die der PC hingewiesen wurde, wurden vollständig ausgeführt.
  • Es wurde keine Anweisung, auf die der PC ausgeführt wurde, keine Anweisung, oder solche Anweisungen werden vor dem Umgang mit dem Interrupt rückgängig gemacht.
  • Der Ausführungszustand der Anweisung, auf die der PC verweist, ist bekannt.

Systemimplementierung

Interrupts können in Hardware als eigenständige Komponente mit Kontrolllinien implementiert werden, oder sie können in die integriert werden Speichersubsystem.

Wenn in Hardware als eigenständige Komponente implementiert wird, ist eine Interrupt -Controller -Schaltung wie die IBM -PCs Programmierbarer Interrupt -Controller (PIC) kann zwischen dem Unterbrechungsgerät und dem Interrupt -Pin des Prozessors angeschlossen werden Multiplex Mehrere Unterbrechungsquellen unter den normalerweise verfügbaren ein oder zwei CPU -Linien. Wenn implementiert als Teil der Speichercontroller, Interrupts werden in den Speicher des Systems zugeordnet Adressraum.

Gemeinsame IRQs

Mehrere Geräte können eine von Kanten ausgelöste Interrupt-Linie teilen, wenn sie darauf ausgelegt sind. Die Interrupt-Linie muss einen Pulldown- oder Pull-up-Widerstand haben, sodass sie sich, wenn sie sich nicht aktiv angetrieben hat, in den inaktiven Zustand, der den Standardzustand ist. Geräte signalisieren einen Interrupt, indem sie die Linie kurz zu ihrem Nicht-Default-Status fährt und die Linie float (sie nicht aktiv fahren), wenn sie einen Interrupt nicht signalisieren. Diese Art von Verbindung wird auch als bezeichnet Offener Sammler. Die Linie trägt dann alle Impulse, die von allen Geräten erzeugt werden. (Dies ist analog zu dem Zugschnur In einigen Bussen und Trolleys, die jeder Passagier ziehen kann, um dem Fahrer zu signalisieren, dass er einen Stopp anfordert.) Unterbrechung der Impulse von verschiedenen Geräten können sich jedoch verschmelzen, wenn sie rechtzeitig in der Nähe auftreten. Um zu vermeiden, dass unterbrochen wird, muss die CPU am hinteren Rand des Impulses auslösen (z. B. die steigende Kante, wenn die Linie hochgezogen und niedrig angetrieben wird). Nach dem Erkennen einer Unterbrechung muss die CPU alle Geräte auf Serviceanforderungen überprüfen.

Edge-ausgelöste Interrupts leiden nicht unter den Problemen, bei denen die durch Niveau ausgelösten Interrupts beim Teilen haben. Der Service eines Geräts mit niedriger Priorität kann willkürlich verschoben werden, während Interrupts von Geräten mit hoher Priorität weiterhin empfangen und gewartet werden. Wenn es ein Gerät gibt, von dem die CPU nicht weiß, wie er Dienst erbringt, was möglicherweise falsche Interrupts erhöht, stört sie die Interrupt -Signale anderer Geräte nicht. Es ist jedoch einfach, dass ein von Kanten ausgelöster Interrupt übersehen wird - beispielsweise, wenn Interrupts für einen Zeitraum maskiert werden - und es sei denn, es gibt eine Art Hardware -Verriegelung, die das Ereignis aufzeichnet, ist es unmöglich, wiederherzustellen. Dieses Problem verursachte viele "Sperre" in früher Computerhardware, da der Prozessor nicht wusste, dass er etwas tun würde. Moderner Hardware hat oft einen oder mehrere Interrupt -Statusregister, die unterbrachs Anfragen verriegeln. Der gut geschriebene kandidierte Interrupt-Handhabungscode kann diese Register überprüfen, um sicherzustellen, dass keine Ereignisse übersehen werden.

Die Älteren Branchenstandardarchitektur (ISA) Bus verwendet mit Kanten ausgelöste Interrupts, ohne dass Geräte in der Lage sind, IRQ-Linien zu teilen. Alle Mainstream-ISA-Motherboards enthalten jedoch Klimmzeigungswiderstände auf ihren IRQ-Linien, so dass so gut erzogene ISA-Geräte, die IRQ-Linien teilen, einfach gut funktionieren sollten. Das Parallele Port Verwendet auch von Kanten ausgelöste Interrupts. Viele ältere Geräte gehen davon aus, dass sie exklusive IRQ -Linien verwenden, was es elektrisch unsicher macht, sie zu teilen.

Es gibt 3 Möglichkeiten, wie mehrere Geräte "die gleiche Linie teilen" erhöht werden können. Erstens wird durch exklusive Leitung (Schalten) oder exklusive Verbindung (Stifte) beträgt. Als nächstes kommt mit dem Bus (alle mit derselben Linie angeschlossen): Karten in einem Bus müssen wissen, wann sie sprechen und nicht sprechen sollen (d. H. Der ISA -Bus). Das Sprechen kann auf zwei Arten ausgelöst werden: durch Akkumulationsriegel oder durch Logik -Tore. Logische Tore erwarten einen kontinuierlichen Datenfluss, der für Schlüsselsignale überwacht wird. Die Akkumulatoren lösen nur dann aus, wenn die Fernseite das Tor über einen Schwellenwert hinaus anregt. Daher ist keine ausgehandelte Geschwindigkeit erforderlich. Jedes hat seine Geschwindigkeit und Entfernungsvorteile. Ein Auslöser ist im Allgemeinen die Methode, bei der Anregung erkannt wird: steigende Kante, fallende Kante, Schwellenwert (Oszilloskop kann eine Vielzahl von Formen und Bedingungen auslösen).

Das Auslösen für Software -Interrupts muss in die Software integriert werden (sowohl in Betriebssystem als auch in App). Eine 'C' -App verfügt über eine Triggertabelle (eine Funktionstabelle) in ihrem Header, die sowohl die App als auch das Betriebssystem kennen und angemessen verwenden, was nicht mit Hardware zusammenhängt. Verwechseln Sie dies jedoch nicht mit Hardware -Interrupts, die die CPU signalisieren (die CPU setzt Software aus einer Funktionstabelle, ähnlich wie bei Software -Interrupts).

Schwierigkeiten beim Teilen von Interrupt -Linien

Mehrere Geräte, die eine Interrupt -Linie (eines beliebigen Auslöserstils) teilen, wirken alle als falsche Interrupt -Quellen zueinander. Mit vielen Geräten auf einer Linie wächst die Arbeitsbelastung bei Wartungsstörungen im Verhältnis zum Quadrat der Anzahl der Geräte. Es wird daher bevorzugt, Geräte gleichmäßig auf die verfügbaren Interrupt -Linien zu verbreiten. Der Mangel an Interrupt -Linien ist ein Problem bei älteren Systemdesigns, bei denen die Interrupt -Linien unterschiedliche physikalische Leiter sind. Unterschriebene Interrupts, bei denen die Interrupt-Linie virtuell ist, werden in neuen Systemarchitekturen bevorzugt (wie z. PCI Express) und dieses Problem in erheblichem Maße lindern.

Einige Geräte mit einer schlecht gestalteten Programmierschnittstelle bieten keine Möglichkeit, festzustellen, ob sie einen Service angefordert haben. Sie können einsperren oder auf andere Weise schlecht benehmen, wenn sie gewartet werden, wenn sie es nicht wollen. Solche Geräte können falsche Interrupts nicht tolerieren und können daher auch nicht tolerieren, eine Interrupt -Linie zu teilen. IST EIN Karten sind aufgrund von oft billigem Design und Konstruktion für dieses Problem berüchtigt. Solche Geräte werden sehr seltener wie Hardwarelogik wird billiger und neue Systemarchitekturen motivieren gemeinsam genutzbare Interrupts.

Hybrid

Einige Systeme verwenden eine Mischung mit ausgelöster und kantengesteuerter Signalübertragung. Die Hardware sucht nicht nur nach einer Kante, sondern prüft auch, dass das Interrupt -Signal für einen bestimmten Zeitraum aktiv bleibt.

Eine häufige Verwendung eines hybriden Interrupts ist für den NMI-Eingang (nicht maskierbarer Interrupt). Da NMIs im Allgemeinen ein Haupt- oder sogar katastrophale Systemereignisse signalisieren, versucht eine gute Implementierung dieses Signals sicherzustellen, dass der Interrupt gültig ist, indem sie überprüft, ob er für einen bestimmten Zeitraum aktiv bleibt. Dieser 2-Stufen-Ansatz hilft, falsche Interrupts von der Auswirkung des Systems zu beseitigen.

Nachrichtensignal

A unterschriebene Interrupt Verwendet keine physische Interrupt -Linie. Stattdessen signalisiert ein Gerät seine Serviceanforderung, indem er eine Kurznachricht über ein Kommunikationsmedium sendet, normalerweise a Computerbus. Die Nachricht ist möglicherweise von einem Typ, der für Interrupts reserviert ist, oder es kann ein bereits bestehender Typ wie ein Speicherschreiben sein.

Nachrichten signilierte Interrupts verhalten sich sehr ähnlich wie von Kanten ausgelösten Interrupts, da der Interrupt eher ein momentanes Signal als ein kontinuierlicher Zustand ist. Die Interrupt-Handling-Software behandelt die beiden auf die gleiche Weise. Normalerweise dürfen mehrere anstehende Nachrichten-signalisierte Interrupts mit derselben Nachricht (dieselbe virtuelle Interrupt-Linie) verschmelzen, ebenso wie eng verteilte, von Kanten ausgelöste Interrupts verschmelzen können.

Nachrichtensignal Vektoren unterbrechen Kann geteilt werden, sofern das zugrunde liegende Kommunikationsmedium geteilt werden kann. Es sind keine zusätzlichen Anstrengungen erforderlich.

Da die Identität des Interrupts durch ein Muster von Datenbits angezeigt wird und keinen separaten physischen Leiter erfordert, können viel mehr unterschiedliche Interrupts effizient behandelt werden. Dies verringert die Notwendigkeit eines Teilens. Interrupt -Nachrichten können auch über einen seriellen Bus übergeben werden, ohne zusätzliche Linien zu erfordern.

PCI Express, ein serieller Computerbus, verwendet unterschriebene Interrupts ausschließlich.

Türklingel

In einem Druckknopf Analogie angewendet auf Computersysteme, der Begriff Türklingel oder Türklingel Interrupt wird oft verwendet, um einen Mechanismus zu beschreiben, bei dem a Software System kann a signalisieren oder benachrichtigen Computerhardware Gerät, das einige Arbeiten erledigen müssen. Normalerweise platziert das Softwaresystem Daten in einigen bekannten und sich gegenseitig vereinbarten Speicherorten und "die Türklingel klingeln", indem sie an einen anderen Speicherort schreiben. Dieser unterschiedliche Speicherort wird oft als Türklingelregion bezeichnet, und es kann sogar mehrere Türklingeln geben, die in dieser Region unterschiedliche Zwecke dienen. Es ist dieser Akt des Schreibens in die Türklingelregion des Speicherbereichs, die "die Glocke klingelt" und das Hardware -Gerät benachrichtigt, dass die Daten bereit sind und warten. Das Hardware -Gerät würde jetzt wissen, dass die Daten gültig sind und darauf bewirkt werden können. Es würde normalerweise die Daten zu a schreiben Festplatte, oder schicken Sie sie über einen Netzwerk, oder Verschlüsseln sie usw.

Der Begriff Türklingel Interrupt is usually a Fehlbezeichnung. Es ähnelt einem Interrupt, da das Gerät einige Arbeiten erledigen. Die Türklingelregion wird jedoch manchmal als implementiert befragt Region, manchmal schreibt die Türklingelregion auf physisches Gerät durch RegisterUnd manchmal ist die Türklingelregion direkt in die Register für physikalische Geräte verdrahtet. Wenn Sie entweder durch das Schreiben oder direkt in die Register für physikalische Geräte schreiben, kann dies zu einem realen Interrupt in der zentralen Prozessoreinheit des Geräts erfolgen (Zentralprozessor), wenn es eins hat.

Türklingel -Interrupts können verglichen werden Meldung signalisierte Interrupts, wie sie einige Ähnlichkeiten haben.

Multiprozessor IPI

Im Multiprozessor Systeme, ein Prozessor kann eine Interrupt -Anforderung an einen anderen Prozessor über senden Interprozessor unterbricht[f] (IPI).

Leistung

Interrupts liefern einen niedrigen Overhead und gut Latenz Bei geringer Belastung, aber bei hoher Interrupt -Rate erheblich abgebaut, es sei denn, es wird darauf geachtet, mehrere Pathologien zu verhindern. Das Phänomen, bei dem die Gesamtsystemleistung durch übermäßige Mengen an Verarbeitungszeiten für die Handhabung von Interrupts stark behindert wird Sturm unterbrechen.

Es gibt verschiedene Formen von LebensunterhaltWenn das System die gesamte Zeitverarbeitung verbringt, unterbricht die Verarbeitung unter Ausschluss anderer erforderlicher Aufgaben. Unter extremen Bedingungen kann eine große Anzahl von Interrupts (wie sehr hohen Netzwerkverkehr) das System vollständig zum Stillstand bringen. Um solche Probleme zu vermeiden, a Betriebssystem Muss eine Netzwerk -Interrupt -Handhabung so sorgfältig planen, wie es die Ausführung der Verarbeitung vorliegt.[15]

Mit Multi-Core-Prozessoren können zusätzliche Leistungsverbesserungen bei der Interrupt-Handhabung erreicht werden Empfangen Sie Seitenschuppen (RSS) wenn MultiqueUe NICS werden verwendet. Solche NICs bieten mehrere Empfangen Warteschlangen mit getrennten Interrupts verbunden; Durch das Weiterleiten jeder dieser Interrupts an verschiedene Kerne kann die Verarbeitung der durch den Netzwerkverkehr ausgelösten Interrupt -Anforderungen, die von einer einzigen NIC empfangen werden, auf mehrere Kerne verteilt werden. Die Verteilung der Interrupts zwischen Kernen kann automatisch vom Betriebssystem oder der Routing von Interrupts durchgeführt werden (normalerweise bezeichnet als als IRQ -Affinität) kann manuell konfiguriert werden.[16][17]

Eine rein softwarebasierte Implementierung der empfangenden Verkehrsverteilung, bekannt als Paketlenkung erhalten (RPS) verteilt den empfangenen Verkehr zwischen Kernen später im Datenweg als Teil der Interrupt Handler Funktionalität. Die Vorteile von RPS gegenüber RSS umfassen keine Anforderungen für bestimmte Hardware, fortschrittlichere Verkehrsverteilungsfilter und reduzierte Interrupts, die von einer NIC erzeugt werden. Als Nachteil erhöht RPS die Rate von Interprozessor unterbricht (IPIS). Empfangen Sie Flow -Lenkung (RFS) nimmt den software-basierten Ansatz weiter durch, indem Sie nach berücksichtigen Anwendungslokalität; Weitere Leistungsverbesserungen werden durch Verarbeitung von Interrupt -Anforderungen derselben Kerne erzielt, in denen bestimmte Netzwerkpakete von der gezielten Anwendung konsumiert werden.[16][18][19]

Typische Verwendungen

Interrupts werden üblicherweise verwendet, um Hardware -Timer, Daten in und vom Speicher (z. B. Festplatten -E/O) und Kommunikationsschnittstellen (z. B.,, zu übertragen. Uart, Ethernet), verarbeiten Sie Tastatur- und Mausereignisse und reagieren auf andere zeitkritische Ereignisse, die vom Antragssystem erforderlich sind. Nicht maskierbare Interrupts werden in der Regel verwendet, um auf Anfragen mit hoher Priorität wie Timeoutouts von Watchdog Timer, Power-Down-Signalen und zu reagieren Fallen.

Hardware -Timer werden häufig verwendet, um regelmäßige Interrupts zu erzeugen. In einigen Anwendungen werden solche Interrupts vom Interrupt -Handler gezählt, um die absolute oder verstrichene Zeit im Auge zu behalten oder von der Betriebssystemaufgabe zu verwenden Planer Um die Ausführung des Ausführens zu verwalten Prozesse, oder beides. Periodische Interrupts werden häufig auch verwendet, um Stichproben von Eingabegeräten wie z. Analog-Digital-Konverter, Inkrementelle Encoder -Schnittstellen, und Gpio Eingänge und zu programmieren Ausgabegeränen wie z. Digital-analog-Konverter, Motorkontrollerund gpioausgänge.

Eine Festplatte unterbricht den Abschluss einer Datenübertragung von oder an die Scheibenperipherie; Dies kann dazu führen, dass ein Prozess ausgeführt wird, der darauf wartet, zu lesen oder zu schreiben. Ein Power-Off-Interrupt prognostiziert den unmittelbar bevorstehenden Stromverlust und ermöglicht es dem Computer, ein geordnetes Abschalten durchzuführen, während immer noch genügend Kraft ist, um dies zu tun. Tastaturinterrupts verursachen normalerweise Tastenanschläge gepuffert werden, um implementiert zu werden Typeakhead.

Interrupts werden manchmal verwendet, um Anweisungen zu emulieren, die auf einigen Computern in einer Produktfamilie nicht implementiert sind.[20] Zum Beispiel schwimmender Punkt Anweisungen können in Hardware auf einigen Systemen implementiert und auf niedrigeren kostengünstigen Systemen emuliert werden. In letzterem Fall führt die Ausführung eines nicht implementierten schwimmenden Punktes zu einem Interrupt "Illegale Anweisungen". Der Interrupt-Handler implementiert die Floating Point-Funktion in der Software und kehrt dann zum unterbrochenen Programm zurück, als ob die Hardware-implementierte Anweisung ausgeführt worden wäre.[21] Dies bietet Anwendungssoftware -Portabilität über die gesamte Linie.

Interrupts sind ähnlich wie SignaleDer Unterschied besteht darin, dass Signale für verwendet werden Interprozesskommunikation (IPC), vermittelt durch den Kernel (möglicherweise über Systemaufrufe) und durch Prozesse behandelt, während Interrupts vom Prozessor vermittelt und von der behandelt werden Kernel. Der Kernel kann einen Interrupt als Signal für den Prozess übergeben (typische Beispiele sind Sigsegv, Sigbus, Sigill und Sigfpe).

Geschichte

Hardware -Interrupts wurden als Optimierung eingeführt, wodurch die unproduktive Wartezeit in der Wartezeit beseitigt wurde WahlschleifenWarten auf externe Ereignisse. Das erste System, das diesen Ansatz nutzte, war das Dyseac, abgeschlossen 1954, obwohl frühere Systeme zur Verfügung gestellt wurden Fehlerfalle Funktionen.[22]

Das Univac 1103a Der Computer wird im Allgemeinen der frühesten Verwendung von Interrupts im Jahr 1953 zugeschrieben.[23][24] Früher auf der Univac i (1951) "Der Arithmetiküberlauf löste entweder die Ausführung einer Zwei-Instruktions-Fixroutine unter der Adresse 0 aus oder ließ den Computer nach Option des Programmierers stoppen." Das IBM 650 (1954) haben das erste Ereignis der Interruptmaskierung eingebaut. Das Nationales Büro für Standards Dyseac (1954) war der erste, der Interrupts für E/A verwendete. Das IBM 704 war der erste, der Interrupts für verwendet hat Debuggenmit einer "Übertragungsfalle", die eine spezielle Routine aufrufen konnte, wenn ein Zweiganweis auftrat. Der MIT Lincoln Laboratory TX-2 System (1957) war das erste, das mehrere Prioritäts -Interrupts bereitstellte.[24]

Siehe auch

Anmerkungen

  1. ^ Das Betriebssystem kann das unterbrochene wieder aufnehmen Prozess oder kann zu einem anderen Prozess wechseln.
  2. ^ Das Maskenregister kann ein einzelnes Register oder mehrere Register sein, z. B. Bits in der PSW und andere Teile in Kontrollregister.
  3. ^ Sehen Int (x86 Anweisung)
  4. ^ Einige Betriebssysteme können sich von schwerwiegenden Fehlern wiederherstellen, z. B. Paging in einer Seite einer Paging -Datei nach einem nicht korrigierbaren ECC -Fehler auf einer unveränderten Seite.
  5. ^ Dies könnte nur das sein Programmzähler (PC), a PSW oder mehrere Register.
  6. ^ Bekannt als Schulter -Klotz auf einige IBM -Betriebssysteme.

Verweise

  1. ^ a b "Die Jargon -Datei, Version 4.4.7". 2003-10-27. Abgerufen 20. Januar 2022.
  2. ^ a b Jonathan Corbet; Alessandro Rubini; Greg Kroah-Hartman (2005). "Linux -Geräte -Treiber, Dritte Ausgabe, Kapitel 10. Interrupt -Handling " (PDF). O'Reilly Media. p. 269. Abgerufen 25. Dezember, 2014. Dann geht es nur darum, aufzuräumen, Software -Unterbrechungen auszuführen und wieder regelmäßig zu arbeiten. Die "reguläre Arbeit" hat sich möglicherweise aufgrund eines Interrupts verändert (der Handler konnte Wach auf Ein Prozess zum Beispiel), also ist das Letzte, was bei der Rückkehr von einem Interrupt geschieht, eine mögliche Umplanung des Prozessors.
  3. ^ Rosenthal, Scott (Mai 1995). "Grundlagen von Interrupts". Archiviert von das Original am 2016-04-26. Abgerufen 2010-11-11.
  4. ^ "Hardware unterbricht". Abgerufen 2014-02-09.
  5. ^ "Anweisungen unterbrechen". Steuerungsdaten 3600 Computersystemreferenzhandbuch (PDF). Steuerungsdatengesellschaft. Juli 1964. S. 4–6. 60021300.
  6. ^ Bai, Ying (2017). Mikrocontroller -Engineering mit MSP432: Grundlagen und Anwendungen. CRC Press. p. 21. ISBN 978-1-4987-7298-3. Lccn 2016020120. Im Cortex-M4-System haben die Interrupts und Ausnahmen die folgenden Eigenschaften: ... Im Allgemeinen wird ein einzelnes Bit in einem Maskenregister verwendet
  7. ^ Li, Qing; Yao, Caroline (2003). Echtzeitkonzepte für eingebettete Systeme. CRC Press. p. 163. ISBN 1482280825.
  8. ^ "Hardwareausnahmen". docs.microsoft.com. 3. August 2021.
  9. ^ a b Hyde, Randall (1996). "Kapitel Seventeen: Interrupts, Fallen und Ausnahmen (Teil 1)". Die Kunst der Assemblersprachprogrammierung. Abgerufen 22. Dezember 2021. Das Konzept eines Interrupts hat im Laufe der Jahre im Umfang erweitert. Die 80x86 -Familie hat nur die Verwirrung um Interrupts erweitert, indem die Int (Software Interrupt) Anweisung eingeführt wird. In der Tat haben verschiedene Hersteller Begriffe wie Ausnahmenfehler verwendet, um Fallen und Interrupts abzubrechen, um die Phänomene zu beschreiben, die in diesem Kapitel erörtert wird. Leider gibt es keinen klaren Konsens über die genaue Bedeutung dieser Begriffe. Verschiedene Autoren verwenden unterschiedliche Begriffe für ihre eigene Verwendung.
  10. ^ a b "Intel® 64 und IA-32 Architektur-Softwareentwicklerhandbuch Volumen 1: Basic Architecture". S. 6–12 Vol. 1. Abgerufen 22. Dezember 2021.
  11. ^ a b Bryant, Randal E.; O’Hallaron, David R. (2016). "8.1.2 Klassen von Ausnahmen". Computersysteme: Perspektive eines Programmierers (Drittens global ed.). Harlow. ISBN 1-292-10176-8.
  12. ^ a b "Intel® 64 und IA-32 Architekturen-Softwareentwicklerhandbuch Volume 3A: System-Programmierhandbuch, Teil 1". p. 6-5 Vol. 3a. Abgerufen 22. Dezember 2021.
  13. ^ "Ausnahmebehandlung". Entwickler.arm.com. Arm Cortex-A Series Programmer's Guide für ARMV7-A. Abgerufen 21. Januar 2022.
  14. ^ "Arten von Ausnahme". Entwickler.arm.com. Arm Cortex-A Series Programmer's Guide für ARMV7-A. Abgerufen 22. Dezember 2021.
  15. ^ Mogul, Jeffrey C.; Ramakrishnan, K. K. (1997). "Eliminieren von Empfangsunterlagen in einem interruptgetriebenen Kernel". ACM -Transaktionen auf Computersystemen. 15 (3): 217–252. doi:10.1145/263326.263335. S2CID 215749380. Abgerufen 2010-11-11.
  16. ^ a b Tom Herbert; Willem de Bruijn (9. Mai 2014). "Dokumentation/networking/scaling.txt". Linux -Kernel -Dokumentation. kernel.org. Abgerufen 16. November, 2014.
  17. ^ "Intel 82574 Gigabit Ethernet Controller Family Dataasheet" (PDF). Intel. Juni 2014. p. 1. Abgerufen 16. November, 2014.
  18. ^ Jonathan Corbet (17. November 2009). "Paketlenkung erhalten". Lwn.net. Abgerufen 16. November, 2014.
  19. ^ Jake Edge (7. April 2010). "Flow -Lenkung empfangen". Lwn.net. Abgerufen 16. November, 2014.
  20. ^ Sooo, Shalesh; et al. "Patent US 5632028 a". Google -Patente. Abgerufen 13. August, 2017.
  21. ^ Altera Corporation (2009). Nios II -Prozessorreferenz (PDF). p. 4. Abgerufen 13. August, 2017.
  22. ^ Codd, Edgar F. "Multiprogrammierung". Fortschritte in Computern. 3: 82.
  23. ^ Bell, C. Gordon; Newell, Allen (1971). Computerstrukturen: Lesungen und Beispiele. McGraw-Hill. p. 46. ISBN 9780070043572. Abgerufen 18. Februar, 2019.
  24. ^ a b Smootherman, Mark. "Interrupts". Abgerufen 22. Dezember 2021.

Externe Links