summaryrefslogtreecommitdiff
path: root/ws2015/oss/blaetter/04/abgabe.md
blob: 94578c597032c8846d7a089128f5e6ead1a7771a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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