Betriebssysteme // Kapitel 3: Prozesse
Aufgabe 1: Woraus besteht ein Prozess?
1. Programmcode
2. Speicherbereich(e)
3. Meta-Informationen
2. Speicherbereich(e)
3. Meta-Informationen
Aufgabe 2: Was ist der Unterschied zwischen einem Programm und einem Prozess?
Programm: 'Kochrezept' (statische Beschreibung).
Prozess: 'Kochen' (aktive Abarbeitung).
Ein Programm kann mehrere Prozess-Instanzen haben.
Prozess: 'Kochen' (aktive Abarbeitung).
Ein Programm kann mehrere Prozess-Instanzen haben.
Aufgabe 3: Wie sieht der einfache Lebenszyklus eines Prozesses aus?
1. Create (Erstellen)
2. Run (Ausführen)
3. Terminate (Beenden)
2. Run (Ausführen)
3. Terminate (Beenden)
Aufgabe 4: Wodurch können Prozesse erstellt werden?
- System-Start (Initialisierung)
- Ein Prozess startet einen anderen (System-Call)
- Benutzerinteraktion
- Batch-Jobs
- Ein Prozess startet einen anderen (System-Call)
- Benutzerinteraktion
- Batch-Jobs
Aufgabe 5: Welche System-Calls werden zur Prozesserstellung in Unix/Linux und Windows genannt?
Unix/Linux: fork(), execve()
Windows: CreateProcessW(), CreateProcessAsUserW(), etc.
Windows: CreateProcessW(), CreateProcessAsUserW(), etc.
Aufgabe 6: Auf welche Arten können Prozesse terminiert (beendet) werden?
- Normal (freiwillig, exit(0))
- Fehler (freiwillig, exit(-1))
- Fataler Fehler (unfreiwillig, Exception)
- Kill (unfreiwillig, SIGKILL)
- Fehler (freiwillig, exit(-1))
- Fataler Fehler (unfreiwillig, Exception)
- Kill (unfreiwillig, SIGKILL)
Aufgabe 7: Wie unterscheiden sich Prozess-Hierarchien bei Windows und Unix/Linux?
Windows: Flache Hierarchie, kaum Abhängigkeit.
Unix/Linux: Strikte Hierarchie (Eltern/Kind), Kind ist Kopie des Elternprozesses.
Unix/Linux: Strikte Hierarchie (Eltern/Kind), Kind ist Kopie des Elternprozesses.
Aufgabe 8: Was passiert in Unix, wenn sich ein Benutzer abmeldet?
Abmeldung sendet SIGHUP an Shell -> Shell sendet SIGHUP an alle Kind-Prozesse -> Alle werden beendet.
Aufgabe 9: Was ist ein Zombie-Prozess und was ist ein verwaister Prozess (Orphan)?
Zombie: Kind beendet, Eltern-Prozess hat wait() noch nicht aufgerufen.
Orphan: Eltern-Prozess beendet sich vor dem Kind-Prozess (Adoption durch init/PID 1).
Orphan: Eltern-Prozess beendet sich vor dem Kind-Prozess (Adoption durch init/PID 1).
Aufgabe 10: Warum ist Nebenläufigkeit (Concurrency) nützlich?
Warten auf I/O verschwendet Rechenzeit. Durch Time-Sharing/Parallelität wird die CPU besser ausgelastet.
Aufgabe 11: Mit welcher Formel kann die CPU-Auslastung bei n Prozessen angenähert werden?
Auslastung = 1 - p^n
(p = Anteil der Wartezeit für I/O, n = Anzahl Prozesse)
(p = Anteil der Wartezeit für I/O, n = Anzahl Prozesse)
Aufgabe 12: Was beschreibt das Amdahl'sche Gesetz?
Beschreibt den maximalen Speedup durch Parallelisierung.
Speedup = 1 / ((1-P) + (P/N))
Der Nutzen ist oft durch den seriellen Anteil (P) begrenzt.
Speedup = 1 / ((1-P) + (P/N))
Der Nutzen ist oft durch den seriellen Anteil (P) begrenzt.
Aufgabe 13: Aus welchen drei Zuständen besteht das Prozess-Zustandsmodell?
1. Running (wird ausgeführt)
2. Ready (wartet auf CPU)
3. Blocked (wartet auf I/O oder Event)
2. Ready (wartet auf CPU)
3. Blocked (wartet auf I/O oder Event)
Aufgabe 14: Was sind die Hauptaufgaben eines Schedulers?
- Verwaltung ausführbarer Prozesse
- Auswahl des nächsten Prozesses
- Verschiedene Strategien je nach System (Server, Echtzeit, etc.)
- Auswahl des nächsten Prozesses
- Verschiedene Strategien je nach System (Server, Echtzeit, etc.)
Aufgabe 15: Was ist ein Thread im Verhältnis zu einem Prozess?
Ein Prozess kann mehrere Threads haben. Threads teilen sich den Speicherbereich des Prozesses und sind leichtgewichtiger.
Aufgabe 16: Warum sind Threads oft effizienter als Prozesse für Parallelisierung?
Schnellerer Context-Switch, weniger Wechsel in Kernel-Mode zur Synchronisation nötig, weniger Overhead.
Aufgabe 17: Warum ist das Gaußsche Eliminationsverfahren schwer zu parallelisieren?
Starke Datenabhängigkeiten führen zu einem geringen Speedup.
Aufgabe 18: Ist das Ausliefern statischer Webseiten gut parallelisierbar? Prozesse oder Threads?
Ja, ideal parallelisierbar. Man sollte Threads nutzen, da sie leichtgewichtiger sind (weniger Overhead).
Aufgabe 19: Unterschied 'Thread-Pool' vs. 'Neuer Thread pro Anfrage'?
Neuer Thread: Kostet Zeit beim Erstellen/Beenden.
Thread-Pool: Wiederverwendung existierender Threads (schneller), aber begrenzte Kapazität.
Thread-Pool: Wiederverwendung existierender Threads (schneller), aber begrenzte Kapazität.