BetriebsSys Flashcards
Was ist ein Prozess
Ein ausgeführtes Programm das vom OS verwaltet wird
Beinhaltet Programmcode, Aktivitäten, Prozesssteuerungsinformationen und benötigte Ressourcen
Unterschied Programm und Prozess
Programm: Statische Ansammlung von Befehlen und Daten, die auf Festplatte gespeichert sind und erfordert RAM und CPU zur ausführung
Prozess: Nach Ausführen eines Programms wird es zu aktivem Prozess
Wie erzeugt OS Illusion vieler CPUs
Durch Timesharing, CPU-Zeit wird in Zeitscheiben aufgeteilt und abwechselnd Prozessen zugewiesen
Das erweckt Anschein, dass mehrere Prozesse gleichzeitig ausgeführt werden
Rolle von Speicher und CPU in Prozessverwaltung
RAM: Speichert Programmanweisungen und Daten
CPU: Führt Befehle aus und verwendet Register zum Speichern temporärer Daten und Statusinformationen wie den PC
Was ist der adressierbare Speicher eines Prozesses
Jeder Prozess hat eigenen Adressraum, der Speicherbereich umfasst, auf den er nicht zugreifen kann
Verhindert, dass Prozesse auf Speicher anderer Prozesse zugreifen und sich beeinflussen
Rolle von Dateien und Registern in Prozessen
Prozesse greifen auf Dateien zu, um Daten zu lesen oder zu schreiben
Nutzen verschiedene Register für I/O, Stack Pointer, Funktionsparameter, lokale Variablen und Rücksprungadressen
Warum ist Speichern von Prozessinformationen wichtig
Informationen über Prozess können gespeichert werden und später wiederhergestellt werden
Ist essentiell für Context Switch, bei dem CPU von einem Prozess zum anderen wechselt
Was ist die Steuerinstanz bei Prozessverwaltung
Teil des OS, oft der Scheduler, der entscheidet, welcher Prozess als nächstes ausgeführt wird, basierend auf Algorithmen und Prioritäten
Welche Methoden für Virtualisierung
Protokolle und Mechanismen, die erforderlich sind, um Prozesse zu starten und zu stoppen sowie Regeln und Richtlinien, wie Prozesse gleichzeitig ausgeführt werden
Welche Funktionen hat Prozess API
Create: Start eines neuen Prozesses
Destroy: Beenden eines Prozesses
Wait: Warten auf Prozess
Status: Statusabfrage
Voraussetzung zum erstellen von Prozess
Programm muss in ausführbarer Form vorliegen und in Adressraum geladen werden
Früher: Gesamtes Programm geladen (eager loading)
Heute: Benötigter Programmcode wird geladen (Lazy loading)
Unterschied Stack und Heap
Stack: Für lokale Variablen, Funktionsparameter und Rücksprungadressen (Nach First in Last out prinzip)
Heap: Dynamische Speicherzuweisung mit verwendung von malloc und free
Was ist ein PCB
Prozesskontrollblock
Datenstruktur, die alle wichtigen Infos über Prozess enthält und Infos über Status (Ready, Running, Blocked, Zombie)
Was sind Adressräume
Isolierte Speicherbereiche, die jedem Prozess zugeordnet sind
Jeder Prozess glaub er habe Speicherbereich für sich allein
Was ist Speichervirtualisierung
Ermöglicht, dass Prozesse isolierte Adressräume haben
Erhöht Stabilität und Sicherheit
Wie werden Programminstruktionen adressiert
Code der ausgeführt wird, ist im Speicher abgelegt und wird von PC adressiert
Was ist der Heap
Dynamischer Speicherbereich, in dem Speicher während Laufzeit eines Programms angefordert und freigegeben werden kann
Was ist der Stack
Speicherbereich, der für Funktionsaufrufe, lokale Variablen und Rücksprungadressen verwendet wird
Wächst bei Funktionsaufrufen und schrumpft bei deren Beendigung
Was bedeutet eigener Speicherinhalt für jeden Prozess
Jeder Prozess hat eigenen Adressraum, auf den nur er zugreifen kann
Wenn Speicher für Prozess nicht ausreicht, wird bei Context Switch der Adressraum des aktuellen Prozesses gespeichert und der neue Prozess geladen
Was sind Bestandteile von Adressraum
Besteht aus
Code: unveränderlich und einfach zu laden
Heap: Wächst nach oben
Stack: Wächst nach unten
Was sind virtuelle Adressen
Prozess denkt er sei bei Adresse 0 im Speicher geladen, befindet sich aber bei verschiedenen physischen Adressen
Bei jedem Zugriff auf Variablen oder Konstanten muss virtuelle Adresse in physische umgerechnet werden
Wie funktioniert automatische Reservierung von Speicher auf dem Stack
void func() {
int x; // Speicher für x wird auf Stack reserviert
}
Wie funktioniert manuelle Reservierung von Speicher auf dem Heap
void func() {
int *x = (int *) malloc(sizeof(int)); // Speicher auf dem Heap reservieren
…
free(x); // Speicher freigeben
}
double *d = (double *) malloc(sizeof(double)); // Speicher für einen double-Wert reservieren
double *x = malloc(10 * sizeof(double));
…
free(x); // Speicher freigeben
Was ist virtuelle Adressraum in Bezug auf Malloc und Free
Malloc und Free arbeiten innerhalb von virtuellen Adressraum eines Prozesses
Auch bei Speicherlecks wird gesamter Speicher nach Ende des Prozesses freigegeben
Welche Systemaufrufe ändern den Heap
Systemaufrufe brk und sbrk ändern Heap und mmap erstellt neue Speichermapping im virtuellen Adressraum
Was sind Ziele der Speichervirtualisierung
Transparenz (Prozess merkt nicht, dass er virtuellen Speicher nutzt)
Sicherheit (Prozesse sind voneinander Isoliert und geschützt)
Effizient (Speicher und Zeiteffizient durch Hardware-Features)
Typische Fehler mit Umgang mit Speicher
Vergessen Speicher zu reservieren
Zu wenig Speicher reserviert
Speicher reserviert aber nicht initialisiert
Speicher nicht freigegeben
Speicher mehrfach freigegeben
Problem bei direkter Ausführung von Prozessen
Sicherstellung, dass Prozess keine verbotenen Aktionen ausführt, dass eingeschränkte Aktionen korrekt gehandhabt werden und Prozess Kontrolle wieder abgibt
Was sind User und Kernel Mode
User Mode: Programme laufen in eingeschränktem Modus, bestimmte Operationen sind eingeschränkt
Kernel Mode: Erlaubt alle Operationen
Syscall
- Programm führt Trap Instruktion aus
- Springt in Kernel Mode
- Führt Operation im SysCall Handler aus
- Kehrt in User Mode mit return from trap Instruktion
Welche Hardwareunterstützung bei Direct Excecution
Bei Wechsel in Kernel Mode werden wichtige Register gespeichert und später wiederhergestellt
Trap Table
Definiert, welcher Code bei welchem Ereignis ausgeführt wird
Wird beim Systemstart im Kernel Mode erstellt und Hardware mitgeteilt
Scheduling Policy
Regeln, nach denen Scheduler entscheidet, welcher Prozess als nächstes ausgeführt wird
Turnaround Zeit
Zeitspanne von der Ankunft eines Prozesses bis zu dessen Abschluss
FIFO
Langsame Prozesse blockieren schnelle Prozesse
Einfach zu implementieren
(P1 + P2 +Pn) / n
Shortest Job First (SJF)
Kürzester Job wird zuerst ausgeführt
Problem, wenn Jobs nicht gleichzeitig ankommen
Shortest Time-to-Completion First (STCF)
Ähnlich wie SJF aber preemptive, Prozesse können unterbrochen werden
Geht nur, wenn Laufzeit bekannt ist
Problem: Wenn ständig neue kürzere Jobs eintreffen
Round Robin
Job wird für bestimmte Zeitspanne ausgeführt
Bei jedem Wechsel von Prozess wird Context Switch ausgeführt
Zeitspanne sollte größer sein als Context Switch dauert, sonst lohnt es sich nicht
Gut für Response Time, schlecht für Turnaround Time
(Alle fairen Scheduler sind schlecht für Turnaround Time)
Berchnung Turnaroung Time
Turnaround = Completion - Arrival
Berechnung Response Time
Response = Firstrun - Arrival
Convoy Effekt
Langsame Prozesse blockieren schnelle Prozesse
Was passiert mit einem Job, der IO durchführt
Job ist blockiert und kann CPU nicht nutzen
Scheduler kann in der Zeit anderen Job laufen lassen
Sobald IO fertig ist, wird blockierter Job wieder auf ready gesetzt und kann CPU wieder nutzen
Unterschied Ressourcen Nutzung mit und ohne Overlapping
Ohne Overlapping können CPU oder I/O ungenutzt bleiben
Mit Overlapping können CPU und I/O gleichzeitig genutzt werden
Herausforderung ohne Kenntnis der Prozessdauer
Scheduler kennt Restlaufzeit von Prozess nicht und muss dennoch Responsetime und Turnaround-Zeiten minimieren
Regeln Multi Level Feedback Queue
Mehrere Queues mit unterschiedlichen Prio-Leveln: Hohe Prio läuft zuerst
RR innerhalb einer Queue: Bei gleicher Prio laufen sie in RR
Prio ist dynamisch und hängt von beobachteten Verhalten ab
Neue Jobs erhalten höchste Prio
Job der gesamte Zeitscheibe aufbraucht wird herabgestuft
Job der CPu vor Ablauf freigibt behält Prio
Beispiel für Verhalten von Jobs in MLFQ
Langlaufender Job: Braucht gesamte Zeitscheibe auf, wird herabgestuft
Kurzläufer: Startet in der höchste und bleibt dort, wenn CPU schnell freigibt
Mischung IO und CPU Intensiv: Wenn CPU schnell freigeben bleibt hohe Prio