Was sind Software- und Hardware-Interrupts und wie werden sie verarbeitet?

43

Ich bin nicht sicher, ob ich das Konzept von Hardware- und Software-Interrupts verstehe.

Wenn ich das richtig verstehe, besteht der Zweck eines Hardware-Interrupts darin, die CPU auf sich aufmerksam zu machen, was Teil der Implementierung von CPU-Multitasking ist.

  1. Was gibt dann einen Hardware-Interrupt aus? Handelt es sich um den Hardwaretreiberprozess?
  2. Wenn ja, wo läuft der Hardwaretreiberprozess? Wenn es auf der CPU läuft, muss es doch nicht durch einen Hardware-Interrupt auf die CPU aufmerksam werden, oder? Läuft es also woanders?
  3. Unterbricht ein Hardware-Interrupt die CPU direkt oder kontaktiert er zuerst den Kernel-Prozess und kontaktiert / unterbricht der Kernel-Prozess dann die CPU?

Andererseits denke ich, dass der Zweck eines Software-Interrupts darin besteht, dass ein Prozess, der gerade auf einer CPU läuft, einige Ressourcen anfordert.

  1. Was sind die Ressourcen? Sind sie alle in Form von laufenden Prozessen? Stellen CPU-Treiber- und Speichertreiberprozesse beispielsweise CPU- und Speicherressourcen dar? Stellt der Treiberprozess der E / A-Geräte E / A-Ressourcen dar? Sind andere laufende Prozesse, mit denen der Prozess kommunizieren möchte, auch Ressourcen?
  2. Wenn ja, kontaktiert ein Software-Interrupt die Prozesse (die die Ressourcen darstellen) indirekt über den Kernel-Prozess? Ist es richtig, dass ein Software-Interrupt im Gegensatz zu einem Hardware-Interrupt niemals direkt die CPU unterbricht, sondern stattdessen den Kernel-Prozess unterbricht / kontaktiert?
Tim
quelle

Antworten:

55

Ein Hardware-Interrupt ist nicht wirklich Teil des CPU-Multitasking, kann ihn aber auslösen.

  1. Hardware-Interrupts werden von Hardwaregeräten wie Festplatten, Netzwerkkarten, Tastaturen, Uhren usw. ausgegeben. Jedes Gerät oder jeder Satz von Geräten verfügt über eine eigene IRQ-Leitung (Interrupt ReQuest). Basierend auf dem IRQ sendet die CPU die Anforderung an den entsprechenden Hardwaretreiber. (Hardwaretreiber sind normalerweise Unterprogramme innerhalb des Kernels und keine separaten Prozesse.)

  2. Der Treiber, der den Interrupt behandelt, wird auf der CPU ausgeführt. Die CPU ist von dem, was sie zur Behandlung des Interrupts getan hat, unterbrochen, so dass keine zusätzlichen Maßnahmen erforderlich sind, um die Aufmerksamkeit der CPU zu erregen. In Multiprozessorsystemen wird ein Interrupt normalerweise nur eine der CPUs unterbrechen. (In Ausnahmefällen verfügen Mainframes über Hardware-Kanäle, die mehrere Interrupts ohne Unterstützung durch die Haupt-CPU verarbeiten können.)

  3. Der Hardware-Interrupt unterbricht die CPU direkt. Dadurch wird der entsprechende Code im Kernelprozess ausgelöst. Bei Prozessen, deren Verarbeitung einige Zeit in Anspruch nimmt, kann es vorkommen, dass der Interrupt-Code von anderen Hardware-Interrupts unterbrochen wird.

    Im Falle einer Timer-Unterbrechung kann der Kernel-Scheduler-Code den ausgeführten Prozess anhalten und die Ausführung eines anderen Prozesses zulassen. Es ist das Vorhandensein des Scheduler-Codes, der Multitasking ermöglicht.

Software-Interrupts werden ähnlich wie Hardware-Interrupts verarbeitet. Sie können jedoch nur von Prozessen generiert werden, die gerade ausgeführt werden.

  1. Typischerweise sind Software-Interrupts Anforderungen für E / A (Eingabe oder Ausgabe). Diese rufen Kernel-Routinen auf, die das Auftreten der E / A planen. Bei einigen Geräten wird die E / A sofort ausgeführt, die Datenträger-E / A werden jedoch normalerweise in die Warteschlange gestellt und zu einem späteren Zeitpunkt ausgeführt. Abhängig von der ausgeführten E / A wird der Prozess möglicherweise angehalten, bis die E / A abgeschlossen ist, sodass der Kernel-Scheduler einen anderen auszuführenden Prozess auswählt. Zwischen den Prozessen können E / A-Vorgänge auftreten, und die Verarbeitung wird in der Regel auf dieselbe Weise geplant wie die Datenträger-E / A-Vorgänge.

  2. Der Software-Interrupt kommuniziert nur mit dem Kernel. Es liegt in der Verantwortung des Kernels, alle anderen Prozesse zu planen, die ausgeführt werden müssen. Dies könnte ein anderer Prozess am Ende einer Pipe sein. Einige Kernel erlauben es, dass einige Teile eines Gerätetreibers im Benutzerbereich vorhanden sind, und der Kernel plant, dass dieser Prozess bei Bedarf ausgeführt wird.

    Es ist richtig, dass ein Software-Interrupt die CPU nicht direkt unterbricht. Nur Code, der aktuell Code ausführt, kann einen Software-Interrupt generieren. Der Interrupt ist eine Aufforderung an den Kernel, etwas (normalerweise E / A) für die Ausführung des Prozesses zu tun. Ein spezieller Software-Interrupt ist ein Yield-Aufruf, bei dem der Kernel-Scheduler überprüft, ob ein anderer Prozess ausgeführt werden kann.

Antwort auf Kommentar:

  1. Für E / A-Anforderungen delegiert der Kernel die Arbeit an den entsprechenden Kerneltreiber. Die Routine kann die E / A für eine spätere Verarbeitung in eine Warteschlange stellen (gemeinsam für Platten-E / A) oder sie sofort ausführen, wenn dies möglich ist. Die Warteschlange wird vom Treiber bearbeitet, häufig, wenn auf Hardware-Interrupts geantwortet wird. Wenn eine E / A abgeschlossen ist, wird das nächste Element in der Warteschlange an das Gerät gesendet.

  2. Ja, Software-Interrupts vermeiden den Hardware-Signalisierungsschritt. Der Prozess, der die Softwareanforderung generiert, muss ein aktuell ausgeführter Prozess sein, damit die CPU nicht unterbrochen wird. Sie unterbrechen jedoch den Ablauf des aufrufenden Codes.

    Wenn die Hardware die CPU dazu bringen muss, etwas zu tun, unterbricht sie die Aufmerksamkeit auf den Code, den sie ausführt. Die CPU überträgt ihren aktuellen Status auf einen Stapel, damit sie später zu dem zurückkehren kann, was sie getan hat. Der Interrupt könnte anhalten: ein laufendes Programm; der Kernel-Code behandelt einen anderen Interrupt; oder der Leerlaufprozess.

BillThor
quelle
Vielen Dank! (1) Werden bei einem Software-Interrupt E / A-Vorgänge von der E / A-Gerätetreiberroutine innerhalb des Kernelprozesses ausgeführt? (2) Ist es richtig, dass der Pfad, den der Software-Interrupt durchläuft, einen Schritt kürzer ist als der Pfad für den Hardware-Interrupt? Mit anderen Worten für Software-Interrupt: Softwareprogramm -> Gerätetreiber-Routine innerhalb des Kernel-Prozesses; für Hardware-Interrupt: Hardware -> CPU -> Gerätetreiberroutine innerhalb des Kernelprozesses?
Tim
Vielen Dank! Ist es richtig, dass ein Hardware-Interrupt dazu führt, dass die CPU ihren aktuellen Status auf einen Stack überträgt, damit der Hardwaretreiber auf der CPU ausgeführt und der unterbrochene Prozess später auf der CPU zurückgesetzt werden kann? Verursacht ein Software-Interrupt auch, dass der auf der CPU ausgeführte Prozess in einen Stack verschoben wird, damit der angeforderte Dienst auf der CPU ausgeführt werden kann?
Tim
In beiden Fällen wird der Status auf den Stapel verschoben. Dadurch kann das System den Status neu laden, wenn der Interrupt abgeschlossen ist.
BillThor
Vielen Dank! Wenn der angeforderte Dienst nicht auf der CPU ausgeführt wird, z. B. E / A-Vorgänge, die auf den E / A-Geräten anstelle der CPU ausgeführt werden, und der anfragende Prozess fortgesetzt werden kann, ohne auf den Abschluss des angeforderten Diensts zu warten, wird der anfragende Prozess weiterhin in einem Stapel gespeichert ?
Tim
Normalerweise wird das Lesen der E / A synchron aufgerufen und der Prozess wird erst ausgeführt, wenn die E / A abgeschlossen ist. Zum lesen will man das fast immer. Schreibvorgänge werden normalerweise asynchron ausgeführt, sodass der Prozess weiter ausgeführt werden kann.
BillThor