Docstoc

2.2 Virtueller Adressraum

Document Sample
2.2 Virtueller Adressraum Powered By Docstoc
					      3.5 Unterbrechungsbehandlung
                 (interrupt handling)

hat folgende Aufgaben:

 Zustandsdaten des unterbrochenen Prozesses retten
  und neuen Kontext für die Behandlung aufsetzen,

    unterbrechungsspezifische Behandlung veranlassen,
     dabei eventuell Prozessumschaltung vornehmen,

 Zustandsdaten des unterbrochenen Prozesses
  – oder eines anderen – wiederherstellen und
  diesen Prozess fortsetzen.
                                                   1
Die Behandlung ist somit zweistufig:


   primäre Unterbrechungsbehandlung
    (first-level interrupt handling)


   sekundäre Unterbrechungsbehandlung
    (second-level interrupt handling)




                                         2
Weitere Kategorisierung von Behandlungen:

Alarme (traps):

      A1 kurze Systemroutine
            (z.B. benutzereigene Behandlung veranlassen,
            Systemaufruf time, ...)

      A2 kurze Systemroutine mit evtl. Prozesswechsel
            (z.B. Systemaufruf wait)

      A3 längere Systemaktivität mit E/A-Beteiligung
            und Prozesswechsel
            (z.B. Alarm Seitenfehler, Systemaufruf read)

                                                        3
Eingriffe (interrupts) durch Peripherie:

       E1 kurze Systemroutine
             (z.B. Laufzeit aktualisieren
             nach Zeitgeberunterbechung)

      E2 längere Systemaktivität mit evtl. Prozesswechsel
            (z.B. nach Beendigung von Eingabe
            wartenden Prozess aktivieren
            und Eingabegerät erneut starten)

      E3 lange Systemaktivität mit Prozesswechsel und
         Beteiligung von blockierendem Systemprozess
            (z.B. nach beendeter Auslagerung einer Seite
            Einlagerung einer anderen Seite starten
                                                      4
            und auf deren Beendigung warten)
Treiber, Gerätetreiber (device driver) (4)

      ist Code im Betriebssystem, der für Ansteuerung
      und sekundäre Unterbrechungsbehandlung eines
      oder mehrerer Peripheriegeräte zuständig ist
      (siehe oben E1, E2; bei E3 ist ein weiterer System-
      prozess beteiligt, der wiederum einen Treiber benutzt)




                                                         5
Treiber, Gerätetreiber (device driver) (4)

      ist Code im Betriebssystem, der für Ansteuerung
      und sekundäre Unterbrechungsbehandlung eines
      oder mehrerer Peripheriegeräte zuständig ist
      (siehe oben E1, E2; bei E3 ist ein weiterer System-
      prozess beteiligt, der wiederum einen Treiber benutzt)

 Untere Schichten des Betriebssystems detaillierter:

                       Dateiverwaltung
                      Speicherverwaltung
      Treiber 1     Treiber 2    Treiber 3    .........
    Prozessverwaltung u. prim. Unterbrechungsbehandlung
                                                         6
3 Alternativen
für die Aktivierung der sekundären Behandlung:

 Prozedur: benutzt Keller des unterbrochenen Prozesses*
            (geeignet für Behandlung von Systemaufrufen)
            (so verwendet in 3.2.1)

 Koroutine: benutzt eigenen Keller
            (geeignet auch für Behandlung von Eingriffen,
             sofern dabei kein Blockieren erforderlich ist)

 (System-)Prozess: Behandlung in separatem Prozess
            (sehr flexibel, darf auch blockieren, aber
             ungeeignet für harte Echtzeit-Anforderungen)

* genauer: BS-Teil eines Keller-Paars (user stack, kernel stack)   7
Beispiel für  : MINIX

    auftragsbasiertes System („client/server lokal“),
    Treiber-Prozesse („tasks“), allerdings in gleichem
            Adressraum wie die Prozessverwaltung,
    weitere Systemprozesse in eigenen Adressräumen




                                                          8
 Beispiel für  : MINIX

     auftragsbasiertes System („client/server lokal“),
     Treiber-Prozesse („tasks“), allerdings in gleichem
             Adressraum wie die Prozessverwaltung,
     weitere Systemprozesse in eigenen Adressräumen


Benutzerprozesse Init        user1   user2    user3   .......

Server-Prozesse      memory          file             network   .....
                     manager         system           server
Treiber-Prozesse     disk    tty     clock    system ethernet   .....
                     task    task    task     task   task
Prozessverwaltung interrupts, processes, inter-process communication
                                                                  9
            3.5.1 Unterbrechungssystem

Zur Erinnerung:

 Unterbrechungsarten sind hardwaremäßig durchnumeriert,
  z.B. beim Intel Pentium:

      0     divide error
      ...
      6     invalid opcode           Alarme, nicht
      ...                                    unterdrückbar
      14    page fault
      ...
      32-255 external interrupts   ] Eingriffe, unterdrückbar
                                                      10
 Jeder Unterbrechungsart ist hardwaremäßig
  am Anfang des Speichers eine

   Unterbrechungsadresse (interrupt location)

   zugeordnet mit Inhalt  neuer Befehlszähler (PC, IP)
                          neues Prozessorstatuswort (PSW)
                                mit Prozessormodus,
                                    Prozessorpriorität,
                                    Adressraumangabe,...

   der vom Betriebssystem beim Hochfahren geeignet
   eingerichtet wird. Alle diese Zellen bilden den

   Unterbrechungsvektor (interrupt vector).
                                                     11
 Unterbrechungs-Prioritäten:

     Jeder Unterbrechungsart ist eine Priorität up
     zugeordnet, d.i. die Dringlichkeit der Behandlung,
           z.B. mit abfallender Dringlichkeit:
           Zeitgeber, Festplatten, Netz, ..., Tastatur


     Prozessor-Priorität pp

     im Prozessorstatuswort kann entsprechende Werte
     annehmen; der Prozessor kann nur dann unterbrochen
     werden, wenn
                        up > pp

     In der Regel wird dann pp auf up gesetzt.
                                                          12
 Unterbrechungs-Unterdrückung (interrupt disabling):
  Unterbrechungssignal führt nicht zu einer Unterbrechung.
    Steuerung über Prozessorstatus – verschiedene Varianten:

    Prozessor-Priorität

    spezielles Bit für totale Unterdrückung

    Bits für verschiedene Unterbrechungsarten (statt Priorität)


    Unterdrückte Unterbrechungssignale gehen nicht verloren
    (anstehende Unterbrechung, pending interrupt) !

                                                         13
  Unterbrechung: wenn Unterbrechungssignal eintrifft
   und nicht unterdrückt wird, wird Unterbrechung ausgelöst:

          Prozessorstatuswort wird gekellert*,
          Befehlszähler wird gekellert*,
          neues Prozessorstatuswort
             wird aus Unterbrechungsvektor geladen
             (impliziert u.U. Adressraumwechsel),
          neuer Befehlszähler
             wird aus Unterbrechungsvektor geladen

                      „Unerwarteter (impliziter) Prozeduraufruf“
                       Unterprogrammsprung JSR, CALL o.ä.
                         + Austausch des Prozessorstatusworts
* vorzugsweise in speziellen Systemkeller, in diesem Fall mit
                                                                   14
  Umsetzen des Kellerzeigers und Kellern des alten Kellerzeigers
 Rücksprung zur Unterbrechungsstelle
  – nach evtl. Prozesswechsel: eines anderen Prozesses! –
  explizit mit Befehl RTI, IRET o.ä.:

       Befehlszähler wird ausgekellert;
       Prozessorstatuswort wird ausgekellert,

   dies bewirkt einen Rücksprung nach vorheriger
   Wiederherstellung des früheren Prozessorstatus.


Merke: Das Retten und Wiederherstellen des Prozessorstatus
       wäre für Systemaufrufe eventuell entbehrlich,
       ist aber für alle anderen Unterbrechungen unverzichtbar,
       da diese unvorhergesehen auftreten.
                                                        15
  3.5.2 Einfache Unterbrechungsbehandlung

am Beispiel Zeitgeber, mit vereinfachender Voraussetzung:
                       wird nur für Zeitscheibenverfahren und
                       Messung der Laufzeiten eingesetzt

Charakteristika:

   • Priorität ist hoch
   • Behandlung ist kurz
   • Behandlung beinhaltet keine Sonderfälle

 rechtfertigt koroutinenartige Behandlung
  bei vollständiger Unterbrechungs-Unterdrückung       16
Belegung der Unterbrechungsadresse:

      Prozessorstatus:    totale Unterbrechungsunterdrückung
      Befehlszähler:      verweist auf primäre Behandlung :

 1. PSW/PC aus Keller in aktuellen Prozessdeskriptor retten;
  2. Register retten in aktuellen Prozessdeskriptor;
  3. provisorischen Keller einrichten für
        sekundäre Behandlung
         - dabei evtl. neuen aktuellen Prozess bestimmen;

 4. auf Keller des aktuellen Prozesses umschalten;
  5. PC/PSW des aktuellen Prozesses kellern;
  6. Register aus Deskriptor des aktuellen Prozesses laden;
  7. Befehl IRET/RTI.
                                 (GELB ist Assembler!)   17
 sekundäre Behandlung:

   public static void timeSliceEnd() {
          readyList.enter(current);
          dispatch(timeSlice);
          SETTIMER(timeSlice);
   }

    - genau wie in 3.2.1 , aber mit anderem dispatch,
    das nicht mehr für das Umschalten des Prozessors
    verantwortlich ist: switch entfällt !

    Rückblick zeigt: 3.2.1 war eine rein prozedurale Lösung.

                                                     18
Alternative:   sekundäre Behandlung durch Systemprozess –
               allerdings im gleichen Adressraum
               (Erreichbarkeit der Prozessverwaltung!)

Unüblich,      aber gerechtfertigt, wenn Zeitverwaltung mehr
               Aufgaben umfasst (was üblich ist!)



    Abstrakte Sicht:

    Unterbrechung wird umgewandelt in Auftragsnachricht

                                                          19
Mit provisorischem Keller 3. wird jetzt

       Auftragsnachricht an Zeitgeber-Treiber versendet.

 Treiber wird damit aufgeweckt und wird
  – wegen höchster Priorität – zum aktuellen Prozess,
  womit die primäre Behandlung 4.... beendet ist;

 Treiber rearrangiert die Bereitliste und blockiert in der
  Empfangsoperation für den nächsten Auftrag;

 dies geschieht mit erneuter Unterbrechung
  (über SVC/TRAP) in der Prozessverwaltung ( 2.0.4 ),
  die daraufhin den nächsten Prozess aktiviert.

... so realisiert in MINIX: clock task
                                                          20
21
3.5.3 Behandlung von Geräteunterbrechungen

könnte prinzipiell ebenfalls mit vollständiger Unterbrechungs-
unterdrückung erfolgen – besser aber ist:

   sekundäre Unterbrechungsbehandlung kann zugunsten
   höher priorisierter Unterbrechung unterbrochen werden.

Falls Behandlung in separatem Treiber-Prozess
      mit jeweils passender Prozessor- und Prozess-Priorität,

sonst Behandlung mit einem oder mehreren Systemkellern,
      unabhängig von den Kellern der Prozesse,
      mit jeweils passender Prozessor-Priorität.
                                                         22
Beachte dabei: wenn Treiber Daten der Prozessverwaltung
   manipuliert, zwecks Sperrung alle Unterbrechungen
   unterdrücken! Das erfordert erweiterte Funktionalität von

   DISABLE_INTERRUPTS: rettet aktuelle Prozessorpriorität

   ENABLE_INTERRUPTS: stellt diese Priorität wieder her




                                                         23
Belegung der Unterbrechungsadresse:

   Prozessorstatus: Prozessor-Priorität = Unterbrechungs-Prior.
   Befehlszähler: verweist auf primäre Behandlung :

 1., 2., 3. wie in 3.5.2
  3a. Unterbrechungen zulassen (gemäß Prozessor-Priorität);

      sekundäre Behandlung
       – unterbrechbar gemäß Prozessor-Priorität –
       dabei evtl. neuen aktuellen Prozess bestimmen;
 3b. Unterbrechungen unterdrücken;
  4.,5.,6.,7. wie in 3.5.2

3a.,b. entbehrlich, falls  Auftragserteilung an Treiber-Prozess
                                                            24
       3.5.4 Behandlung von Alarmen


 prozedurale Aktivierung genügt

 über weite Strecken beliebig unterbrechbar
    (niedrigste Prozessor-Pr.)

 kurzfristige Unterbrechungsunterdrückung
    für das Sperren gemeinsamer Daten:

            - zentrale Daten (z.B. Prozessverwaltung)
            - Treiber-Daten (bei E/A-Systemaufruf)

                                                    25

				
DOCUMENT INFO