warum ist die IRQ Belegung so sagenhaft unlogisch?
was soll das durcheinander: an IRQ 3 ist com 2 und an IRQ 4 ist COM 1, vor allem warum an IRQ 5 LPT 2 und ERST (!!!) wieder an IRQ 7 der LPT 1.
Schwer zu merken - vorallem warum ist das so?
welche berechtigten Gründe des Durcheinander sprechen dafür?
Hallo,
- Historisch:
Diese Belegung ist so , weil IBM das seinerzeits so definiert hat und die damaligen, originalen, IBM-Interface-Karten nur auf diese Interrupts gejumpert werden konnten.
Diese Belegungen gelten eigentlich nur noch für ISA-Karten (In den heutigen Mainboards sind aber die On-Board-Peripherie-Bausteine immer noch an den ISA-Bus angeschlossen).
- Technisch:
Die Interrupts sind priorisiert, d.h. wenn gleichzeitig 2 Interrupts ausgelöst werden, so wird der CPU nur das Auftreten eines Interrupts gemeldet (eben nur derjenige mit der höheren Priorität). Erst wenn die Bearbeitung dieses Interrupts vom entsprechenden Treiber quittiert worden ist wird der nächste Interrupt der CPU gemeldet.
Wid aber ein bereits ein Interrupt bearbeitet und es tritt ein Interrupt mit einer höheheren Priorität auf, so wird die Bearbeitung desjenigen mit der niedereren Priorität unterbrochen.
Beim IBM-XT waren nur 8 Interrupts vorhanden und nur IRQ 2-7 waren für Steckkarten verfügbar. Dem IBM-AT wurde dann ein zweiter Interrupt-Controller spendiert wodurch dann 15 Interrupts verfügbar waren (Ein Interrupt, IRQ2, wurde benötigt um den zweiten Interrupt-Controller anzuschliessen, nennt sich kaskadierung), auf dem erweiterten Steckkarten-Bus waren dann zusätzlich IRQ 10, 11, 12, 14 und 15 verfügbar.
Hier eine Auflistung der Interrupts nach IBM
(IRQ 0 hat die höchste Priorität, IRQ 7 die niedrigste)
IBM-XT:
=======
IRQ Verwendung
0 Timer1 Output (DRAM Refresh)
1 Tastatur
2 Netzwerk-Karte
3 COM2, BSC, Netzwerk, SDLC
4 COM1, BSC, SDLC
5 LPT2
6 Diskette, Harddisk
7 LPT1, GPIB
IBM\_AT:
=======
IRQ Verwendung
0 Timer1 Output (DRAM Refresh)
1 Tastatur
8 Realtime Clock (Uhr)
9 Netzwerk-Karte (IRQ2 beim XT)
10
11
12
13 Mathematischer Koprozessor
14 Harddisk-Controller
15
3 COM2, BSC, Netzwerk, SDLC
4 COM1, BSC, SDLC
5 LPT2
6 Diskette, Harddisk
7 LPT1, GPIB
MfG Peter(TOO)
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
warum ist die IRQ Belegung so sagenhaft unlogisch?
was soll das durcheinander: an IRQ 3 ist com 2 und an IRQ 4
ist COM 1, vor allem warum an IRQ 5 LPT 2 und ERST (!!!)
wieder an IRQ 7 der LPT 1.
Schwer zu merken - vorallem warum ist das so?
Das IRQ wurde mit dem 8086 eingeführt und seitdem ständig umgebaut. Sei froh dass das Ding nur 16 Kanäle hatte.
Die Verteilung der Com und lpt-port-IRQ hat mit der Priorität-steuerung zu tun, die nach dem (mit dem ?) 80286 überflüssig wurde. (je kleiner, je wichtiger, je schneller (ausserdem gabs damals auch Com0 und multiplexen von IRQ war undenkbar)).
Generell kann man aber ab win2000 alles auf einen IRQ setzen (Keyboard, Timer, Com’s,… ausgeschlossen).
welche berechtigten Gründe des Durcheinander sprechen dafür?
alte Programme, geschrieben für 8086 sollen auch auf P4 2GHz laufen. Wäre das nicht der Fall würde sich wieder andere Leute aufregen. (z.b. M$)
könnte man von 0 anfangen wäre mit gleichem Aufwand und gleichen Kosten ein Chip im Styl AlphaEvo6 auf 2 GHz kein Problem (entspricht etwa einem P4 bei 4-5 GHz).
Aber auf dem würde dann keine normale Software laufen.
cu
Hallo
Einentlich habe ich meine Antwort vor dir angefangen zu schreiben, wurde dann aber durch einige Telefontate aufgehalten.
Das IRQ wurde mit dem 8086 eingeführt und seitdem ständig
umgebaut. Sei froh dass das Ding nur 16 Kanäle hatte.
Beim IBM-PC und IBM-XT (8088) gab es nur 8 Interrupts.
Die Verteilung der Com und lpt-port-IRQ hat mit der
Priorität-steuerung zu tun, die nach dem (mit dem ?) 80286
überflüssig wurde.
Ich kenne keine Interruptsteuerung welche ohne Prioritäts-Steuerung auskommt !!!
Der Unterschied zwischen At und den Vorläufer-Modellen war, dass die Interrupts beim AT zustandsgesteuert ausgelöst wurden (Der Interrupt ist aktiviert solange die entsprechende Leitung auf „0“ gezugen wird) im Gegensatz zur Flankensteuerung (Der Interrupt wird ausgelöst wenn das Signal von „1“ auf „0“ wechselt) bei den Vorgängern. Durch die Zustandssteuerung ist es möglich mehrere Interrupt-Quellen an einem Eingang anzuschliessen.
Tatsächlich wurde aber in allen Modellen der gleiche Interrupt-Controller (8259A) verwendet, er wurde nur vom BIOS unterschiedlich konfiguriert.
(je kleiner, je wichtiger, je schneller
(ausserdem gabs damals auch Com0 und multiplexen von IRQ war
undenkbar)).
Generell kann man aber ab win2000 alles auf einen IRQ setzen
(Keyboard, Timer, Com’s,… ausgeschlossen).
Ist im Prinzip richtig, nur muss dann der Interrupt-Treiber zuerst herausfinden, welches Gerät den Interrupt ausgelöst hat, dies dauert etwas länger als wenn man die Geräte auf mehrere IRQs verteilt. Zudem findet durch die Reihenfolge dieser Abfrage, eine Priorisierung statt welche dann meist durch die Reihenfolge der Installation der Treiber gegeben wird (der zuletz geladene Treiber bekommt die höchste Priorität, da er sich am Anfang der Kette „einschlauft“).
welche berechtigten Gründe des Durcheinander sprechen dafür?
alte Programme, geschrieben für 8086 sollen auch auf P4 2GHz
laufen. Wäre das nicht der Fall würde sich wieder andere Leute
aufregen. (z.b. M$)
könnte man von 0 anfangen wäre mit gleichem Aufwand und
gleichen Kosten ein Chip im Styl AlphaEvo6 auf 2 GHz kein
Problem (entspricht etwa einem P4 bei 4-5 GHz).
Aber auf dem würde dann keine normale Software laufen.
MfG Peter(TOO)
ich danke dir - für mich hilft dann also für prüfungen nur: auswendig lernen und … halbvergessen:frowning:(
das ist interessant - ich danke dir.
(in der reihenfolge, wie du die dinge da unten aufzählst, (nicht von 0-7 sondern gemischt) scheint mir Geschichte mitzuschwingen)
war mit meinen Gedanken woanders…
Ich kenne keine Interruptsteuerung welche ohne
Prioritäts-Steuerung auskommt !!!
sorry, ich meinte die Maskierung. die 8086-testboards an der Schule können IRQ’s nicht alle maskieren, die haben sozusagen immer höchste Priorität.
Der Unterschied zwischen At und den Vorläufer-Modellen war,
dass die Interrupts beim AT zustandsgesteuert ausgelöst wurden
(Der Interrupt ist aktiviert solange die entsprechende Leitung
auf „0“ gezugen wird) im Gegensatz zur Flankensteuerung (Der
Interrupt wird ausgelöst wenn das Signal von „1“ auf „0“
wechselt) bei den Vorgängern. Durch die Zustandssteuerung ist
es möglich mehrere Interrupt-Quellen an einem Eingang
anzuschliessen.
Tatsächlich wurde aber in allen Modellen der gleiche
Interrupt-Controller (8259A) verwendet, er wurde nur vom BIOS
unterschiedlich konfiguriert.
man lernt doch immerwieder dazu…
Ist im Prinzip richtig, nur muss dann der Interrupt-Treiber
zuerst herausfinden, welches Gerät den Interrupt ausgelöst
hat, dies dauert etwas länger als wenn man die Geräte auf
mehrere IRQs verteilt. Zudem findet durch die Reihenfolge
dieser Abfrage, eine Priorisierung statt welche dann meist
durch die Reihenfolge der Installation der Treiber gegeben
wird (der zuletz geladene Treiber bekommt die höchste
Priorität, da er sich am Anfang der Kette „einschlauft“).
Geht nicht anders, meine TV-karte alleine braucht 3 Stück. (siehe WinXP und ACPI). und x86 hat nunmal nur 16 Quellen.
cu
Hallo
war mit meinen Gedanken woanders…
Ich kenne keine Interruptsteuerung welche ohne
Prioritäts-Steuerung auskommt !!!
sorry, ich meinte die Maskierung. die 8086-testboards an der
Schule können IRQ’s nicht alle maskieren, die haben sozusagen
immer höchste Priorität.
Die Proritäts-Reihenfolge der Unterbrechungen einer CPU ist:
RESET (höchste Priorität, nicht maskierbar)
NMI (Non Maskable Interrupt request)
IRQ (Interrupt ReQuest)
Die meisten CPU kennen nur diese 3 Unterbrechungen, wenn man mehr Eingänge benötigt müssen diese mit zusätzlichen Interrupt-Controllern verwaltet werden.
Der Unterschied zwischen At und den Vorläufer-Modellen war,
dass die Interrupts beim AT zustandsgesteuert ausgelöst wurden
(Der Interrupt ist aktiviert solange die entsprechende Leitung
auf „0“ gezugen wird) im Gegensatz zur Flankensteuerung (Der
Interrupt wird ausgelöst wenn das Signal von „1“ auf „0“
wechselt) bei den Vorgängern. Durch die Zustandssteuerung ist
es möglich mehrere Interrupt-Quellen an einem Eingang
anzuschliessen.
Tatsächlich wurde aber in allen Modellen der gleiche
Interrupt-Controller (8259A) verwendet, er wurde nur vom BIOS
unterschiedlich konfiguriert.
man lernt doch immerwieder dazu…
Der 8259A ist sehr komplex und hat viele Konfigurations-Möglichkeiten, leider weiss ich nicht ob in den heutigen Chipsätzen die volle Funktionalität eingebaut wird oder nur diejenigen welche im PC auch tatsächlich benutzt werden.
Ist im Prinzip richtig, nur muss dann der Interrupt-Treiber
zuerst herausfinden, welches Gerät den Interrupt ausgelöst
hat, dies dauert etwas länger als wenn man die Geräte auf
mehrere IRQs verteilt. Zudem findet durch die Reihenfolge
dieser Abfrage, eine Priorisierung statt welche dann meist
durch die Reihenfolge der Installation der Treiber gegeben
wird (der zuletz geladene Treiber bekommt die höchste
Priorität, da er sich am Anfang der Kette „einschlauft“).
Geht nicht anders, meine TV-karte alleine braucht 3 Stück.
(siehe WinXP und ACPI). und x86 hat nunmal nur 16 Quellen.
Eigentlich kann ein 8086 256 Interrupt-Vektoren verwenden. Einige davon werden direkt von der CPU verwendet (Ungültige Befehle, Division mit 0, etc.), wenn man genügend Interrupt-Controller einbauen würde (maximum 9 Controller) dann könnte man 64 IRQs verwirklichen.
Leider haben MS und IBM viele Interrupt-Vectoren für andere Dinge „misbraucht“, somit ist dies heute aus Gründen der kompatibilität nicht mehr möglich.
MfG Peter(TOO)
warum ist die IRQ Belegung so sagenhaft unlogisch?
was soll das durcheinander: an IRQ 3 ist com 2 und an IRQ 4
ist COM 1, vor allem warum an IRQ 5 LPT 2 und ERST (!!!)
wieder an IRQ 7 der LPT 1.
Schwer zu merken - vorallem warum ist das so?
Den an sich recht vollständigen Antworten möchte ich nur noch eine hinzufügen. Drucker sind i.d.R. recht langsame Peripheriegeräte, die Schnittstellen müssen daher nicht zwingend eigene IRQs belegen. Man kann sie auch im „Polling“ Betrieb nutzen, d.h. der Rechner guckt alle Nase lang, ob vielleicht mal wieder ein Signal anliegt. Dann kannst Du die eigentlich immer knappen IRQs an andere Geräte vergeben.
Gruß
Fritze