Frage zu Interrupts unter Unix/Linux



  • Wie sieht die Reihenfolge bei der Behandlung von Interrupts unter Linux aus? Ich habe folgendes Grundgerüst:

    Hardwareseitig:
    1.) die CPU unterbricht die Ausführung des aktuellen Prozesses
    2.) die CPU sichert die aktuellen Statusregister und den IP auf den Stack
    3.) die CPU besorgt sich den IP für die Interruptbehandlunsgroutine
    
    Softwareseitig:
    4.) Int-Routine sichert alle Register auf den Stack, um die enthalten Werte des unterbrochenen Prozesses nicht zu überschreiben.
    5.) Int-Routine arbeitet den aufgetretenen Interrupt ab
    6.) Int-Routine wählt den nächsten Prozess zum abarbeiten aus(Scheduling)
    7.) Int-Routine setzt alle Register für diesen Prozess, damit die CPU diesen abarbeiten kann(unter anderen auch den IP damit die CPU dann lolegen kann)
    8.) Int-Routine beendet sich
    
    Hardwareseitig:
    9.) CPU beginnt mit der abrbeitung des ausgewählten Prozesses
    

    Ich hoffe ihr könnt mir hierbei helfen. Welche Schritte sind überflüssig, welche habe ich vergessen? Führt die CPU vor 9. noch andere Schritte aus(holt Register vom Stack)? Ist sonst alles soweit korrekt?

    Vielen Dank im voraus! 🙂



  • Ich glaube nicht, dass nach jedem Interrupt eine Scheduling-Entscheidung getroffen wird. Wenn die Interrupt-Routine ganz normal mit iret zurückkehrt, läuft das unterbrochene Programm weiter, als wäre nichts gewesen.

    Das Wiederherstellen von Registern eines anderen Tasks macht eigentlich auch die CPU, über Task Descriptors (bei x86 heißt das zumindest so).

    Außerdem muss die Interrupt-Routine dem Interrupt-Controller meistens auch noch mitteilen, dass sie fertig ist.


Anmelden zum Antworten