Upload
liesel-strang
View
105
Download
0
Embed Size (px)
Citation preview
CPUProzess X
Pro
g
Statu
swo
rt
Pro
g Z
ähler
Stackp
oin
ter
Stack Prozess X
Prozesstabelle
Prozess A rechenbereit
Prozess X rechnend
Platte
Prozessverwaltung
Scheduler
ProzesswechselTerminaltreibers
Unterbrechungsvektoren der I/O Geräteklassen
Platte
Terminal
Unterbrechungsroutine des Plattentreibers
Vorgeschichte: Der Prozess X befindet sich in der CPU in Ausführung.Er stellt eine Lese-Anfrage an die Platte
Der rechnende Prozess X gibt einen Leseauftrag an die Platte (Harddisk) auf. Damit der Prozessor während der Wartezeitnicht unnötig belegt wird, blockiert sich der Prozess selbst und veranlasst einen Prozesswechsel. Ein Prozesswechsel kommt zBsp dadurch zu Stande, dass der Prozess X selbst eine Software-Unterbrechung auslöst.Software-Unterbrechung werden dabei genau gleich behandelt wie I/O-Unterbrechungen – das Thema der folgenden Seiten
lesenblockieren
Eine Weile später ist die Platte fertig mit Lesen und löst eine I/O-Unterbrechung aus...
CPUProzess A
Pro
g S
tatusw
ort
Pro
g Z
ähler
Stackp
oin
ter
Stack Prozess A
Prozesstabelle
Prozess A rechnend
Prozess X blockiertUnterbrechungshardware
Platte
Prozessverwaltung
Scheduler
ProzesswechselTerminaltreibers
Unterbrechungsvektoren der I/O Geräteklassen
Platte
Terminal
Unterbrechungsroutine des Plattentreibers
Ausgangslage: Der Prozess A befindet sich in der CPU in Ausführung.Eine Platte löst eine Unterbrechung aus
CPUProzess A
Pro
g
Statu
swo
rt
Pro
g Z
ähler
Stackp
oin
ter
Stack Prozess A
Prog Stauswort
Prog Zähler
Terminaltreibers
Unterbrechungsvektoren der I/O Geräteklassen
Platte
Terminal
Unterbrechungsroutine des Plattentreibers
Prozesstabelle
Prozess A rechnend
Prozess X blockiert
Programmzähler und Programmstatuswort des rechnenden Prozesses werden durch die Unterbrechungshardware auf dem Stack gesichert
Prozessverwaltung
Scheduler
Prozesswechsel
Unterbrechungshardware
1) Unterbrechungshardware sichert rechnenden Prozess
CPUUnterbrechungPlattentreiber
Pro
g
Statu
swo
rt
Pro
g Z
ähler
Stackp
oin
ter
Stack Prozess A
Prozesstabelle
Prozess A rechnend
Prozess X blockiert
Terminaltreibers
Unterbrechungsvektoren der I/O Geräteklassen
Platte
Terminal
Unterbrechungsroutine des Plattentreibers
Unterbrechungshardware
Unterbrechungshardware lädt den neuen Programmzähler und das Programmstatuswort aus dem Unterbrechungsvektor des I/O-Gerätes in die entsprechenden Register des Prozessors
Prozessverwaltung
Scheduler
Prozesswechsel
2) Unterbrechungshardware lädt Unterbrechungsroutine der I/O Geräte-Klasse
CPUUnterbrechungPlattentreiber
Pro
g
Statu
swo
rt
Pro
g Z
ähler
Stackp
oin
ter
Stack Prozess A
Prozesstabelle
Prozess A rechnend
Prozess X blockiert
Die nun aktive Unterbrechungsroutine ist eine Assembler-Routine, die alle Register des ursprünglichen Prozesses in seinem Prozesstabelleneintrag sichert
Prozessverwaltung
Scheduler
ProzesswechselTerminaltreibers
Unterbrechungsvektoren der I/O Geräteklassen
Platte
Terminal
Unterbrechungsroutine des Plattentreibers
3a) Unterbrechungsroutine sichert restliche Register des ursprünglichen Prozesses
CPUUnterbrechungPlattentreiber
Pro
g
Statu
swo
rt
Pro
g Z
ähler
Stackp
oin
ter
Stack
Prozesstabelle
Prozess A rechenbereit
Prozess X blockiert
Dabei wird der ursprüngliche Programmzähler und das Programmstatuswort aus dem Stack gelesen und entfernt (pop)
Prozessverwaltung
Scheduler
ProzesswechselTerminaltreibers
Unterbrechungsvektoren der I/O Geräteklassen
Platte
Terminal
Unterbrechungsroutine des Plattentreibers
3b) Unterbrechungsroutine sichert Programmstatuswort, Programmzähler und Stackpointer des ursprünglichen Prozesses
CPUUnterbrechungPlattentreiber
Pro
g
Statu
swo
rt
Pro
g Z
ähler
Stackp
oin
ter
Stack Prozess Verwaltung
Prozesstabelle
Prozess A rechenbereit
Prozess X blockiert
Die Unterbrechungsroutine belegt das Stack-Register des Prozessors mit dem Stackpointer der Prozessverwaltung
Prozessverwaltung
Scheduler
ProzesswechselTerminaltreibers
Unterbrechungsvektoren der I/O Geräteklassen
Platte
Terminal
Unterbrechungsroutine des Plattentreibers
4) Unterbrechungsroutine lädt den Stackpointer der Prozessverwaltung
CPUUnterbrechungPlattentreiber
Pro
g
Statu
swo
rt
Pro
g Z
ähler
Stackp
oin
ter
Stack Prozess Verwaltung
Prozesstabelle
Prozess A rechenbereit
Prozess X rechenbereit
Die Unterbrechungsroutine ruft eine C-Prozedur auf, diese bestimmt den blockierten Prozess, der durch die Unterbrechung geweckt werden soll und versetzt ihn in den Zustand rechenbereit
C-Routine bestimmt blockierten Prozess
calls
rechenbereit
Prozessverwaltung
Scheduler
ProzesswechselTerminaltreibers
Unterbrechungsvektoren der I/O Geräteklassen
Platte
Terminal
Unterbrechungsroutine des Plattentreibers
5) Unterbrechungsroutine ruft eine C-Routine auf
CPUUnterbrechungPlattentreiber
Pro
g
Statu
swo
rt
Pro
g Z
ähler
Stackp
oin
ter
Stack Prozess Verwaltung
Prozesstabelle
Prozess A rechenbereit
Prozess X rechenbereit
C-Routine bestimmt blockierten Prozess
calls
Prozessverwaltung
Scheduler
Prozesswechsel
calls
Den nächsten rechnendenProzess bestimmen:Prozess X
Der Prozess-Scheduler wird von der C-Prozedur aufgerufen und bestimmt den nächsten Prozess, der in den Zustand rechnend versetzt werden soll
Terminaltreibers
Unterbrechungsvektoren der I/O Geräteklassen
Platte
Terminal
Unterbrechungsroutine des Plattentreibers
6) Der Prozess-Scheduler wird aufgerufen
CPUUnterbrechungPlattentreiber
Pro
g
Statu
swo
rt
Pro
g Z
ähler
Stackp
oin
ter
Stack Prozess Verwaltung
Prozesstabelle
Prozess A rechenbereit
Prozess X rechenbereit
C-Routine bestimmt blockierten Prozess
Prozessverwaltung
Scheduler
Prozesswechsel
Return „Prozess X“
Return „Prozess X“
Die Unterbrechungsroutine erhält die Kontrolle der C-Prozedur zurück
Terminaltreibers
Unterbrechungsvektoren der I/O Geräteklassen
Platte
Terminal
Unterbrechungsroutine des Plattentreibers
7) Die Kontrolle geht wieder zurück zur Unterbrechungsroutine
CPUUnterbrechungPlattentreiber
Pro
g
Statu
swo
rt
Pro
g Z
ähler
Stackp
oin
ter
Stack Prozess Verwaltung
Prozesstabelle
Prozess A rechenbereit
Prozess X rechenbereit
Prozessverwaltung
Scheduler
Prozesswechsel
calls „Prozess X“Terminaltreibers
Unterbrechungsvektoren der I/O Geräteklassen
Platte
Terminal
Unterbrechungsroutine des Plattentreibers
Die Unterbrechungsroutine ruft eine Assembler-Routine (Prozesswechsel) auf, diese aktiviert den neuen Prozess (Prozess X). Dabei werden alle Register neu belegt
8a) Der eigentliche Prozesswechsel wird aufgerufen
CPUProzess X
Pro
g
Statu
swo
rt
Pro
g Z
ähler
Stackp
oin
ter
Stack Prozess X
Prozesstabelle
Prozess A rechenbereit
Prozess X rechnend
Prozessverwaltung
Scheduler
ProzesswechselTerminaltreibers
Unterbrechungsvektoren der I/O Geräteklassen
Platte
Terminal
Unterbrechungsroutine des Plattentreibers
8b) Der eigentliche Prozesswechsel wird durchgeführt
NetzUhr
CPUProzess X
Pro
g
Statu
swo
rt
Pro
g Z
ähler
Stackp
oin
ter
Stack Prozess X
Prozesstabelle
Prozess A rechenbereit
Prozess X rechnendUnterbrechungshardware
Prozessverwaltung
Scheduler
ProzesswechselTerminaltreibers
Unterbrechungsvektoren der I/O Geräteklassen
Platte
Terminal
Unterbrechungsroutine des Plattentreibers
Warten auf die nächste Unterbrechung
DruckerPlatte
Terminal?Wer löst sie aus...
Endzustand: Der Prozess X befindet sich in der CPU in Ausführung