1. Vorwort
Linux-Interrupts werden in zwei Typen unterteilt: Soft-Interrupts und Hard-Interrupts. Lassen Sie mich darauf hinweisen, dass sich die Bedeutung von „weich“ und „hart“ hier auf softwarebezogene und hardwarebezogene Interrupts bezieht und nicht auf softwareimplementierte Interrupts oder hardwareimplementierte Interrupts.
Soft Interrupt ist der „Signalmechanismus“. Ein Soft Neutral ist kein Software-Interrupt. Linux verwendet Signale, um verschiedene Interrupt-Operationen für den Prozess zu generieren. Der spezifische Inhalt kann hier übersprungen werden [1]. Im Allgemeinen werden Soft-Interrupts durch Triggerereignisse des Kernel-Mechanismus verursacht (z. B. Zeitüberschreitungen bei der Ausführung von Prozessen). Es kann jedoch nicht ignoriert werden, dass eine große Anzahl von Soft-Interrupts auch durch Hardware-Interrupts verursacht wird, z. B. wenn ein Druckeranschluss vorhanden ist Erzeugt einen Hardware-Interrupt. Er benachrichtigt den hardwarebezogenen Hard-Interrupt, und der Hard-Interrupt generiert einen Soft-Interrupt und sendet ihn an den Betriebssystemkernel, sodass der Kernel den in der Druckeraufgabenwarteschlange schlafenden Verarbeitungsprozess aufweckt auf diesem Soft-Interrupt.
Hard Interrupt ist ein „Interrupt-Handler“ im üblichen Sinne. Er verarbeitet das von der Hardware gesendete Interrupt-Signal direkt. Wenn der Hard-Interrupt das Interrupt-Signal empfängt, das er verarbeiten soll, geht er zurück zu dem Gerät, das er angesteuert hat, um sich das Statusregister des Geräts anzusehen, um zu verstehen, was passiert ist, und entsprechende Vorgänge auszuführen. Wir werden nicht auf Soft Interrupts eingehen, die bei der Prozessplanung berücksichtigt werden müssen. Da es sich um Gerätetreiber-Interrupts handelt, liegt der Schwerpunkt auf harten Interrupts. Was wir hier besprechen, sind harte Interrupts, also hardwarebezogene Interrupts.
2. Interrupt-Generierung
Interrupt liegt daran, dass das Peripheriegerät das Betriebssystem darüber informieren muss, dass dort etwas passiert ist, aber die Funktion des Interrupts ist nur ein Gerätealarm, wenn das Licht aufleuchtet ist eingeschaltet, es unterbricht nur den Handler, dass etwas passiert ist, aber Sie müssen zum Gerät gehen, um zu sehen, was passiert ist. Mit anderen Worten: Wenn der Interrupt-Handler erfährt, dass auf dem Gerät ein Interrupt aufgetreten ist, weiß er nicht, was mit dem Gerät passiert ist. Erst wenn er auf einige Statusregister auf dem Gerät zugreift, kann er wissen, was genau passiert ist bewältigen.
Das Gerät sendet über die Interrupt-Leitung einen High-Pegel an den Interrupt-Controller, um dem Betriebssystem mitzuteilen, dass es einen Interrupt generiert hat, und das Betriebssystem erkennt anhand des Statusbits des Interrupts, welche Interrupt-Leitung den Interrupt generiert hat Controller. Der auf dem PC verwendete Interrupt-Controller ist der 8259. Jeder dieser Controller kann 8 Interrupt-Leitungen verwalten. Bei der Kaskadierung von zwei 8259 können insgesamt 15 Interrupt-Leitungen gesteuert werden. Bei den Interrupt-Leitungen handelt es sich hier um echte Schaltkreise, die über eine Hardware-Schnittstelle mit dem Gerätecontroller außerhalb der CPU verbunden sind.
3. IRQ
Nicht jedes Gerät kann ein Interrupt-Signal an die Interrupt-Leitung senden Das Signal wird auf dieser Interrupt-Leitung gesendet. Da Computer immer mehr externe Geräte haben, reichen 15 Interrupt-Leitungen nicht mehr aus. Um eine Interrupt-Leitung zu nutzen, müssen Sie eine Interrupt-Leitung beantragen. Dies ist IRQ (Interrupt Requirement). Wir bezeichnen die Beantragung einer Interrupt-Leitung oft als Beantragung eines IRQ oder Beantragung einer Interrupt-Nummer.
IRQ ist sehr wertvoll, daher empfehlen wir Ihnen, einen IRQ nur dann zu beantragen, wenn ein Gerät einen Interrupt benötigt, oder bei der Beantragung eines IRQ eine gemeinsame Interrupt-Methode zu verwenden, damit mehr Geräte Interrupts nutzen können.
Egal ob der IRQ exklusiv genutzt oder geteilt wird, der Prozess der Beantragung eines IRQ ist derselbe und gliedert sich in 3 Schritte:
1. Prüfen Sie alle Interrupt-Leitungen, um festzustellen, welche Interrupts nicht belegt sind. Wählen Sie einen dieser unbelegten Interrupts als IRQ des Geräts.
2. Beantragen Sie den ausgewählten IRQ über die Interrupt-Anwendungsfunktion. Hiermit wird angegeben, ob die Anwendungsmethode exklusiv oder gemeinsam genutzt wird.
3. Bestimmen Sie anhand des Rückgabewerts der Interrupt-Anwendungsfunktion, was zu tun ist: Wenn sie erfolgreich ist, ist alles in Ordnung. Wenn sie fehlschlägt, wenden Sie die Anwendung entweder erneut an oder geben sie auf und geben einen Fehler zurück.
Der Prozess der Bewerbung für einen IRQ wird im Quellcode im Nachschlagewerk ausführlich beschrieben. Leser können ein tiefes Verständnis des Bewerbungsprozesses erlangen, indem sie das kurze Beispiel im Quellcode sorgfältig lesen.
Das Obige ist eine ausführliche Analyse des Linux-Gerätetreiber-Interrupts (1). Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!