View
214
Download
0
Embed Size (px)
Citation preview
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.
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