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