1 3.5 Unterbrechungsbehandlung (interrupt handling) hat folgende Aufgaben: Zustandsdaten des...

25
1 3.5 Unterbrechungsbehandlung (interrupt handling) at 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.
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    214
  • download

    0

Transcript of 1 3.5 Unterbrechungsbehandlung (interrupt handling) hat folgende Aufgaben: Zustandsdaten des...

1

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.

2

Die Behandlung ist somit zweistufig:

primäre Unterbrechungsbehandlung

(first-level interrupt handling)

sekundäre Unterbrechungsbehandlung

(second-level interrupt handling)

3

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-Beteiligungund Prozesswechsel(z.B. Alarm Seitenfehler, Systemaufruf read)

4

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 Eingabewartenden Prozess aktivierenund Eingabegerät erneut starten)

E3 lange Systemaktivität mit Prozesswechsel und Beteiligung von blockierendem Systemprozess

(z.B. nach beendeter Auslagerung einer SeiteEinlagerung einer anderen Seite startenund auf deren Beendigung warten)

5

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

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

6

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

ist Code im Betriebssystem, der für Ansteuerungund sekundäre Unterbrechungsbehandlung einesoder 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

7

3 Alternativenfü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)

* genauer: BS-Teil eines Keller-Paars (user stack, kernel stack)

(System-)Prozess: Behandlung in separatem Prozess

(sehr flexibel, darf auch blockieren, aber

ungeeignet für harte Echtzeit-Anforderungen)

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

9

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

10

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ückbar14 page fault...32-255 external interrupts ] Eingriffe, unterdrückbar

11

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).

12

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, wennup > pp

In der Regel wird dann pp auf up gesetzt.

13

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) !

14

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

* vorzugsweise in speziellen Systemkeller, in diesem Fall mit Umsetzen des Kellerzeigers und Kellern des alten Kellerzeigers

„Unerwarteter (impliziter) Prozeduraufruf“

Unterprogrammsprung JSR, CALL o.ä. + Austausch des Prozessorstatusworts

15

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.

16

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

17

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!)

18

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.

sekundäre Behandlung:

19

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

20

... so realisiert in MINIX: clock task

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.

21

22

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.

23

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

24

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

25

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)