wozu braucht man eigentlich software interrupts?

#646212
Lesenswert?

Softwareinterrupts sind wie stinknormale Funktionsaufrufe, braucht man 
also auf MCs überhaupt nicht.

Sie sind nur auf CPUs mit Betriebssystem und verschiedenen 
Ausführungsleveln sinnvoll, um API-Funktionen aufzurufen.
Der einzige Unterschied zu normalen Funktionsaufrufen ist dann der, daß 
sie wie Interrupts mit höheren Zugriffsrechten laufen. Daher heißen sie 
fälschlicher Weise Interrupts.

Es sind aber keine Interrupts, die das Hauptprogramm zufällig 
unterbrechen können, sondern Unterfunktionen, die eben nur an den 
Stellen ausgeführt werden, an denen sie explizit aufgerufen werden.

Es können also wie bei Funktionen Parameter übergeben werden und es sind 
keine gekapselten Zugriffe auf gemeinsame Variablen notwendig.


Peter
Gast #646220
Lesenswert?

Softwareinterrupts werden bei CPUs z.B. verwendet, um 
Betriebssystemfunktionen aufzurufen. Natürlich könnte man das auch über 
Unterfunktionsaufrufe lösen, aber je nach Architektur nimmt einem die 
Hardware bei einem Softwareinterrupt manche Verwaltungstätigkeiten 
(Kontext sichern, in einen höher privegierten Betriebsmodus 
umschalten...) ab, die man für einen Betriebssystemaufruf erledigt haben 
möchte.

Bei einem kleinen uC ohne Betriebssystem halte ich Softwareinterrupts 
hingegen nicht für notwendig, auch wenn es auch dort Architekturen gibt, 
die sowas implementieren.
Gast #646221
Lesenswert?

ne, ganz so einfach ist das nicht. Allerdings findet man auf den ganz 
einfachen MCs tatsächlich keine.
Könnte z.B. sein:
-unbekannter instruction-code
-Division durch 0
-fehlerhafte FP-Operation(NaN, +INF, -INF)
-diverse "verbotene" Speicherzugriffe (z.B. stack under/overflow)
Gibt noch ein paar andere sinnvolle Möglichkeiten
#646223
Lesenswert?

Software-Interrupts werden zur Vermeidung dieser Verwirrung manchmal 
auch Software-Traps genannt. Durchgeführt werden sie von speziellen 
Befehlen und es wird zunächst ein Trap-Handler aufgerufen, der abhängig 
von weiterem Inhalt des Trap-Befehls oder eines Registers weiter 
verzweigen kann. Darin wird meist die Nummer einer Funktion angegeben, 
nicht deren Adresse.

In Betriebssystemen werden solche Traps für den Aufrufe der 
Betriebssystemfunktionen verwendet, weil das aufrufende Programm im 
Anwendermodus arbeitet, die Betriebssystemfunktionen jedoch im 
privilegierten Modus.

Ohne Betriebssystem findet man das manchmal auf ARMs. Sofern nämlich das 
Hauptprogramm im nichtprivilegierten Modus läuft. Dann müssen Traps für 
einzelne privilegierte Funktionen implementiert sein, wie 
Ein/Ausschalten von Interrupts. Geschmacksfrage, manche schwören drauf, 
ich halte das in einer betriebssystemfreien Umgebung für sinnlos.
#646226
Lesenswert?

> -unbekannter instruction-code
> -Division durch 0
> -fehlerhafte FP-Operation(NaN, +INF, -INF)
> -diverse "verbotene" Speicherzugriffe (z.B. stack under/overflow)
> Gibt noch ein paar andere sinnvolle Möglichkeiten

Das sind keine Software-Interrupts/Traps sondern Hardware-Traps. Zum 
Software-Interrupt/Trap wird es durch Vorsatz und dafür vorgesehene 
Befehle.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren