summaryrefslogtreecommitdiff
path: root/ws2015/betriebssysteme/blaetter
diff options
context:
space:
mode:
Diffstat (limited to 'ws2015/betriebssysteme/blaetter')
-rw-r--r--ws2015/betriebssysteme/blaetter/01/abgabe.md27
-rw-r--r--ws2015/betriebssysteme/blaetter/02/abgabe.md21
-rw-r--r--ws2015/betriebssysteme/blaetter/03/abgabe.md13
-rw-r--r--ws2015/betriebssysteme/blaetter/04/abgabe.md38
4 files changed, 0 insertions, 99 deletions
diff --git a/ws2015/betriebssysteme/blaetter/01/abgabe.md b/ws2015/betriebssysteme/blaetter/01/abgabe.md
deleted file mode 100644
index 405ab62..0000000
--- a/ws2015/betriebssysteme/blaetter/01/abgabe.md
+++ /dev/null
@@ -1,27 +0,0 @@
1# Aufgabe 4 -- Realisierung von Unterprogrammen
2
3a)
4 - Code duplication -- Etwaige spätere Änderungen müssen manuell an alle Stellen kopiert werden.
5 - Argumente müssen manuell an jede Stelle eingepflegt werden.
6b) Die Kosten der Befehle für das Springen ins Unterprogramm und das kopieren der Argumente/Return-Values können groß sein gegen die Kosten des Unterprogramms.
7c)
8 - Die Parameter können auf den Stack gepusht werden, bevor in das Unterprogramm gesprungen wird.
9 - Manche Maschinen bieten spezielle Register für diesen Zweck.
10d) Während der Ausführung unterhält die Maschine ein Register, das die Adresse des nächsten auszuführenden Befehls enthält.
11 Diese kann beliebig überschrieben werden.
12e)
13 `JMP`
14 ~ überschreibt nur das Adress-Register.
15
16 `CALL`
17 ~ speichert vor dem Überschreiben des Adressregisters noch eine Adresse an die, nach Ausführung des Unterprogramms, in das gesprungen wird, zurückgesprungen werden soll.
18f) `RET` muss so implementiert werden, dass es die Rücksprungadresse aus dem selben Register zu lesen versucht, in das `CALL` sie speichert.
19 `CALL` speichert die Adresse entweder in einem speziellen Register oder auf dem Stack.
20
21# Aufgabe 5 -- Das Betriebssystem
22
23a) $2^n \cdot m~\text{Byte}$
24b) Maschinensprache
25c) Textverabeitung
26d) Gerätetreiber
27e) offene
diff --git a/ws2015/betriebssysteme/blaetter/02/abgabe.md b/ws2015/betriebssysteme/blaetter/02/abgabe.md
deleted file mode 100644
index adf72ce..0000000
--- a/ws2015/betriebssysteme/blaetter/02/abgabe.md
+++ /dev/null
@@ -1,21 +0,0 @@
1# Aufgabe 9 -- Multiprogramming
2
3a)
4 Unter Multiprogramming versteht man die Praxis den Prozessor der Maschine mit
5 hoher Frequenz zwischen mehreren auszuführenden Prozessen hin- und herschalten
6 zu lassen.
7b)
8 Die Resourcennutzung kann im Normalfall (viele jeweils wenig CPU-Intensive
9 Prozesse) verbessert werden.
10c)
11 Prozesse können echt parallel ausgeführt werden (im Idealfall wird also die
12 CPU-Leistung vervielfacht), es ist jedoch komplexes Scheduling erforderlich
13 und Kontextwechsel kann teuer sein.
14
15# Aufgabe 10 -- Programme und Unterprogramme
16
17a) Systemaufrufe (Syscalls)
18b) rekursiv
19c) Endadresse des Unterprogramms
20d) (iii)
21e) Clientanwendung
diff --git a/ws2015/betriebssysteme/blaetter/03/abgabe.md b/ws2015/betriebssysteme/blaetter/03/abgabe.md
deleted file mode 100644
index 3e6b599..0000000
--- a/ws2015/betriebssysteme/blaetter/03/abgabe.md
+++ /dev/null
@@ -1,13 +0,0 @@
1# E/A-Operationen mit Hilfe von Interrupts
2
3a) Interrupts sind Befehle an die CPU, die einen Sprung in den entsprechenden Handler des Betriebssystems verursachen und von externen Quellen ausgelöst werden (Uhr, E/A Peripherie, …)
4b) Alternativ zu Interrupt-basiertem E/A könnten Geräte auch ihren aktuellen Status auf eine Abfrage des aktuellen Prozesses hin zur verfügung stellen.
5c) Aktives Polling würde effektiv Prozesszyklen verschwenden jedoch den Prozessfluss deterministischer gestalten.
6
7# Einführung in Betriebssysteme
8
9a) Statusbus
10b) `(0,0,0,0)`
11c) PC (Program Counter)
12d) Das Nutzerprogramm bleibt blockiert, bis die E/A-Operation abgeschlossen ist.
13e) `div $t0,$t1,$t2`
diff --git a/ws2015/betriebssysteme/blaetter/04/abgabe.md b/ws2015/betriebssysteme/blaetter/04/abgabe.md
deleted file mode 100644
index 94578c5..0000000
--- a/ws2015/betriebssysteme/blaetter/04/abgabe.md
+++ /dev/null
@@ -1,38 +0,0 @@
1# 5-Zustands-Prozessmodell
2
3a)
4 i) Übergang von *blocked* zu *running* wird nur via *ready* realisiert, da der Scheduler bereits periodisch Prozesse aus *ready* aufweckt.
5 Zusätzlich auch noch den jeweiligen Prozess aufzuwecken wäre schlicht unnötig.
6 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.
7 iii) Ein Prozess, der nicht läuft, kann keine E/A-Resource anfordern.
8b)
9 (i) *new* → *ready*
10 ~ Ein Nutzer hat seine Shell angewiesen `Hello World!` auszugeben, diese forkt um später `/bin/echo` aufzurufen.
11
12 *ready* → *running*
13 ~ Der Shell-Prozess ruft `wait` auf den soeben gespawnten Prozess auf und wird daher *blocked*.
14 Der Scheduler entscheidet nun zum Kindprozess zu wechseln.
15
16 *running* → *ready*
17 ~ `/bin/echo` hat nicht innerhalb der switching-Frequenz des Schedulers terminiert.
18 Der Scheduler verschiebt `/bin/echo` in *ready* und wechselt zu einem anderen Prozess.
19
20 *running* → *blocked*
21 ~ `/bin/echo` ist dynamisch gelinkt und möchte eine library von der Festplatte lesen.
22 Es setzt einen Syscall ab und wartet auf das Ergebnis.
23
24 *blocked* → *ready*
25 ~ Die Festplatte fängt an einen Stream von bytes zu schicken.
26 Der Scheduler fängt die Unterbrechung ab und verschiebt `/bin/echo` nach *ready*
27
28 *running* → *exit*
29 ~ `/bin/echo` terminiert.
30 (ii) *new*. Prozesse werden im reinen batch-betrieb nicht dynamisch erzeugt.
31
32# Prozesse
33
34a) Kontext
35b) Uniprogramming
36c) 13.3 min
37d) `fork`
38e) Scheduler