Interrupt

Hallo,

ich versuche mir gerade klar zu machen, was der Unterschied zwischen einem Hardware- und einem Softwareinterrupt ist.
Um einen Hardwareinterrup handelt es sich doch dann, wenn das Interruptsignal dem Prozessor/Controller hardwaremäßig von außen zugeführt wird.
Also das Ablaufen eines Timer würde z.B einen Hardwareinterrupt auslösen, wenn man den Controller dementsprechend programmiert, denn ein Timer ist ja Päripherie und wenn er Abläuft, gibt er ein Signal aus.
Obwohl ich einige Zeilen Programmiertext zum Zulassen des Interrupts und zur Konfigurierung des Timers brauche, ist es trotzdem Hardwareinterrupt? Stimmt das?
Wenn ich meine Computermaus bewege, wird wahrscheinlich auch ein Hardwareintrrupt ausgelöst. Oder?
Wenn ich Alt+Strg+Entf drücke? Hardwareinterrupt?

Aber was gibt es denn für ein Beispiel für ein Softwareinterrupt?
Kann mir bitte jemand ein oder zwei Beispiele nennen?

danke
lignuslibri

ich versuche mir gerade klar zu machen, was der Unterschied
zwischen einem Hardware- und einem Softwareinterrupt ist.

http://en.wikipedia.org/wiki/Interrupt

Kurzform: SW-Interrupts sind synchron und werden von irgendeinem Programm ausgelöst. Hardwareinterrupts sind asynchron und werden zu einem unvorhersehbaren Zeitpunkt von Hardware ausgelöst.

Hallo

http://en.wikipedia.org/wiki/Interrupt

das habe ich mir schon durchgelesen, aber mir fehlt ein Beispiel für SW-Interrupt um mir das ganze plausibel zu machen.

Kurzform: SW-Interrupts sind synchron und werden von
irgendeinem Programm ausgelöst. Hardwareinterrupts sind
asynchron und werden zu einem unvorhersehbaren Zeitpunkt von
Hardware ausgelöst.

hmm. jetz weiß ich leider nichts mit dem Begriff synchron anzufangen.
Kannst du bitte ein konkretes Beispiel für SW-Interrupt nennen, denn mir fällt irgendwie keiner ein.

hmm. jetz weiß ich leider nichts mit dem Begriff synchron
anzufangen.

„Synchron“ bedeutet, dass der Aufruf zu einem vorhersehbaren Zeitpunkt in einem laufenden Programm erfolgt. Im Gegensatz dazu kann ein asynchroner Interrupt zu jeder Zeit auftreten, da diese ja von „außerhalb“ kommen.

Als Beispiel für synchrone Aufrufe im Wikipedia-Artikel Syscalls (Systemaufrufe) aufgeführt. Das sind Kommandos von einem Benutzerprogramm, die diverse Arbeiten auf Systemebene durchführen, zB Daten in eine Datei schreiben. Dazu übergibt das Programm die Adresse und die menge der Daten an das Betriebssystem, das dann die eigentliche Schreibarbeit erledigt. Wenn die gemacht ist, gibt das System die Kontrolle wieder zurück an das Benutzerprogramm. In gewisser Weise verhält sich der Aufruf wie jeder andere Funktionsaufruf auch.

Im Gegensatz dazu hast du ja schon Timer-Interrupts erwähnt. Die werden je nach Art des Timers mehr oder weniger regelmäßig von einer Art Uhr ausgelöst, die weitgehend vom restlichen System unabhängig ist. Mit jedem Interrupt wird ein vom System festgelegter Handler aufgerufen, der dann diverse Arbeiten übernimmt, wie zB Scheduling oder wartende Programme wecken.

achsoo

jetzt ist es klar.

danke für die Hilfe

hmm. jetz weiß ich leider nichts mit dem Begriff synchron
anzufangen.

„Synchron“ bedeutet, dass der Aufruf zu einem vorhersehbaren
Zeitpunkt in einem laufenden Programm erfolgt. Im Gegensatz
dazu kann ein asynchroner Interrupt zu jeder Zeit auftreten,
da diese ja von „außerhalb“ kommen.

Hallo,

für den Ausführenden, nämlich das Betriebssystem, sind die Software-Interrupts nicht synchroner als die HW-IRQs. Wann ein Programm von vielen in einem Multitaskingsystem einen Syscall auslöst, ist für das System absolut unvorhersehbar.

Ich würde es sogar völlig entgegengesetzt zu dir formulieren: Software-Interrupts sind eigentlich Unterprogramm-Aufrufe, die aber so asynchron sind wie HW-Interrupts.

Kleiner Tipp: warum wohl hat man sie SW-INTERRUPTs genannt?

Gruss Reinhard

Hallo lignuslibri,

  1. Ein Interrupt ist eine Unterbrechung des gerade laufenden Programms.
    Dazu muss der Prozessor seinen Zustand sichern, damit er später an der Stelle des Unterbruchs im unterbrochenen Programm weiter arbeiten kann.
    Im minimum sind das der Programmzähler (PC) und Teile des Statusregisters. Manche CPUs sichern auch mehr, andere überlassen das dem Programmierer. So ein Interrupt kann auch einen ganzen Kontextswitch auslösen. Danach holt sich die CPU die Adresse des Interrupt-Programms von einer bestimmten Stelle (Interrupt-Vector) und fängt an das entsprechende Programm abzuarbeiten.

Das ganze kann nun, wie von dir beschrieben irgendwo von der Peripherie ausgelöst werden.

  1. Dann gibt es noch unterschiedliche Interrupts, welche durch Teile der CPU oder durch spezielle Befehle in der Software ausgelöst werden.
    Da sind z.B. ungültige Befehle, Division durch Null, Breakpoints usw. Zudem kennen manche CPUs auch Befehle mit denen man die selben Vektoren aufrufen kann, die auch durch externe Interrupts ausgelöst werden. Dabei verhält sich die CPU wie wenn der Interrupt durch die Hardware ausgelöst worden wäre.

  2. Dann gibt es noch unterschiedliche Interrupts, welche durch Teile der CPU selbst ausgelöst werden. Da sind z.B. ungültige Befehle, Division durch Null, usw.

  3. Und schliesslich noch diejenigen welche durch spezielle Befehle in der Software ausgelöst werden.
    Wie z.B. Breakpoints. Zudem kennen manche CPUs auch Befehle mit denen man die selben Vektoren aufrufen kann, die auch durch externe Interrupts ausgelöst werden. Dabei verhält sich die CPU wie wenn der Interrupt durch die Hardware ausgelöst worden wäre.

Software Interrupts sind diejenigen welche unter 3. beschrieben wurden. Zudem sind diese auch synchron zum Programmablauf.

Alle anderen treten zu unterschiedlichen Zeitpunkten auf, sind also asynchron zu den Befehlen. Bei heutigen CPUs arbeiteten ja Arithmetic-Unit und Befehlsdecoder relativ unabhängig voneinander, sodass auch eine Division durch Null nicht immer im selben Takt ausgelöst werden.

MfG Peter(TOO)

Hallo zusammen,

es gibt noch einen anderen Grund für Software-Interrupts. Ein gutes Beispiel ist das alte DOS. Die verschiedenen Versionen waren unterschiedlich lang. Wenn man also z.B. die Funktion „Datei öffnen“ aufrufen möchte, geht das nicht über eine feste Adresse (wie beim Aufruf eines Unterprogramms).

Interrupts machen´s möglich. Wenn DOS geladen wird, „weiß“ es wo eine bestimmte Funktion innerhalb des OS liegt. Diese Adresse trägt es in eine Interrupttabelle ein. Wenn Dein Programm jetzt z.B. den Interrupt 21H (der Lieblingsinterrupt aller DOS-Programmierer) aufruft, zusammen mit einer Funktionsnummer (wird beides in Registern übergeben), dann schaut DOS einfach in der Tabelle nach, ermittelt so die Adresse der anzuspringenden Funktion, et voilà.

Grüße,

Tim

Hallo,

Auch hallo nach längerer Zeit…

für den Ausführenden, nämlich das Betriebssystem, sind die
Software-Interrupts nicht synchroner als die HW-IRQs. Wann ein
Programm von vielen in einem Multitaskingsystem einen Syscall
auslöst, ist für das System absolut unvorhersehbar.

Das stimmt schon, aber mit der selben Logik könnte man so gut wie alles als asynchron umdefinieren. Heute sieht es in den meisten Fällen ja so aus, dass Systemaufrufe kaum mehr direkt an irgendwelche Hardware gehen, sondern es wird meistens nur noch nach mehr oder weniger Vorarbeit im Kernelspace zB ein DMA-Transfer angestoßen. In der anderen Richtung kann der Scheduler einem Programm jederzeit die CPU wegnehmen. Wirklich synchron läuft kaum mehr etwas, und selbst an asynchronen Prozessoren wird immer wieder gearbeitet.

Irgendwo ist die Grenze nicht wirklich fest, sondern kann ein Bisschen frei Schnauze gezogen werden. Meine Ansicht ist, dass ein durch ein auf einer lokalen CPU ausgeführtes Programm ausgelöstes Ereignis (für dieses Programm) synchron ist. Für alle anderen Programme ist es natürlich asynchron, aber meistens isoliert das System diese ja voneinander. (Es kann sicherlich Wechselwirkungen geben, aber das würde jetzt zu weit gehen…)

Ich würde es sogar völlig entgegengesetzt zu dir formulieren:
Software-Interrupts sind eigentlich Unterprogramm-Aufrufe, die
aber so asynchron sind wie HW-Interrupts.

Kleiner Tipp: warum wohl hat man sie SW-INTERRUPTs genannt?

Weil man den Mechanismus irgendwie nennen musste? :wink:

Die Bezeichnung „Syscall“ erscheint mir allerdings zumindest in der heutigen Situation korrekter, es ist ja wirklich „nur“ noch eine Technik, um privilegierte Aktionen vom Kernel ausführen zu lassen.

Hallo Tim,

das ist schon richtig, auch die Beschreibung von DOS, aber dafür hätte es jede einfache Adresstabelle auch getan. Ein mögliches Argument wäre, dass ein SW-Interrupt-Befehl kürzer ist als Call oder Jump. Damals wurde der PC mit 64 oder 128k RAM ausgeliefert.

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]