From 44eb92e9f3adbc3f06e363dacb00f7fd0a37f6b3 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Sun, 8 Nov 2015 00:21:32 +0000 Subject: =?UTF-8?q?Betriebssysteme=20=C2=AD=20Blatt=2004?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ws2015/betriebssysteme/blaetter/04/abgabe.md | 38 ++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 ws2015/betriebssysteme/blaetter/04/abgabe.md (limited to 'ws2015') diff --git a/ws2015/betriebssysteme/blaetter/04/abgabe.md b/ws2015/betriebssysteme/blaetter/04/abgabe.md new file mode 100644 index 0000000..94578c5 --- /dev/null +++ b/ws2015/betriebssysteme/blaetter/04/abgabe.md @@ -0,0 +1,38 @@ +# 5-Zustands-Prozessmodell + +a) + i) Übergang von *blocked* zu *running* wird nur via *ready* realisiert, da der Scheduler bereits periodisch Prozesse aus *ready* aufweckt. + Zusätzlich auch noch den jeweiligen Prozess aufzuwecken wäre schlicht unnötig. + ii) Fordert ein Prozess E/A-Resourcen an, so wird er nach *blocked* verschoben bis die jeweilige E/A-Operation per Unterbrechung bekannt macht, dass der Vorgang abgeschlossen ist. + iii) Ein Prozess, der nicht läuft, kann keine E/A-Resource anfordern. +b) + (i) *new* → *ready* + ~ Ein Nutzer hat seine Shell angewiesen `Hello World!` auszugeben, diese forkt um später `/bin/echo` aufzurufen. + + *ready* → *running* + ~ Der Shell-Prozess ruft `wait` auf den soeben gespawnten Prozess auf und wird daher *blocked*. + Der Scheduler entscheidet nun zum Kindprozess zu wechseln. + + *running* → *ready* + ~ `/bin/echo` hat nicht innerhalb der switching-Frequenz des Schedulers terminiert. + Der Scheduler verschiebt `/bin/echo` in *ready* und wechselt zu einem anderen Prozess. + + *running* → *blocked* + ~ `/bin/echo` ist dynamisch gelinkt und möchte eine library von der Festplatte lesen. + Es setzt einen Syscall ab und wartet auf das Ergebnis. + + *blocked* → *ready* + ~ Die Festplatte fängt an einen Stream von bytes zu schicken. + Der Scheduler fängt die Unterbrechung ab und verschiebt `/bin/echo` nach *ready* + + *running* → *exit* + ~ `/bin/echo` terminiert. + (ii) *new*. Prozesse werden im reinen batch-betrieb nicht dynamisch erzeugt. + +# Prozesse + +a) Kontext +b) Uniprogramming +c) 13.3 min +d) `fork` +e) Scheduler -- cgit v1.2.3