Computerhardware: Prozessor: Unterbrechungen
In Ihrem PC laufen ständig mehr als 30 interne Prozesse ab, selbst wenn Sie eigentlich nichts tun. Wollen Sie mal nachsehen? Halten Sie die Tasten Strg und Alt gedrückt und tippen Sie kurz auf die Taste Entf. Klicken Sie auf Task-Manager und wählen Sie die Registerkarte Systemleistung . Im unteren Teil des Fensters sehen Sie die Statistik. Im Abschnitt „Insgesamt“ sehen Sie, wieviele „Prozesse“ gerade aktiv sind. Die Prozesse bestehen ihrerseits aus Teilabläufen, sogenannten „Threads“. Auf der Registerkarte Prozesse sehen Sie die Liste der aktiven Prozesse.
Linux-User öffnen einfach eine Shell und tippen den Befehl
ps -A
ein, der alle aktiven Prozesse auflistet.
Hier kommt natürlich die Frage auf: Was macht der Computer denn eigentlich? Die Antwort lautet: Er überwacht sich selbst und vor allem Sie, ob und was Sie am Computer tun!
Im Computer gibt es zahlreiche Ereignisse, die der Prozessor nicht verpassen darf: Ein Tastendruck auf der Tastatur, eine Bewegung der Maus, das Eintreffen eines Datenpakets vom Modem oder vom Netzwerk und anderes. Es gibt zwei Möglichkeiten für den Prozessor, solche Ereignisse nicht zu verpassen: „Polling“ und „Interrupt“.
- Polling nennt man es, wenn die CPU in regelmäßigen, kurzen Abständen bei jedem Gerät mal nachschaut, ob ein Ereignis eingetreten ist, das eine Reaktion nötig macht. Polling ist einfach zu programmieren, frisst aber einen nennenswerten Teil der CPU-Leistung.
- Ein Interrupt ist ein internes oder externes Ereignis, das zu einem nicht vorhersehbaren Zeitpunkt auftritt. Im täglichen Leben sind die Türklingel, das Telefon, das Pfeifen des Wasserkessels und das Schreien eines eigenen Babys solche Interruptquellen. Bei einem Interrupt lässt man in der Regel alles stehen (unterbricht die momentane Beschäftigung) und läuft los.
Auf manche Interrupts kann man nicht verzichten. Stellen Sie sich vor, Ihre Klingel ist defekt und Sie erwarten Besuch. Polling ist, wenn Sie jede Minute einmal aus dem Fenster sehen bzw. die Wohnungstür aufreißen, um nachzusehen, ob vielleicht gerade der Besuch vor der Tür steht.
Ganz offensichtlich ist die Verwendung von Interrupts vorteilhafter als Polling. Die CPU kann sich mit voller Leistung einer Anwendung widmen und wird nur dann kurz unterbrochen, wenn ein externes Ereignis eintritt. Andererseits ist die Behandlung von Interrupts erheblich schwieriger zu programmieren als Polling, denn es kann passieren, dass mehrere oder alle überwachten Ereignisse gleichzeitig eintreten. Darum müssen Prioritäten gesetzt werden.
Interrupts eignen sich besonders, um externe Geräte wie Tastaturen, Mäuse, Modems etc. zu bedienen, die nicht ständig abgefragt werden sollen, sondern nur relativ selten ein elektrisches Signal (einen Interrupt) geben. Selbst bei sehr schnellem Schreiben kann die CPU viele Millionen von Befehlen zwischen zwei Tastenbetätigungen ausführen, und bei einem so seltenen Ereignis wie einer Tastenbetätigung ist es „unwirtschaftlich“, Millionen Male nachzusehen, ob es Neues von der Tastatur gibt.
Wie werden die Interrupts zur CPU geleitet?
[Bearbeiten]Bereits die 1972 produzierte Intel-CPU i4040 hatte einen Interrupt-Eingang. Die i8086er und alle nachfolgenden CPUs haben zwei Anschlüsse, über die externe Interrupts gemeldet werden können. Diese Anschluss-„Beinchen“ heißen NMI und INTR.
- Über den NMI-Eingang werden „Katastrophen“ gemeldet, z. B. Stromausfall oder Speicherfehler. Der NMI kann nicht gesperrt (das Fachwort heißt „maskiert“) werden, hat die höchste Priorität und unterbricht immer das gerade laufende Programm.
- Über den INTR-Anschluss werden nicht-katastrophale Ereignisse an die CPU gemeldet, wie z. B. „Benutzer hat eine Taste gedrückt“ oder „Festplatte hat Positionierung des Kopfes beendet, gleich beginnt die Übertragung der Daten“ oder „Maus wurde 1/50 mm bewegt“.
Der INTR-Eingang kann „maskiert“, d. h. gesperrt werden. Meist wird er nur für eine sehr kurze Zeit gesperrt, damit die CPU während kritischer Phasen der Bearbeitung eines Interrupts nicht durch einen weiteren Interrupt gestört wird.
Nun gibt es aber recht viele verschiedene Ereignisse, die an die CPU gemeldet werden müssen – aber die CPU hat nur einen einzigen Eingang dafür. Deshalb wird seit dem ersten IBM-PC ein Hilfs-Schaltkreis verwendet, der die Interruptverwaltung erleichtert. Dieser integrierte Schaltkreis mit der Bezeichnung "Intel 8259A Programmable Interrupt Controller" (PIC) verfügt über 8 Eingänge, die mit maximal 8 Interruptquellen verbunden werden können. Der Ausgang des Interrupt Controllers ist mit dem INTR Eingang der CPU verbunden. Ein ankommender Interrupt wird an die CPU weitergeleitet, darüber hinaus speichert der Interruptcontroller die Interrupts. So gehen normalerweise keine Interruptmeldungen verloren, auch wenn die CPU mal nicht mit der Abarbeitung nachkommt. Wenn vom Interrupt-Controller ein Signal kommt, kann die CPU mit einer kurzen Anfrage an den i8259A klären, welche der acht Quellen die Ursache war.
Im Zuge der Weiterentwicklung des Ur-PC wurden ab den „286iger“ neue Komponenten hinzugefügt: Festplatte, Maus und Coprozessor. Um die neuen Interruptquellen zu integrieren, wurde ein weiterer i8259A Bausteine integriert. Seine Eingänge sind mit den Interruptquellen IRQ 8 bis IRQ 15 verbunden. Weil der INTR Eingang der CPU bereits vom ersten Controller belegt ist, wurde der zweite Baustein an den Eingang IRQ 2 des ersten i8259A Controllers angeschlossen. Beide Bausteine sind also hintereinander geschaltet, man spricht von „Kaskadierung“. Diese Beschaltung führt dazu, dass alle am zweiten Controller ankommenden Interrupts (8 bis 15) in der Priorität zwischen IRQ 1 und IRQ 3 eingeordnet werden.
Die Interrupts sind von Null bis 15 nummeriert. Je höher die Nummer eines Interrupts ist, desto geringer ist dessen Priorität.
Die Interrupts sind in Reihenfolge fallender Priorität aufgeführt:
IRQ 0 | Timer-Hardware-Interrupt |
IRQ 1 | Tastatur-Interrupt |
IRQ 8 | Echtzeituhr |
IRQ 9 | variabel |
IRQ 10 | variabel |
IRQ 11 | variabel |
IRQ 12 | PS/2 Mouse |
IRQ 13 | Mathematischer Coprozessor |
IRQ 14 | Primärer Festplattencontroller |
IRQ 15 | Sekundärer Festplattencontroller |
IRQ 3 | COM2 Interrupt |
IRQ 4 | COM1 Interrupt |
IRQ 5 | variabel |
IRQ 6 | Diskettenlaufwerk-Controller |
IRQ 7 | LPT1 Interrupt |
Beachten Sie, dass die Tastatur die zweithöchste Priorität hat! Auch die Maus hat eine hohe Priorität. Eine kluge Entscheidung der Konstrukteure – denn wie würden wohl die meisten Menschen reagieren, wenn der Computer nicht auf jeden Tastendruck reagiert? Möglicherweise mit der Axt oder mit dem Öffnen des Fensters ...
Der Festplattencontroller hat eine relativ geringe Priorität. Wenn es die CPU hin und wieder nicht schafft, rechtzeitig auf den IRQ 14 (Festplatte) zu reagieren, ist das nicht so katastrophal wie eine verpasste Tastenbetätigung, denn nach einer weiteren Umdrehung der Festplatte (dauert 8 Millisekunden oder „nur“ 25 Millionen CPU-Takte) kommen die Daten ja erneut am Lesekopf vorbeigerast.
Für den Einbau einer zusätzlichen Hardwarekomponente war es früher notwendig, einen unbenutzten Hardware-Interrupt zu finden. Die Interrupts 5, 9, 10 und 11 sind in der Grundkonfiguration des PC nicht vergeben und stehen für Erweiterungskarten variabel zur Verfügung. Die Konfiguration von ISA-Steckkarten erfolgte durch Schalter oder Steckbrücken (den sogenannten Jumpern) direkt auf der Steckkarte - eine komplizierte und fehleranfällige Arbeit. Wenn zwei ISA-Komponenten versehentlich denselben Interrupt zugewiesen erhielten, gab es meist Abstürze, vor allem wenn die beiden miteinander konkurrierenden Komponenten gleichzeitig benutzt werden.
Bei AGP- und PCI-Steckplätzen sowie USB und einigen externen Anschlüssen wurde die Verteilung der Interrupts automatisiert. Für die Verteilung ist eine Komponente des Haupt-BIOS zuständig, die als Plug-and-Play-BIOS bezeichnet wird. Dieses PnP-BIOS fragt die vorhandenen Komponenten beim Start des PCs nach ihren Anforderungen und verteilt dann die Ressourcen – mehr oder weniger gut.
Bei PCI-Komponenten ist die gleichzeitige Nutzung des gleichen Interrupts im Prinzip möglich. Es sollten aber bitte nicht mehr als zwei Komponenten sein, die sich einen Interrupt teilen, und die zugehörigen Treiber sollten sorgfältig programmiert sein. Letzteres ist recht unwahrscheinlich, daher sollte man im Interesse maximaler Stabilität trotzdem danach streben, jeder Komponente einen eigenen IRQ zuzuordnen.
Wie kann man die Interruptverteilung prüfen?
[Bearbeiten]Bei einem schlecht programmierten BIOS wurden schon bis zu fünf Interrupts auf einen einzigen Kanal gelegt, obwohl vier andere Kanäle frei waren. Häufige Abstürze waren die Folge. Falls Ihr Rechner über ein internes oder externes Modem, eine ISDN-Karte, einen Scanner oder andere Zusatzkarten verfügt, prüfen Sie bei Problemen, ob zwischen den Interrupt-Ebenen (IRQ) ein Konflikt besteht.
- Unter Windows kann man über Start – Einstellungen – Systemsteuerung – Verwaltung – Computerverwaltung – Systeminformationen - Hardwareressourcen die aktuelle Interrupt-Zuordnung ansehen.
- Unter dem Betriebssystem Linux geht es einfacher. Es genügt der Konsolen Befehl
- cat /proc/interrupts
- Unter KDE kann man über den Menüpunkt System und Infozentrum die Interrupts ermitteln.
Die Grafikkarte und die Netzwerkkarte sollten unbedingt einen eigenen Interrupt haben, andere doppelt belegte Interrupts sind nicht allzu schlimm. USB-Interrupts sind unkritisch. Drei- und Mehrfachbelegungen sind übel.
Wie kann man die Interruptverteilung beeinflussen?
[Bearbeiten]Man kann im BIOS nicht benötigte Anschlüsse abschalten. Das ist ungefährlich, Windows nimmt dadurch keinen Schaden. Meist sind die seriellen Anschlüsse (COM1 und COM2) unbenutzt, was die Interrupts 4 und 3 freimacht. Wenn der parallele Druckeranschluss nicht gebraucht wird und abgeschaltet werden kann, wird Interrupt 7 frei.
Wenn das nichts bringt, bleibt nur noch, eine Steckkarte in einen anderen Steckplatz der Hauptplatine umzustecken. Das ist für Windows nicht ganz ungefährlich, gelegentlich bekommt Windows dadurch Treiberprobleme. Wenn Sie aus dem (englischen) Handbuch zur Hauptplatine nicht entnehmen können, was wohin umzustecken ist, lassen Sie es lieber!