it-swarm.com.de

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

Ich bin mir 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 Aufmerksamkeit der CPU auf sich zu ziehen, was Teil der Implementierung von CPU-Multitasking ist.

  1. Was gibt es dann für einen Hardware-Interrupt? Ist es der Hardwaretreiberprozess?
  2. Wenn ja, wo läuft der Hardwaretreiberprozess? Wenn es auf der CPU läuft, muss es nicht durch 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 der Kernel-Prozess kontaktiert/unterbricht dann die CPU?

Andererseits denke ich, dass der Zweck eines Software-Interrupts darin besteht, dass ein Prozess, der derzeit auf einer CPU ausgeführt wird, einige Ressourcen anfordert.

  1. Was sind die Ressourcen? Sind sie alle in Form von laufenden Prozessen? Stellen beispielsweise CPU-Treiberprozesse und Speichertreiberprozesse CPU- und Speicherressourcen dar? Stellen 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?
45
Tim

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

  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 kein separater Prozess.)

  2. Der Treiber, der den Interrupt behandelt, wird auf der CPU ausgeführt. Die CPU wird von dem, was sie zur Behandlung des Interrupts getan hat, unterbrochen, sodass keine zusätzlichen Schritte erforderlich sind, um die Aufmerksamkeit der CPU zu erregen. In Multiprozessorsystemen unterbricht ein Interrupt normalerweise nur eine der CPUs. (Als Sonderfall verfügen Mainframes über Hardwarekanäle, die mehrere Interrupts ohne Unterstützung der Haupt-CPU verarbeiten können.)

  3. Der Hardware-Interrupt unterbricht die CPU direkt. Dadurch wird der relevante Code im Kernel-Prozess ausgelöst. Bei Prozessen, deren Verarbeitung einige Zeit in Anspruch nimmt, kann der Interrupt-Code durch andere Hardware-Interrupts unterbrochen werden.

    Im Falle einer Timer-Unterbrechung kann der Kernel-Scheduler-Code den ausgeführten Prozess anhalten und die Ausführung eines anderen Prozesses ermöglichen. 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 aktuell laufenden Prozessen generiert 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 Festplatten-E/A wird jedoch normalerweise in die Warteschlange gestellt und zu einem späteren Zeitpunkt ausgeführt. Abhängig von der ausgeführten E/A kann der Prozess angehalten werden, bis die E/A abgeschlossen ist, sodass der Kernel-Scheduler einen anderen auszuführenden Prozess auswählt. E/A können zwischen Prozessen auftreten, und die Verarbeitung wird normalerweise auf die gleiche Weise wie die Festplatten-E/A geplant.

  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 weiterer Vorgang am Ende eines Rohrs sein. Bei einigen Kerneln können einige Teile eines Gerätetreibers im Benutzerbereich vorhanden sein, 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, auf dem derzeit Code ausgeführt wird, kann einen Software-Interrupt generieren. Der Interrupt ist eine Anforderung 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 aufgefordert wird, zu prüfen, ob ein anderer Prozess ausgeführt werden kann.

Antwort auf Kommentar:

  1. Bei 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 die Warteschlange stellen (wie bei Festplatten-E/A üblich) oder wenn möglich sofort ausführen. Die Warteschlange wird vom Treiber verwaltet, häufig wenn auf Hardware-Interrupts reagiert 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 Fluss des aufrufenden Codes.

    Wenn Hardware die CPU dazu bringen muss, etwas zu tun, unterbricht die CPU ihre Aufmerksamkeit auf den Code, den sie ausführt. Die CPU verschiebt 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, der einen anderen Interrupt behandelt; oder der Leerlaufprozess.

57
BillThor