Willkommen! Einloggen Ein neues Profil erzeugen

erweitert

Interrupt Controller

geschrieben von PascalW 
Interrupt Controller
28.11.2020 11:35:01
Hallo!

Nach der Vorlesung über den Interrupt Controller sind mir noch einige Fragen offen geblieben.

1. Das allgemeine Vorgehen ist ja dieses: Angenommen die CPU arbeitet gerade keine ISR ab und der aller erste Interrupt mit Priorität i meldet sich beim Controller. Dieser würde i in IVN schreiben, IVN auf den Datenbus legen und durch INT signalisieren, dass es einen Interrupt gibt, oder?

2. Wie sieht folgendes Szenario aus: Die CPU arbeitet gerade an einer ISR mit Priorität i und ein zweiter Interrupt mit Priorität j < i wird dem Controller gemeldet. Wir haben gesagt, da j < i, wird dieser Interrupt nicht der CPU gemeldet. Nun ist meine Frage: Wird der Interrupt trotzdem in IVN gespeichert und fungiert dieser als "pending Interrupt" Also nach INTA würde dann der Controller INT und den Interrupt der Priorität j weiterleiten?

3. Wie sieht es dann in diesem Szenario aus: Die CPU arbeitet gerade an einer ISR mit priorität i. Nun meldet sich als erstes ein weiterer Interrupt beim Controller mit Priorität j < i und danach noch ein zweiter mit Priorität k wobei j < k < i. Ich nehme an, das IVN Register hat nur Platz für eine Nummer oder? Würde dann z.B. die Nummer des Interrupts j vom Controller auf den Stack gespeichert werden um k ins IVN zu überschreiben und nach Abarbeitung von der ISR Priorität i würde dann zuerst der Interrupt k und dann j ausgeführt?


Zu INTA:

In der Vorlesung wurde gesagt, dass INTA dazu da ist dem Controller zu signalisieren, dass der derzeitige Interrupt nun fertig bearbeitet wurde. Bedeutet dies, sagen wir wieder die CPU arbeitet gerade an einem Interrupt der Priorität i, stoppt dieses Vorgehen um an einem Interrupt der Priorität j > i zu arbeiten, nun also das die CPU so vorgeht: Arbeite interrupt j ab -> Sende INTA -> kehre zu i zurück und arbeite i ab -> sende INTA ?

Prof. Scholl hat einmal gesagt "wenn die CPU mit INTA meldet, dass der derzeitige Interrupt abgearbeitet wurde".
Auf den Folien steht aber, dass "INTA signalisiert, dass aktuell kein Interrupt abgearbeitet wird oder falls der aktuell bearbeitete Interrupt niedrigere Priorität hat als IRj." Ich dachte aber eigentlich das erstens, die Prioritäten vom Controller verwaltet werden und zweitens wenn INTA meldet ob gerade noch an einer ISR gearbeitet wird, warum wird dann in der Aufgabe 3 a) nach einer Methode gefragt wenn es sie schon gibt? Ich denke ich verstehe hier noch einiges falsch. Wird die Priorität des Interrupts der CPU irgendwie mitgeliefert? Es wäre nett wenn mir jemand den Knoten im Hirn auflösen könnte.

Mit freundlichen Grüßen,

Pascal



4 mal bearbeitet. Zuletzt am 28.11.2020 17:17 von PascalW.
Re: Interrupt Controller
30.11.2020 10:36:25
Hallo,

> 1. Das allgemeine Vorgehen ist ja dieses:
> Angenommen die CPU arbeitet gerade keine ISR ab
> und der aller erste Interrupt mit Priorität i
> meldet sich beim Controller. Dieser würde i in IVN
> schreiben, IVN auf den Datenbus legen und durch
> INT signalisieren, dass es einen Interrupt gibt,
> oder?

Ja, korrekt.

>
> 2. Wie sieht folgendes Szenario aus: Die CPU
> arbeitet gerade an einer ISR mit Priorität i und
> ein zweiter Interrupt mit Priorität j < i wird dem
> Controller gemeldet. Wir haben gesagt, da j < i,
> wird dieser Interrupt nicht der CPU gemeldet. Nun
> ist meine Frage: Wird der Interrupt trotzdem in
> IVN gespeichert und fungiert dieser als "pending
> Interrupt" Also nach INTA würde dann der
> Controller INT und den Interrupt der Priorität j
> weiterleiten?

Das ist schon schwieriger zu beantworten, weil in der Vorlesung nicht darauf
eingegangen wurde, wie genau der Interrrupt-Controller intern die Interrupts
verwaltet (deswegen die Aufgabe 3 auf dem aktuellen Übungsblatt). In dem Beispiel
könnte der Interrupt-Controller das schon so machen, wie Sie sagen, da er IR_i
schon weitergegeben hatte und jetzt nur noch IR_j aussteht.
Wie sie selbst merkten wird das im nächsten Fall schon deutlich schwerer zu sagen.

>
> 3. Wie sieht es dann in diesem Szenario aus: Die
> CPU arbeitet gerade an einer ISR mit priorität i.
> Nun meldet sich als erstes ein weiterer Interrupt
> beim Controller mit Priorität j < i und danach
> noch ein zweiter mit Priorität k wobei j < k < i.
> Ich nehme an, das IVN Register hat nur Platz für
> eine Nummer oder? Würde dann z.B. die Nummer des
> Interrupts j vom Controller auf den Stack
> gespeichert werden um k ins IVN zu überschreiben
> und nach Abarbeitung von der ISR Priorität i würde
> dann zuerst der Interrupt k und dann j ausgeführt?

Das IVN hat nur Platz für die Nummer eines Interrupts, ja.
Dafür braucht der Controller natürlich irgendwie eine eigene Logik
mit eigenen Bausteinen, um solche Fälle abarbeiten zu können (das ist ja
Teil des neuen Übungsblattes sich zu überlegen, wie der Controller diese
Fälle konkret regeln könnte.) In der Vorlesung sollte eher das Konzept eines
solchen Interrupt-Controller in Zusammenarbeit mit der CPU veranschaulicht werden,
ohne jetzt im Detail auf die konkrete Implementierung des Controllers einzugehen.

> Zu INTA:
>
> In der Vorlesung wurde gesagt, dass INTA dazu da
> ist dem Controller zu signalisieren, dass der
> derzeitige Interrupt nun fertig bearbeitet wurde.
> Bedeutet dies, sagen wir wieder die CPU arbeitet
> gerade an einem Interrupt der Priorität i, stoppt
> dieses Vorgehen um an einem Interrupt der
> Priorität j > i zu arbeiten, nun also das die CPU
> so vorgeht: Arbeite interrupt j ab -> Sende INTA
> -> kehre zu i zurück und arbeite i ab -> sende
> INTA ?

Ja, so würde das ablaufen. Die CPU signalisiert durch /INTA ,
dass die aktuell bearbeitete ISR fertig ist und setzt dann die
zuvor unterbrochene ISR fort.

>
> Prof. Scholl hat einmal gesagt "wenn die CPU mit
> INTA meldet, dass der derzeitige Interrupt
> abgearbeitet wurde".
> Auf den Folien steht aber, dass "INTA
> signalisiert, dass aktuell kein Interrupt
> abgearbeitet wird oder falls der aktuell
> bearbeitete Interrupt niedrigere Priorität hat als
> IRj." Ich dachte aber eigentlich das erstens, die
> Prioritäten vom Controller verwaltet werden und
> zweitens wenn INTA meldet ob gerade noch an einer
> ISR gearbeitet wird, warum wird dann in der
> Aufgabe 3 a) nach einer Methode gefragt wenn es
> sie schon gibt? Ich denke ich verstehe hier noch
> einiges falsch. Wird die Priorität des Interrupts
> der CPU irgendwie mitgeliefert? Es wäre nett wenn
> mir jemand den Knoten im Hirn auflösen könnte.

Da ist leider die Formulierung auf den Folien nicht sehr verständlich und auch
nicht komplett richtig. Prof. Scholl ist da ja in der Vorlesung schon darauf
eingegangen. Die ursprüngliche Formulierung auf den Folien stimmt glaube ich nur für den
Fall, dass man nie mehr als eine ISR auf der CPU gestartet hatte (dann wäre es nämlich auch
richtig, dass /INTA signalisiert, dass momentan kein Interrupt abgearbeitet wird)
Aber eigentlich signalisiert /INTA nur, dass gerade eine ISR beendet wurde (so wie es in der
Übung auch beschrieben ist) und diese Information allein reicht dem Controller eben nicht aus, um

1.) zu wissen, ob überhaupt noch eine ISR auf der CPU läuft (das wäre Teilaufgabe a) )
2.) wenn eine ISR läuft, welche Priorität diese hat (das wäre Teilaufgabe b) )

Diese Informationen braucht der Controller, um entscheiden zu können, ob er einen eingehenden
Interrupt j jetzt an die CPU weitergeben soll oder nicht.

Und das ist die eben die Aufgabe, sich zu überlegen, wie der Controller das intern bei sich managen könnte,
wenn er zur Kommunikation mit der CPU nur die Singale INT und /INTA verwenden kann (und natürlich IVN auf
den Datenbus legen kann). In der Aufgabe sind ja auch schon die Bausteine angegeben, die der Controller dafür
verwenden könnte.

Ich hoffe Ihnen ist die Aufgabe und generell der Controller jetzt etwas klarer.

Viele Grüße



1 mal bearbeitet. Zuletzt am 30.11.2020 10:39 von Alexander Konrad.
Re: Interrupt Controller
30.11.2020 12:29:55
Glasklar, vielen Dank für Ihre Zeit und Mühe!

Mit freundlichen Grüßen,

Pascal
Sorry, in diesem Forum dürfen nur registrierte Benutzer schreiben.

Hier klicken, um sich einzuloggen