Inhaltsverzeichnis
Cover
Titelblatt
Impressum
Über den Autor
Inhaltsverzeichnis
Einleitung
Über dieses Buch
Konventionen in diesem Buch
Symbole in diesem Buch
Törichte Annahmen über den Leser
Wie dieses Buch aufgebaut ist
Wie Sie dieses Buch lesen sollten
Teil I: Grundlagen
Kapitel 1: Ein bisschen Einführung
Was ist ein Betriebssystem?
Eine (ganz) kurze Geschichte der Betriebssysteme
Aufgaben eines Betriebssystems
Perspektiven auf Betriebssysteme
Klassifizierung von Betriebssystemen
Lizenzierungsaspekte
Kapitel 2: Bedienung, bitte: Wie man mit Linux umgeht
Wie sag ich's meinem Betriebssystem?
Interaktion an der Kommandozeile
Editor
Compiler und Interpreter
Das eingebaute Handbuch
Lesevorschläge
Übungsaufgaben
Kapitel 3: C
Warum C?
Aller Anfang ist schwer
Konstrukte zur Steuerung der Abarbeitung
Funktionen
Zeiger
Dynamische Speicherverwaltung
Was fehlt jetzt noch zum C-Profi?
Lesevorschläge
Übungsaufgaben
Teil II: Aktivitäten im Betriebssystem
Kapitel 4: Grundlegende Begriffe und Abstraktionen
Architekturen
Kernel Mode und User Mode
Interrupts
Aktivitäten und Ressourcen
Übungsaufgaben
Kapitel 5: Action! Aktivitäten, Prozesse und all das
Prozesse und Threads
Lesevorschläge
Übungsaufgaben
Kapitel 6: Planen von Aktivitäten (Scheduling)
Wozu benötigt man einen Scheduler?
Offline-Planung
Einfache Online-Verfahren für Jobsysteme
Verfahren für Universalbetriebssysteme
Übungsaufgaben
Teil III: Interaktion zwischen Aktivitäten
Kapitel 7: Synchronisation: Warten auf Godot
Zeitabhängige Fehler und wie man ihnen beikommt
Dezentrale Steuerung kritischer Abschnitte
Zentrale Steuerung
Das Leser-Schreiber-Problem
Lesevorschläge
Übungsaufgaben
Kapitel 8: Kommunikation
Wozu kommunizieren?
Begriffe
We are laying a pipeline
Prozesse, hört die Signale
Vom Senden und Empfangen: Nachrichtenaustausch
Teilen macht froh: Shared Memory
Was es sonst noch zum Kommunizieren gibt
Lesevorschläge
Übungsaufgaben
Teil IV: Speicher
Kapitel 9: Hauptspeicher (RAM)
Verwaltung des Freispeichers
Virtueller Speicher
Wichtige UNIX-Dienste für den Speicher
Lesevorschläge
Übungsaufgaben
Kapitel 10: Persistenter Speicher
Grundlegende Abstraktionen
Systemrufe fürs Dateisystem
Implementation von Dateisystemen
Optimierung von Massenspeicherzugriffen
Lesevorschläge
Übungsaufgaben
Teil V: Sicherheit
Kapitel 11: Betriebssystem-Sicherheit
Grundbegriffe
Schadcode
Stack Overflow
Gegenmaßnahmen
Andere Angriffe
Authentifizierung
Zusammenfassung
Lesevorschläge
Übungsaufgaben
Teil VI: Top-Ten-Teil
Kapitel 12: Zehn Personen, ohne die Betriebssysteme nicht denkbar sind
Edsger W. Dijkstra (1930–2002)
Bill Gates (* 1955)
Steve Jobs (1955–2011)
Leslie Lamport (* 1941)
Jochen Liedtke (1953–2001)
Dennis Ritchie (1941–2011)
Richard Stallman (* 1953)
Andrew S. Tanenbaum (* 1944)
Ken Thompson (* 1943)
Linus Torvalds (* 1969)
Anhang: Lösungen der Aufgaben
Kapitel 1
Kapitel 2
Kapitel 3
Kapitel 4
Kapitel 5
Kapitel 6
Kapitel 7
Kapitel 8
Kapitel 9
Kapitel 10
Kapitel 11
Literatur
Abbildungsverzeichnis
Stichwortverzeichnis
End User License Agreement
Tabellenverzeichnis
Kapitel 3
Tabelle 3.1: Die wichtigsten Grunddatentypen in C
Tabelle 3.2: Beispiele einiger wichtiger Zeichenkonstanten
Tabelle 3.3: Arithmetische (links) und Vergleichsoperatoren (rechts)
Tabelle 3.4: Logische Verknüpfungen in C
Tabelle 3.5: Bitoperatoren in C
Tabelle 3.6: Präzedenz der wichtigsten Operatoren in C
Tabelle 3.7: Platzhalter im
formatstring
von
printf()
Kapitel 4
Tabelle 4.1: Klassifikation von Ressourcen
Kapitel 6
Tabelle 6.1: Schedulingzeitpunkte und Bereitmengen für zwei Prozessoren
Tabelle 6.2: Beispielprozessmenge für SRT und HRRN
Tabelle 6.3: Entwicklung der Prioritäten bei HRRN für die Prozesse der Beispielmenge
Kapitel 7
Tabelle 7.1: Wichtige Funktionen der POSIX-API für (benannte) Semaphore
Kapitel 8
Tabelle 8.1: Die wichtigsten Signale unter UNIX
Kapitel 9
Tabelle 9.1: Statusbits im Seitentabelleneintrag
Tabelle 9.2: Klassifizierung von Seiten anhand der Statusbits bei NRU
Tabelle 9.3: Beispiel für das Aging-Verfahren
Tabelle 9.4: Folge der Speicherreferenzen für Aufgabe 7
Kapitel 10
Tabelle 10.1: Beispiel einer Zugriffsmatrix
Tabelle 10.2: Permissions im AFS
Kapitel 11
Tabelle 11.1: Unsichere C-Funktionen und ihre sicheren Pendants
Tabelle 11.2: Erlaubte Operationen für Prozesssegmente
Tabelle 11.3: Einige gebräuchliche Hashverfahren
Illustrationsverzeichnis
Kapitel 1
Abbildung 1.1: Einfache Schichtenarchitektur eines Rechensystems
Kapitel 2
Abbildung 2.1: Typischer Anmeldebildschirm in Linux
Abbildung 2.2: Typische GUI-basierte Arbeitsoberfläche (Fenstermanager Gnome)
Abbildung 2.3: Kommandobasierte Interaktion mit einem Textterminal
Abbildung 2.4: Mehrere Terminals parallel im grafischen Fenstermanager i3
Abbildung 2.5: Ein kleiner Verzeichnisbaum
Abbildung 2.6: Ausschnitt aus einem typischen UNIX-Verzeichnisbaum
Abbildung 2.7: Zustände von
vi
Abbildung 2.8: Vom Quellcode zum Programmcode (Binärabbild)
Abbildung 2.9: Abarbeitung mittels Interpreter
Abbildung 2.10: Auszug aus der Manual-Seite für den Zeichenkettenvergleich unter ...
Kapitel 3
Abbildung 3.1: Die Schlüsselwörter von C
Abbildung 3.2: Die Zeichenkette
msg
im Speicher
Kapitel 4
Abbildung 4.1: Beispiel einer einfachen Schichtenarchitektur
Abbildung 4.2: Schichtenarchitektur bei MS-DOS
Abbildung 4.3: Client-Server-Beziehung
Abbildung 4.4: Prinzip eines Systemrufs
Abbildung 4.5: Ein Interrupt und seine Behandlung
Abbildung 4.6: Transformation von Ressourcen
Kapitel 5
Abbildung 5.1: Zustandsdiagramm eines Prozesses
Abbildung 5.2: Prozesserzeugung mittels
fork()
Abbildung 5.3: Drei Prozesse (links) vs. ein Adressraum mit drei Threads und ein ...
Kapitel 6
Abbildung 6.1: Prinzip der Zeitsteuerung
Abbildung 6.2: Resultierender Plan nach RMS für einen Prozessor und
,
und
Abbildung 6.3: Präzedenzgraph für die Beispielprozessmenge
Abbildung 6.4: Offline generierter Plan für einen Prozessor
Abbildung 6.5: Offline generierter Plan für zwei Prozessoren
Abbildung 6.6: Resultierende Pläne für FCFS und SJN
Abbildung 6.7: Resultierender Plan nach SRT für die Prozesse aus Tabelle 6.2
Abbildung 6.8: Resultierender Plan nach HRRN für die Prozesse aus Tabelle 6.2
Abbildung 6.9: Parameter bei Round Robin
Abbildung 6.10: Prioritätsstufen in Windows
Abbildung 6.11: Acht rechenbeschränkte Prozesse auf Vier-Kern-Syst...
Abbildung 6.12: Acht rechenbeschränkte Prozesse auf Vier-Kern-Syst...
Abbildung 6.13: Acht rechenbeschränkte Prozesse auf Vier-Kern-Syst...
Kapitel 7
Abbildung 7.1: (Möglicher) zeitlicher Ablauf beim Zugriff auf gemeinsames Konto
Abbildung 7.2: Funktionalität der den kritischen Abschnitt klammernden Funktionen...
Abbildung 7.3: Lösungsversuch 1 für dezentrales Management des kritischen Abschni...
Abbildung 7.4: Lösungsversuch 2 für dezentrales Management des kritischen Abschni...
Abbildung 7.5: Lösungsversuch 3 für dezentrales Management des kritischen Abschni...
Abbildung 7.6: Lösungsversuch 4 für dezentrales Management des kritischen Abschni...
Abbildung 7.7: Der Peterson-Algorithmus
Abbildung 7.8: Die Zeichenkette
msg
im Speicher
Kapitel 8
Abbildung 8.1: Der Lebenszyklus einer unbenannten UNIX-Pipe
Abbildung 8.2: Synchrones Senden beim Message Passing
Abbildung 8.3: Asynchrones Senden beim Message Passing
Abbildung 8.4: Datenübertragung via POSIX Message Queues
Abbildung 8.5: Prinzip des
Shared Memory
Kapitel 9
Abbildung 9.1: Speicherbelegung eines Prozesses im UNIX
Abbildung 9.2: Beispiel zur externen Fragmentierung
Abbildung 9.3: Speicherverwaltung mittels Bitmap
Abbildung 9.4: Freispeicherliste für Situation aus Abbildung 9.3
Abbildung 9.5: Blöcke mit integrierten Headern
Abbildung 9.6: Beispiel für Boundary Tags
Abbildung 9.7: Zusätzliche Verkettung freier Segmente
Abbildung 9.8: Beispiel zur Teilung größerer Segmente beim Buddy-Verfahren
Abbildung 9.9: Grundprinzip des virtuellen Speichers
Abbildung 9.10: Adressierung mittels Seitentabelle
Abbildung 9.11: Virtuelles Speichermodell der Intel-IA32-Architektur
Abbildung 9.12: Ablauf der Umsetzung einer virtuellen in eine physische Adresse
Abbildung 9.13: Beispiel zum Uhralgorithmus (Second Chance)
Abbildung 9.14: Aktualisierung eines Zählers beim Aging
Abbildung 9.15: Prinzip der Abbildung einer Datei im Hauptspeicher mittels
mmap()
Kapitel 10
Abbildung 10.1: Beziehung zwischen Verzeichniseintrag, Inode und Nutzdaten
Abbildung 10.2: Zwei Verzeichniseinträge für ein und dieselbe Datei
Abbildung 10.3: Prinzip einer Symbolischen Verknüpfung
Abbildung 10.4: Festplatte in Draufsicht (vereinfacht)
Abbildung 10.5: Physische und logische Blocknummern des Massenspeichers und ihre ...
Abbildung 10.6: Kontinuierliche Allokation von Blöcken
Abbildung 10.7: Datenblöcke einer Datei als Liste
Abbildung 10.8: Datei als verkettete Liste
Abbildung 10.9: Datei als verkettete Liste mit Zuordnungstabelle
Abbildung 10.10: Speicherung mit variablen Indexblöcken
Abbildung 10.11: Eine Datei im UNIX-Dateisystem
Abbildung 10.12: Beispiel für die Speicherung einer Datei mittels zweier Extents
Abbildung 10.13: Ein einfaches Beispiel zum Journaling
Kapitel 11
Abbildung 11.1: Stack Frames für jeden Funktionsaufruf
Abbildung 11.2: Stack-Layout während der Ausführung von
bo
Abbildung 11.3: Stack-Layout nach Kopieroperation mit zu langem Argument
Abbildung 11.4: Schutz der Rücksprungadresse durch Canary Word
Abbildung 11.5: Überschreiben der Rücksprungadresse mittels
Stack Overflow
Abbildung 11.6: Naive Implementierung der Authentifizierung
Abbildung 11.7: Authentifizierung mittels Passworthash
Abbildung 11.8: Authentifizierung mittels Challenge-Response
Abbildung 11.9: Prinzip des Wörterbuchangriffs
Anhang
Abbildung A.1: Der Verzeichnisbaum zur taxonomischen Einordnung vo...
Abbildung A.2: Ausschnitt der Ausgabe von
pstree
bei der Abarbeitu...
Abbildung A.3: Offline generierter Plan für die Taskmenge unter »O...
Abbildung A.4: Offline generierter Plan für die Taskmenge unter »O...
Abbildung A.5: Speicherabbild nach vier Forderungen
Orientierungspunkte
Cover
Titelblatt
Impressum
Über den Autor
Inhaltsverzeichnis
Einleitung
Fangen Sie an zu lesen
Anhang: Lösungen der Aufgaben
Literatur
Abbildungsverzeichnis
Stichwortverzeichnis
End User License Agreement
Seitenliste
1
2
5
6
7
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
381
382
383
384
385
389
390
391
392