Wir wissen aus dem Video zu Interrupts und Traps auf dem X86er, wie die CPU intern auf
Unterbrechungen reagiert, also bei einem Signal auf der Interrupt-Leitung in unsere Behandlungsroutine
wechselt.
Zumeist wollen wir damit auf asynchronere Ereignisse reagieren, die von externen Geräten
wie der Dastardur kommen.
Aber wie sind diese nun verschalten, damit sie die Unterbrechungen der CPU auslösen
können?
Ursprünglich gab es dafür den Programmable Interrupt Controller, PIC 8259A, an den bis
zu acht Geräte angeschlossen werden können.
Der Controller prüft dauernd diese acht Leitungen, hat dabei eine feste Prioritätenreihenfolge.
Auch der Interrupt Vektor wird entsprechend der Leitungen hochgezählt, änderbar ist
nur der Start Vektor, und zwar über IO-Ports.
Üblicherweise waren der ersten Leitung des PICs der Timer, an der zweiten die Tastatur
verdrahtet, Leitung 3 und 4 für Seriell, 5 für den PC-Speaker, 6 für das Desken-Laufwerk
und die letzte Leitung für den Parallelport, an dem zum Beispiel ein Drucker hing.
Wenn nun auf der angeschlossenen Tastatur eine Taste gedrückt wird, fragt dies der
PIC ab und meldet es der CPU.
Und ja, in der Standardeinstellung des PICs entsprechen die Vektoren tatsächlich den
X86-Traps, weshalb die Tastatur einen Interrupt Vektor 1 verursacht, wegen der Nullindizierung.
Nach der Unterbrechungsbehandlung muss die CPU ein End of Interrupt senden.
Erst danach lässt der PIC weitere Interrupts zu.
Da die 8 Geräte schon bald nicht mehr ausreichten, wurde an die dritte Leitung ein weiterer PIC
angeschlossen.
Mit diesem wurden Uhr, Maus, Co-Prozessor und Festplatte verbunden, jedoch nur mit einer
entsprechend seltsamen Prioritätenreihenfolge und zudem erhöhten Latenzen.
Aber das fundamentale Problem vom PIC ist, dass dieser nur für eine einzelne CPU entwickelt
wurde.
Für Mehrkernsysteme ist er nicht geeignet.
Als Nachfolger wurde der Advanced Programmable Interrupt Controller, kurz A-PIC, entwickelt.
Dieser führt eine Aufteilung in Local A-PIC, kurz LAPIC, für jede CPU sowie einen gemeinsamen
IO-A-PIC ein.
An den IO-A-PIC können bis zu 24 Geräte angeschlossen werden.
Theoretisch ist sogar der Betrieb mehrerer IO-A-PICs möglich.
Dabei kann jedem Gerät eine beliebige Interruptvektornummer zugewiesen, sowie auch jeweils die Ziel-CPUs
konfiguriert werden.
Beispielsweise können wir den IO-A-PIC so konfigurieren, dass die Tastatur an der zweiten
Leitung einen Interruptvektor 33 an CPU einschickt.
Wird nun eine Taste gedrückt, erkennt dies der IO-A-PIC und legt eine entsprechende Nachricht
auf den A-PIC-Bus.
Der Local A-PIC, der CPU eins, empfängt dies und teilt es der CPU mit.
Nach der erfolgreichen Bearbeitung wird vom LAPIC ein ACK an den IO-A-PIC gesendet.
Für die Konfiguration der Geräte müssen die Register des IO-A-PIC entsprechend konfiguriert
werden.
Allerdings gibt es keinen direkten Zugriff auf diese Register.
Es sind nur ein Index- und Datenregister im Speicher eingeblendet, mit welchem ein indirekter
Zugriff auf die internen Register erfolgen kann.
Die Adresse des internen Registers muss in das Indexregister geschrieben werden, welches
an der Speicheradresse 0xFIC0000 liegt.
Im Anschluss kann über das Datenregister 16 bytes weiter auf den Inhalt des gewählten
internen Registers lesend und schreiben zugegriffen werden.
Presenters
Zugänglich über
Offener Zugang
Dauer
00:05:04 Min
Aufnahmedatum
2020-08-06
Hochgeladen am
2021-09-20 18:46:04
Sprache
de-DE
Unterbrechungen durch externe Geräte mittels APIC für Aufgabe 2 der Lehrveranstaltung Betriebssysteme.
Folien und Transkript zum Video.