150 likes | 342 Views
Vorgeschichte: Der Prozess X befindet sich in der CPU in Ausführung. Er stellt eine Lese-Anfrage an die Platte. Unterbrechungsvektoren der I/O Geräteklassen. Platte. Terminal. Prozessverwaltung. Unterbrechungsroutine des Plattentreibers. Scheduler. Terminaltreibers. Prozesswechsel.
E N D
Vorgeschichte: Der Prozess X befindet sich in der CPU in Ausführung.Er stellt eine Lese-Anfrage an die Platte Unterbrechungsvektoren der I/O Geräteklassen Platte Terminal Prozessverwaltung Unterbrechungsroutine des Plattentreibers Scheduler Terminaltreibers Prozesswechsel CPUProzess X Stack Prozess X Prog Statuswort Prog Zähler Stackpointer blockieren lesen Prozesstabelle Prozess A rechenbereit Prozess X rechnend 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
Eine Weile später ist die Platte fertig mit Lesen und löst eine I/O-Unterbrechung aus...
Ausgangslage: Der Prozess A befindet sich in der CPU in Ausführung.Eine Platte löst eine Unterbrechung aus Unterbrechungsvektoren der I/O Geräteklassen Platte Terminal Prozessverwaltung Unterbrechungsroutine des Plattentreibers Scheduler Terminaltreibers Prozesswechsel CPUProzess A Stack Prozess A Prog Statuswort Prog Zähler Stackpointer Prozesstabelle Prozess A rechnend Prozess X blockiert Unterbrechungshardware Platte
Unterbrechungsvektoren der I/O Geräteklassen Platte Terminal Prozessverwaltung Unterbrechungsroutine des Plattentreibers Scheduler Terminaltreibers Prozesswechsel Prog Stauswort Prog Zähler CPUProzess A 1) Unterbrechungshardware sichert rechnenden Prozess Stack Prozess A Prog Statuswort Prog Zähler Stackpointer Prozesstabelle Prozess A rechnend Prozess X blockiert Unterbrechungshardware Programmzähler und Programmstatuswort des rechnenden Prozesses werden durch die Unterbrechungshardware auf dem Stack gesichert
2) Unterbrechungshardware lädt Unterbrechungsroutine der I/O Geräte-Klasse Prozessverwaltung Scheduler Prozesswechsel CPUUnterbrechungPlattentreiber Unterbrechungsvektoren der I/O Geräteklassen Stack Prozess A Prog Statuswort Prog Zähler Stackpointer Platte Terminal Unterbrechungsroutine des Plattentreibers Terminaltreibers Prozesstabelle Prozess A rechnend Prozess X blockiert 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
3a) Unterbrechungsroutine sichert restliche Register des ursprünglichen Prozesses Prozessverwaltung Scheduler Prozesswechsel CPUUnterbrechungPlattentreiber Unterbrechungsvektoren der I/O Geräteklassen Stack Prozess A Prog Statuswort Prog Zähler Stackpointer Platte Terminal Unterbrechungsroutine des Plattentreibers Terminaltreibers 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
3b) Unterbrechungsroutine sichert Programmstatuswort, Programmzähler und Stackpointer des ursprünglichen Prozesses Stack Prozessverwaltung Scheduler Prozesswechsel CPUUnterbrechungPlattentreiber Unterbrechungsvektoren der I/O Geräteklassen Prog Statuswort Prog Zähler Stackpointer Platte Terminal Unterbrechungsroutine des Plattentreibers Terminaltreibers Prozesstabelle Prozess A rechenbereit Prozess X blockiert Dabei wird der ursprüngliche Programmzähler und das Programmstatuswort aus dem Stack gelesen und entfernt (pop)
4) Unterbrechungsroutine lädt den Stackpointer der Prozessverwaltung Stack Prozess Verwaltung CPUUnterbrechungPlattentreiber Unterbrechungsvektoren der I/O Geräteklassen Prog Statuswort Prog Zähler Stackpointer Platte Terminal Prozessverwaltung Unterbrechungsroutine des Plattentreibers Scheduler Terminaltreibers Prozesswechsel Prozesstabelle Prozess A rechenbereit Prozess X blockiert Die Unterbrechungsroutine belegt das Stack-Register des Prozessors mit dem Stackpointer der Prozessverwaltung
5) Unterbrechungsroutine ruft eine C-Routine auf Stack Prozess Verwaltung CPUUnterbrechungPlattentreiber Unterbrechungsvektoren der I/O Geräteklassen Prog Statuswort Prog Zähler Stackpointer Platte Terminal Prozessverwaltung Unterbrechungsroutine des Plattentreibers Scheduler Terminaltreibers Prozesswechsel calls Prozesstabelle C-Routine bestimmt blockierten Prozess Prozess A rechenbereit 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
6) Der Prozess-Scheduler wird aufgerufen Stack Prozess Verwaltung CPUUnterbrechungPlattentreiber Unterbrechungsvektoren der I/O Geräteklassen Prog Statuswort Prog Zähler Stackpointer Platte Terminal Prozessverwaltung Unterbrechungsroutine des Plattentreibers Scheduler Terminaltreibers Prozesswechsel calls calls Prozesstabelle C-Routine bestimmt blockierten Prozess Den nächsten rechnenden Prozess bestimmen: Prozess X Prozess A rechenbereit Prozess X rechenbereit Der Prozess-Scheduler wird von der C-Prozedur aufgerufen und bestimmt den nächsten Prozess, der in den Zustand rechnend versetzt werden soll
7) Die Kontrolle geht wieder zurück zur Unterbrechungsroutine Stack Prozess Verwaltung CPUUnterbrechungPlattentreiber Unterbrechungsvektoren der I/O Geräteklassen Prog Statuswort Prog Zähler Stackpointer Platte Terminal Prozessverwaltung Unterbrechungsroutine des Plattentreibers Scheduler Terminaltreibers Prozesswechsel Return „Prozess X“ Return „Prozess X“ Prozesstabelle C-Routine bestimmt blockierten Prozess Prozess A rechenbereit Prozess X rechenbereit Die Unterbrechungsroutine erhält die Kontrolle der C-Prozedur zurück
8a) Der eigentliche Prozesswechsel wird aufgerufen Stack Prozess Verwaltung CPUUnterbrechungPlattentreiber Unterbrechungsvektoren der I/O Geräteklassen Prog Statuswort Prog Zähler Stackpointer Platte Terminal Prozessverwaltung Unterbrechungsroutine des Plattentreibers calls „Prozess X“ Scheduler Terminaltreibers Prozesswechsel Prozesstabelle Prozess A rechenbereit Prozess X rechenbereit Die Unterbrechungsroutine ruft eine Assembler-Routine (Prozesswechsel) auf, diese aktiviert den neuen Prozess (Prozess X). Dabei werden alle Register neu belegt
8b) Der eigentliche Prozesswechsel wird durchgeführt Unterbrechungsvektoren der I/O Geräteklassen Platte Terminal Unterbrechungsroutine des Plattentreibers Terminaltreibers CPUProzess X Stack Prozess X Prog Statuswort Prog Zähler Stackpointer Prozessverwaltung Scheduler Prozesswechsel Prozesstabelle Prozess A rechenbereit Prozess X rechnend
Endzustand: Der Prozess X befindet sich in der CPU in Ausführung Unterbrechungsvektoren der I/O Geräteklassen Platte Terminal Prozessverwaltung Unterbrechungsroutine des Plattentreibers Scheduler Terminaltreibers Prozesswechsel Uhr Netz Platte Drucker Terminal CPUProzess X Stack Prozess X Prog Statuswort Prog Zähler Stackpointer Warten auf die nächste Unterbrechung Wer löst sie aus... Prozesstabelle Prozess A rechenbereit Prozess X rechnend ? Unterbrechungshardware