Betriebssysteme - Exam
Aufgabe 1)
Du bist als Systemadministrator verantwortlich für die Optimierung des Prozessmanagements in einem Betriebssystem. Dabei musst Du sicherstellen, dass die Prozesse effizient und reibungslos durch die verschiedenen Zustände (New, Ready, Running, Blocked, Terminated) wechseln.
a)
In deinem Betriebssystem gibt es fünf Prozesse: P1, P2, P3, P4 und P5. Jeder Prozess kann sich in einem der Zustände (New, Ready, Running, Blocked, Terminated) befinden. Angenommen, Du hast die folgenden initialen Zustände:
- P1: Ready
- P2: Running
- P3: Blocked
- P4: New
- P5: Terminated
Erläutere Schritt für Schritt, was passieren muss, damit Prozess P4 vom Zustand 'New' in den Zustand 'Running' übergeht. Nenne alle Zwischenzustände und die damit verbundenen Aktionen, die notwendig sind.
Lösung:
Um sicherzustellen, dass der Prozess P4 vom Zustand 'New' in den Zustand 'Running' wechselt, müssen folgende Schritte durchgeführt werden:
- Schritt 1: InitialzustandP4 ist im Zustand 'New'.
- Schritt 2: Wechsel zu 'Ready'Wenn der Prozess P4 alle Initialisierungsoperationen abgeschlossen hat und alle benötigten Ressourcen verfügbar sind, wechselt P4 in den Zustand 'Ready'. Dieser Wechsel kann z.B. durch eine Operation des Betriebssystem-Schedulers initiiert werden.
- Aktion: Initialisierung und Bereitstellung der erforderlichen Ressourcen.
- Schritt 3: Warten auf CPU-ZeitIm 'Ready'-Zustand wartet P4 darauf, dass ihm CPU-Zeit zugewiesen wird. Aktuell ist P2 im Zustand 'Running'.
- Aktion: P4 verbleibt in der Warteschlange, bis der Scheduler P4 CPU-Zeit zuweist.
- Schritt 4: Zustandwechsel für P2Der Scheduler muss eine Entscheidung treffen, P2 zu unterbrechen. Dies kann durch eine Kontextumschaltung oder ein anderes Scheduling-Ereignis geschehen, das P2 aus dem 'Running'-Zustand entfernt (z.B. Timeout, E/A-Anforderung, etc.).
- Aktion: Scheduler unterbricht P2, das in den 'Ready'- oder 'Blocked'-Zustand wechselt.
- Schritt 5: Wechsel zu 'Running'Der Scheduler weist P4 CPU-Zeit zu, wodurch P4 vom 'Ready'- in den 'Running'-Zustand wechselt.
- Aktion: Kontextumschaltung von P2 zu P4.
Zusammengefasst:
- P4 initialisiert und wechselt von 'New' zu 'Ready'.
- P4 wartet im 'Ready'-Zustand auf CPU-Zuweisung.
- P2 wird vom Running-Zustand unterbrochen, um Platz für P4 zu machen.
- P4 wechselt durch Scheduler-Entscheidung vom 'Ready'- in den 'Running'-Zustand.
b)
Angenommen, Prozess P2 wird während seiner Ausführung (Running) durch eine I/O-Operation unterbrochen und geht in den Zustand 'Blocked'. Danach muss der Scheduler einen neuen Prozess auswählen, der die CPU übernimmt. Berechne die Durchlaufzeit (in Sekunden) für Prozess P1 im Zustand 'Ready', wenn der Scheduler alle 10 ms entscheidet und die Kontextwechselzeit (Time Slice) 5 ms beträgt. Gegeben sind folgende Zeiten: P1 benötigt 40 ms, um vollständig ausgeführt zu werden, und der System-Overhead für jeden Scheduler-Zyklus beträgt 1 ms. Wie lange dauert es, bis P1 von 'Ready' in 'Running' wechselt und seine Ausführung beendet?
Lösung:
Um die Durchlaufzeit für Prozess P1 zu berechnen, wenn er vom Zustand 'Ready' in 'Running' wechselt und seine Ausführung beendet, müssen wir die Zeit berücksichtigen, die P1 im 'Ready'-Zustand verbringt, sowie die Zeit, die benötigt wird, um seine Ausführung zu beenden. Hier sind die gegebenen Informationen:
- Der Scheduler entscheidet alle 10 ms.
- Die Kontextwechselzeit beträgt 5 ms.
- P1 benötigt 40 ms, um vollständig ausgeführt zu werden.
- Der System-Overhead für jeden Scheduler-Zyklus beträgt 1 ms.
Gehen wir Schritt für Schritt vor:
- Schritt 1: Initialer Scheduler-ZyklusAngenommen, P2 wird durch eine I/O-Operation unterbrochen und wechselt in den Zustand 'Blocked'. Der Scheduler muss nun entscheiden, welchen Prozess er als nächstes auswählt.
- Entscheidungszeit des Schedulers: 10 ms
- Schritt 2: KontextwechselFalls der Scheduler P1 auswählt, wird ein Kontextwechsel durchgeführt, der ebenfalls Zeit kostet.
- Kontextwechselzeit: 5 ms
- Überhead für diesen Zyklus: 1 ms
- Gesamtkosten für den ersten Zyklus: 10 ms (Entscheidungszeit) + 5 ms (Kontextwechsel) + 1 ms (System-Overhead) = 16 ms
- Schritt 3: P1 startet 'Running'Nachdem der Kontextwechsel abgeschlossen ist, beginnt P1 mit der Ausführung. Es benötigt 40 ms, um vollständig ausgeführt zu werden.
- Ausführungszeit für P1: 40 ms
Die Gesamtdurchlaufzeit für P1 setzt sich aus der Zeit zusammen, die der Scheduler benötigt, um P1 auszuwählen, der Kontextwechselzeit und der tatsächlichen Ausführungszeit von P1.
Berechnung der Gesamtdurchlaufzeit:
- Entscheidungszeit des Schedulers: 10 ms
- Kontextwechselzeit: 5 ms
- System-Overhead für den ersten Zyklus: 1 ms
- Ausführungszeit von P1: 40 ms
Gesamtdurchlaufzeit: 10 ms + 5 ms + 1 ms + 40 ms = 56 ms
Fazit: Es dauert insgesamt 56 ms, bis P1 vom 'Ready'-Zustand in den 'Running'-Zustand wechselt und seine Ausführung beendet.
Aufgabe 2)
Ein Betriebssystemstudent sollte ein tiefes Verständnis für das Thread-Management und die Unterschiede zu Prozessen haben. Threads sind leichtergewichtig und effizienter als Prozesse, insbesondere in Bezug auf Speicher- und Ressourcenverwaltung. Threads teilen sich denselben Adressraum, während Prozesse voneinander isoliert sind. Die Synchronisation von Threads ist entscheidend, und die Erstellung sowie der Kontextwechsel sind zwischen Threads schneller als bei Prozessen.
a)
a) Erläutere die Hauptunterschiede zwischen der Verwaltung von Threads und Prozessen in einem Betriebssystem. Erkläre hierbei insbesondere die Bedeutung der geteilten Adressräume und die Auswirkungen auf die Ressourcenverwaltung.
Lösung:
Um die Unterschiede zwischen der Verwaltung von Threads und Prozessen in einem Betriebssystem zu verstehen, ist es wichtig, einige grundlegende Konzepte zu klären:
- Prozesse: Ein Prozess ist ein eigenständiges Programm, das in einem eigenen Adressraum läuft. Prozesse sind voneinander isoliert, was bedeutet, dass sie keinen Speicherraum oder Ressourcen direkt teilen. Jeder Prozess hat seine eigenen Systemressourcen wie Speicher, Dateideskriptoren und andere Kernel-Objekte. Die Isolation von Prozessen sorgt für Sicherheit und Stabilität, da Fehler in einem Prozess nicht direkt andere Prozesse beeinflussen.
- Threads: Ein Thread ist die kleinste Ausführungseinheit innerhalb eines Prozesses. Mehrere Threads innerhalb eines Prozesses teilen sich den gleichen Adressraum, was bedeutet, dass sie gemeinsamen Zugriff auf den gleichen Speicher und dieselben Ressourcen des Prozesses haben. Dies ermöglicht eine engere Zusammenarbeit und effizienteren Datenaustausch zwischen den Threads.
- Speicher- und Ressourcenverwaltung:
- Prozesse:
- Jeder Prozess benötigt seinen eigenen Adressraum, was mehr Speicherplatz und Verwaltungskosten verursacht.
- Ressourcen wie Datei-Handles, Netzwerk-Ports und Speicher müssen separat für jeden Prozess verwaltet werden.
- Der Kontextwechsel zwischen Prozessen ist aufwendiger, da der gesamte Speicher- und Kontextstatus des alten Prozesses gesichert und der des neuen Prozesses geladen werden muss.
- Threads:
- Threads innerhalb desselben Prozesses teilen sich denselben Adressraum, was weniger Speicherplatzverbrauch und geringere Verwaltungskosten bedeutet.
- Ressourcen werden in einem gemeinsamen Adressraum verwaltet, was die Kommunikation und den Datenaustausch zwischen Threads erleichtert.
- Der Kontextwechsel zwischen Threads ist schneller und weniger aufwendig, da nur der Registersatz und der Befehlszähler gewechselt werden müssen, während der gemeinsame Speicherraum unverändert bleibt.
- Synchronisation: Da Threads denselben Adressraum teilen, ist die Synchronisation zwischen Threads entscheidend, um Datenkonflikte und Inkonsistenzen zu vermeiden. Mechanismen wie Locks, semaphores und Monitore werden verwendet, um den geordneten Zugriff auf gemeinsame Ressourcen sicherzustellen. Bei Prozessen ist die Synchronisation weniger komplex, da sie standardmäßig isoliert sind und keine gemeinsame Speichernutzung erfolgt.
Zusammengefasst: Threads bieten durch die gemeinsame Nutzung des Adressraums und der Ressourcen innerhalb eines Prozesses eine effizientere und schnellere Möglichkeit der Parallelverarbeitung als Prozesse. Gleichzeitig erfordert die Verwaltung von Threads jedoch eine sorgfältige Synchronisation, um unerwünschte Datenkonflikte zu vermeiden.
b)
b) Gegeben sei ein Szenario, bei dem eine Anwendung intensives Multithreading verwendet. Welche Synchronisationsmechanismen könntest Du in diesem Fall einsetzen und warum? Gib mindestens zwei Beispiele und erläutere deren Funktion.
Lösung:
In einer Anwendung, die intensives Multithreading verwendet, ist die Synchronisation zwischen den Threads entscheidend, um Datenkonflikte und Inkonsistenzen zu vermeiden. Hier sind zwei gängige Synchronisationsmechanismen, die in solchen Szenarien eingesetzt werden können:
- Mutex (Mutual Exclusion Object):
- Eine Mutex ist ein Synchronisationsmechanismus, der verwendet wird, um den exklusiven Zugriff auf eine Ressource sicherzustellen.
- Nur ein Thread kann gleichzeitig eine Mutex sperren. Wenn ein weiterer Thread versucht, die bereits gesperrte Mutex zu sperren, wird er blockiert, bis die Mutex freigegeben wird.
- Mutexes werden häufig verwendet, um kritische Abschnitte im Code zu schützen, sodass nur ein Thread zur Zeit diese Sektion ausführen kann.
- Funktion:
- Ein Thread sperrt die Mutex vor dem Zugriff auf eine gemeinsam genutzte Ressource.
- Nach der Ausführung des kritischen Abschnitts gibt der Thread die Mutex frei, sodass sie von anderen Threads gesperrt werden kann.
- Semaphore:
- Ein Semaphore ist ein Signalmechanismus, der verwendet wird, um den Zugriff auf eine begrenzte Anzahl von Ressourcen zu steuern.
- Ein Semaphore kann mehrere Signale (oder Zähler) haben, sodass mehrere Threads gleichzeitig eine Ressource nutzen können, bis eine bestimmte Grenze erreicht ist.
- Wenn der Zähler des Semaphores null erreicht, werden weitere Threads, die auf die Ressource zugreifen möchten, blockiert, bis ein Signal durch einen anderen Thread freigegeben wird.
- Funktion:
- Ein Thread fordert ein Signal vom Semaphore an, bevor er auf die Ressource zugreift. Wenn Signale verfügbar sind, erhält er eines und reduziert den Zähler.
- Nach der Nutzung der Ressource gibt der Thread das Signal zurück, wodurch der Zähler des Semaphores erhöht wird und wartende Threads die Ressource nutzen können.
Diese Mechanismen sind notwendig, um sicherzustellen, dass Threads geordneten Zugriff auf gemeinsame Ressourcen haben und Datenintegrität gewahrt bleibt:
- Nutzung von Mutex: Zum Beispiel könnte in einer Banking-Anwendung ein Mutex verwendet werden, um den Zugriff auf einen Kontostand zu koordinieren, sodass nur ein Thread zur Zeit Ein- oder Auszahlungen vornehmen kann.
- Nutzung von Semaphore: In einem Webserver-Szenario könnte ein Semaphore verwendet werden, um eine begrenzte Anzahl von Verbindungen zu einem Datenbankserver zu steuern, dabei sicherzustellen, dass nicht mehr als eine bestimmte Anzahl von Threads gleichzeitig Verbindungen aufbauen.
c)
c) Berechne den zusätzlichen Speicherbedarf, wenn anstelle von 5 Threads 5 separate Prozesse erstellt werden, wenn jeder Prozess und Thread jeweils einen Stack von 1 MB und ein separates Datensegment von weiteren 2 MB benötigt. Vergleiche die Speicheranforderungen.
Lösung:
Um den zusätzlichen Speicherbedarf zu berechnen, wenn anstelle von 5 Threads 5 separate Prozesse erstellt werden, müssen wir den Speicherbedarf sowohl für Threads als auch für Prozesse ermitteln und vergleichen.
- Speicherbedarf von Threads:
- Jeder Thread hat seinen eigenen Stack von 1 MB.
- Da Threads den Adressraum des Prozesses teilen, gibt es nur ein separates Datensegment von 2 MB für den gesamten Prozess.
- Berechnung für 5 Threads:
- Gesamtgröße des Stacks für 5 Threads: 5 x 1 MB = 5 MB
- Separates Datensegment: 2 MB
- Gesamtspeicherbedarf für 5 Threads: 5 MB + 2 MB = 7 MB
- Speicherbedarf von Prozessen:
- Jeder Prozess hat seinen eigenen Stack von 1 MB.
- Jeder Prozess hat ein separates Datensegment von 2 MB.
- Berechnung für 5 Prozesse:
- Gesamtgröße des Stacks für 5 Prozesse: 5 x 1 MB = 5 MB
- Separates Datensegment für 5 Prozesse: 5 x 2 MB = 10 MB
- Gesamtspeicherbedarf für 5 Prozesse: 5 MB + 10 MB = 15 MB
Durch den Vergleich der Speicheranforderungen wird deutlich, dass die 5 Threads einen Gesamtspeicherbedarf von 7 MB haben, während die 5 separaten Prozesse einen Gesamtspeicherbedarf von 15 MB haben.
Differenz: 15 MB (Prozesse) - 7 MB (Threads) = 8 MB
Der zusätzliche Speicherbedarf bei der Erstellung von 5 separaten Prozessen anstelle von 5 Threads beträgt somit 8 MB.
d)
d) Angenommen, das Erstellen eines neuen Prozesses dauert im Durchschnitt 50 ms, während das Erstellen eines Threads nur 10 ms benötigt. Wie viel Zeit kann gespart werden, wenn eine Aufgabe, die 100 parallele Einheiten erfordert, mit Threads anstatt mit Prozessen realisiert wird? Führe eine vollständige Berechnung durch.
Lösung:
Um die Zeitersparnis bei der Verwendung von Threads statt Prozessen zu berechnen, müssen wir die Gesamtzeit für das Erstellen von 100 Prozessen und 100 Threads berechnen und vergleichen.
- Zeit für das Erstellen von 100 Prozessen:
- Erstellungszeit für einen Prozess: 50 ms
- Erstellungszeit für 100 Prozesse: 100 x 50 ms = 5000 ms
- Zeit für das Erstellen von 100 Threads:
- Erstellungszeit für einen Thread: 10 ms
- Erstellungszeit für 100 Threads: 100 x 10 ms = 1000 ms
Durch den Vergleich der Zeitaufwände wird deutlich, dass das Erstellen von 100 Prozessen 5000 ms dauert, während das Erstellen von 100 Threads nur 1000 ms in Anspruch nimmt.
Gesparte Zeit: 5000 ms (Prozesse) - 1000 ms (Threads) = 4000 ms
Die Zeitersparnis bei der Verwendung von Threads anstelle von Prozessen für die Durchführung einer Aufgabe, die 100 parallele Einheiten erfordert, beträgt somit 4000 ms.
Aufgabe 3)
Das Seitenverwaltungskonzept (Paged Memory Management) bietet eine Methode, den virtuellen Speicher eines Computers zu verwalten, indem dieser in feste, gleich große Segmente, sogenannte Seiten, unterteilt wird. Diese Seiten werden dann physisch zu Blöcken im Hauptspeicher, den sogenannten Frames, zugeordnet. Eine zentrale Komponente dieser Methode ist die Seitentabelle, die bei jedem Speicherzugriff genutzt wird, um die virtuelle Adresse in eine physische Adresse zu übersetzen.
Gegeben sei ein Computersystem mit einer 32-Bit-virtuellen Adresse und einer Seitengröße von 4 KB. Du wirst aufgefordert, verschiedene Aspekte der Speicherverwaltung zu untersuchen und spezifische Berechnungen durchzuführen.
a)
Teilaufgabe 1: Bestimme die Anzahl der Seiteneinträge, die die Seitentabelle enthalten muss, um den gesamten virtuellen Adressraum abzudecken. Gehe hierfür zunächst von der Seitengröße aus und berechne den Speicherplatz, der für einen Seitentabelleintrag benötigt wird.
- Die Seitengröße beträgt 4 KB.
- Die virtuelle Adresse hat eine Länge von 32 Bit.
Zeige alle Zwischenschritte und gebe die endgültige Anzahl der Seiteneinträge in der Seitentabelle an.
Hinweis: Beachte, dass 1 KB = 1024 Byte.
Lösung:
Um die Anzahl der Seiteneinträge zu bestimmen, die die Seitentabelle enthalten muss, um den gesamten virtuellen Adressraum abzudecken, befolge diese Schritte:
- Berechnung der Seitengröße in Bytes
- Bestimmung des gesamten virtuellen Adressraums
- Berechnung der Anzahl der benötigten Seiteneinträge
Schritt 1: Berechnung der Seitengröße in Bytes
- Die Seitengröße beträgt 4 KB.
- Da 1 KB = 1024 Byte:
- 4 KB = 4 * 1024 Byte = 4096 Byte
Schritt 2: Bestimmung des gesamten virtuellen Adressraums
- Eine 32-Bit-Adresse kann bis zu 232 Adressen adressieren:
- Gesamtadressraum = 232 Adressen = 4.294.967.296 Adressen
Schritt 3: Berechnung der Anzahl der benötigten Seiteneinträge
- Anzahl der Seiten = \(\frac{Gesamtadressraum}{Seitengröße}\)
- = \(\frac{4.294.967.296 \, \text{Bytes}}{4096 \, \text{Bytes}}\)
- = 1.048.576 Seiten
Daraus folgt, dass die Seitentabelle 1.048.576 Einträge enthalten muss, um den gesamten virtuellen Adressraum abzudecken.
Zusammenfassung:
- Die Seitentabelle benötigt 1.048.576 Seiteneinträge, um den gesamten virtuellen Adressraum eines 32-Bit-Systems mit einer Seitengröße von 4 KB abzudecken.
b)
Teilaufgabe 2: Ein Programm läuft auf dem oben beschriebenen System und erzeugt mehrere Speicherzugriffe. Einer der Speicherzugriffe ist auf die virtuelle Adresse 0x1BCD4
. Angenommen, die Seitentabelle für diesen Prozess enthält den Eintrag (1, 0x5D8)
für die betreffende Seite.
- Erkläre den Prozess der Übersetzung dieser virtuellen Adresse in eine physische Adresse.
- Berechne die entsprechende physische Adresse für die virtuelle Adresse
0x1BCD4
basierend auf den gegebenen Seitentabelleneinträgen.
Zeige alle Zwischenschritte der Berechnung und gebe die endgültige physische Adresse an.
Lösung:
Um die virtuelle Adresse 0x1BCD4
in eine physische Adresse zu übersetzen, musst Du die Informationen aus der Seitentabelle nutzen. Wir führen die Schritte dazu im Detail aus:
- Seitennummer und Offset aus der virtuellen Adresse extrahieren
- Passenden Seitentabelleneintrag suchen
- Physische Adresse berechnen
Schritt 1: Seitennummer und Offset aus der virtuellen Adresse extrahieren
Gegeben ist die virtuelle Adresse 0x1BCD4
. Eine 32-Bit-Adresse sieht wie folgt aus:
- Virtuelle Adresse: 32 Bit
- Seitengroesse: 4 KB = 4096 Bytes = 212 Bytes
Dies bedeutet, dass die ersten 20 Bits (32-12) für die Seitennummer zuständig sind und die letzten 12 Bits für den Offset in der Seite:
- Virtuelle Adresse (hex): 0x1BCD4
- Virtuelle Adresse (binär): 0001 1011 1100 1101 0100
Die ersten 20 Bits sind die Seitennummer und die letzten 12 Bits der Offset:
- Seitennummer (binär): 0001 1011 1100 1101 = 0x1BCD (hex)
- Offset (binär): 0100 = 0xD4 (hex)
Schritt 2: Passenden Seitentabelleneintrag suchen
Angenommen, die Seitentabelle enthält den Eintrag (1, 0x5D8)
für die entsprechende Seite. Dies bedeutet:
- Frame-Nummer: 1
- Offset im Frame: 0x5D8
Schritt 3: Physische Adresse berechnen
Um die physische Adresse zu berechnen, kombinieren wir die Frame-Nummer und den Offset:
- Frame-Nummer (dezimal): 1
- Offset (hex): 0xD4
Die physische Adresse setzt sich zusammen aus der Frame-Base-Adresse und dem Offset:
- Frame-Base-Adresse = Frame-Nummer * Seitengroesse
- = 1 * 4096 = 4096 (dezimal) = 0x1000 (hex)
- Physische Adresse = Frame-Base-Adresse + Offset
- = 0x1000 + 0xD4
- = 0x10D4
Zusammenfassung:
Die virtuelle Adresse 0x1BCD4
wird in die physische Adresse 0x10D4
übersetzt.
Aufgabe 4)
Virtueller Speicher ist eine Technik, mit der Betriebssysteme mehr Speicher simulieren können als physisch vorhanden ist, indem sie externen Speicher nutzen. Hier einige grundlegende Konzepte:
- Virtueller Speicher erweitert den physischen Speicher durch Nutzung des sekundären Speichers (Festplatte/SSD)
- Verwendet Paging: Speichert Daten in Seiten (Pages)
- Page Table: mappt virtuelle Adressen zu physischen Adressen
- Swapping: Austausch von Seiten zwischen Hauptspeicher und Sekundärspeicher bei Bedarf
- Page Fault: Tritt auf, wenn eine Seite nicht im Hauptspeicher vorhanden ist
- Effizienz steigt mit gutem Page Replacement Algorithmen (z.B. LRU, FIFO)
- Einfluss auf Systemleistung durch Overhead bei häufiger Nutzung des externen Speichers
a)
Angenommen, ein System nutzt 4KB große Seiten und verwendet den LRU (Least Recently Used)-Algorithmus zur Seitenersetzung. Ein Programm greift in folgender Reihenfolge auf die Seiten zu:
'1, 2, 3, 4, 5, 1, 2, 5, 6, 3, 7, 8, 1, 9, 10'
Das System hat nur 4 Seitenrahmen im Hauptspeicher zur Verfügung. Berechne die Anzahl der Page Faults, die auftreten und zeige den Inhalt der Seitenrahmen nach jedem Zugriff.
Lösung:
Virtueller Speicher ist eine Technik, mit der Betriebssysteme mehr Speicher simulieren können als physisch vorhanden ist, indem sie externen Speicher nutzen. Hier einige grundlegende Konzepte:
- Virtueller Speicher erweitert den physischen Speicher durch Nutzung des sekundären Speichers (Festplatte/SSD).
- Verwendet Paging: Speichert Daten in Seiten (Pages).
- Page Table: mappt virtuelle Adressen zu physischen Adressen.
- Swapping: Austausch von Seiten zwischen Hauptspeicher und Sekundärspeicher bei Bedarf.
- Page Fault: Tritt auf, wenn eine Seite nicht im Hauptspeicher vorhanden ist.
- Effizienz steigt mit gutem Page Replacement Algorithmen (z.B. LRU, FIFO).
- Einfluss auf Systemleistung durch Overhead bei häufiger Nutzung des externen Speichers.
Berechne die Anzahl der Page Faults und zeige den Inhalt der Seitenrahmen nach jedem Zugriff für den folgenden Fall:
'1, 2, 3, 4, 5, 1, 2, 5, 6, 3, 7, 8, 1, 9, 10'
Das System hat nur 4 Seitenrahmen im Hauptspeicher zur Verfügung und nutzt den LRU (Least Recently Used) Algorithmus zur Seitenersetzung.
Schritt-für-Schritt-Lösung: - Zugriff auf Seite 1: Page Fault, Seitenrahmen: [1, -, -, -]
- Zugriff auf Seite 2: Page Fault, Seitenrahmen: [1, 2, -, -]
- Zugriff auf Seite 3: Page Fault, Seitenrahmen: [1, 2, 3, -]
- Zugriff auf Seite 4: Page Fault, Seitenrahmen: [1, 2, 3, 4]
- Zugriff auf Seite 5: Page Fault, ersetze Seite 1 (LRU), Seitenrahmen: [5, 2, 3, 4]
- Zugriff auf Seite 1: Page Fault, ersetze Seite 2 (LRU), Seitenrahmen: [5, 1, 3, 4]
- Zugriff auf Seite 2: Page Fault, ersetze Seite 3 (LRU), Seitenrahmen: [5, 1, 2, 4]
- Zugriff auf Seite 5: Kein Page Fault, Seitenrahmen: [5, 1, 2, 4]
- Zugriff auf Seite 6: Page Fault, ersetze Seite 4 (LRU), Seitenrahmen: [5, 1, 2, 6]
- Zugriff auf Seite 3: Page Fault, ersetze Seite 5 (LRU), Seitenrahmen: [3, 1, 2, 6]
- Zugriff auf Seite 7: Page Fault, ersetze Seite 1 (LRU), Seitenrahmen: [3, 7, 2, 6]
- Zugriff auf Seite 8: Page Fault, ersetze Seite 2 (LRU), Seitenrahmen: [3, 7, 8, 6]
- Zugriff auf Seite 1: Page Fault, ersetze Seite 6 (LRU), Seitenrahmen: [3, 7, 8, 1]
- Zugriff auf Seite 9: Page Fault, ersetze Seite 3 (LRU), Seitenrahmen: [9, 7, 8, 1]
- Zugriff auf Seite 10: Page Fault, ersetze Seite 7 (LRU), Seitenrahmen: [9, 10, 8, 1]
Gesamtanzahl der Page Faults: 13
Hinweis: Ein Page Fault tritt auf, wenn eine Seite nicht im Hauptspeicher vorhanden ist und von der Festplatte geladen werden muss. In diesem Beispiel entstehen 13 Page Faults, da 13 Mal eine neue Seite in den Speicher geladen werden musste.
b)
Beschreibe die Vor- und Nachteile der Verwendung von virtuellem Speicher in einem Betriebssystem. Diskutiere insbesondere, welchen Einfluss der Page Fault Rate und die Wahl des Page Replacement Algorithmus auf die Leistung eines Systems haben können.
Lösung:
Virtueller Speicher ist eine Technik, die es einem Betriebssystem ermöglicht, mehr Speicher zu nutzen, als physisch im System vorhanden ist, indem externer Speicher (wie Festplatten oder SSDs) verwendet wird. Hier sind einige grundlegende Konzepte:
- Virtueller Speicher erweitert den physischen Speicher durch Nutzung des sekundären Speichers (Festplatte/SSD).
- Verwendet Paging: Speichert Daten in Seiten (Pages).
- Page Table: mappt virtuelle Adressen zu physischen Adressen.
- Swapping: Austausch von Seiten zwischen Hauptspeicher und Sekundärspeicher bei Bedarf.
- Page Fault: Tritt auf, wenn eine Seite nicht im Hauptspeicher vorhanden ist.
- Effizienz steigt mit gutem Page Replacement Algorithmen (z.B. LRU, FIFO).
- Einfluss auf Systemleistung durch Overhead bei häufiger Nutzung des externen Speichers.
Vor- und Nachteile der Verwendung von virtuellem Speicher: - Vorteile:
- Erweiteter Speicherplatz: Ermöglicht einem System, mehr Anwendungen auszuführen und größere Datenmengen zu verarbeiten, als es mit dem physischen Speicher allein möglich wäre.
- Speicherschutz: Jedes Programm hat seinen eigenen Adressraum, was verhindert, dass Programme versehentlich oder absichtlich den Speicher anderer Programme überschreiben.
- Effiziente Speicherverwaltung: Virtueller Speicher ermöglicht eine effizientere Nutzung des physischen Speichers durch Techniken wie Paging und Swapping.
- Isolierung: Verbesserte Sicherheit und Stabilität, da Programme in isolierten Speicherbereichen ausgeführt werden.
- Nachteile:
- Leistungsprobleme: Häufige Page Faults können zu erheblichen Leistungseinbußen führen, da der Zugriff auf den sekundären Speicher (Festplatte/SSD) viel langsamer ist als der Zugriff auf den Hauptspeicher (RAM).
- Overhead: Die Verwaltung des virtuellen Speichers bringt zusätzlichen Rechenaufwand mit sich, insbesondere bei der Pflege der Page Table und bei der Durchführung von Swap-Operationen.
- Komplexität: Erhöhte Systemkomplexität kann zu mehr Fehlerquellen und schwierigeren Diagnosen und Debugging-Prozessen führen.
- Platzverbrauch auf der Festplatte: Eine große Anzahl von Swap-Operationen kann den verfügbaren Speicherplatz auf der Festplatte verringern und deren Lebensdauer beeinträchtigen.
Einfluss der Page Fault Rate und der Wahl des Page Replacement Algorithmus auf die Systemleistung: - Page Fault Rate:
- Die Rate der Page Faults hat einen direkten Einfluss auf die Systemleistung. Eine hohe Page Fault Rate führt zu häufigen Unterbrechungen, da das System Daten von der Festplatte laden muss, was deutlich langsamer ist als das Laden aus dem RAM.
- Zur Verringerung der Page Fault Rate können Techniken wie größere Seitenrahmen, optimierte Speicherverwaltung und ausreichender physischer Speicher eingesetzt werden.
- Page Replacement Algorithmus:
- Least Recently Used (LRU): Ersetzt die Seite, die am längsten nicht genutzt wurde. Dieser Algorithmus bietet meist eine gute Leistung, erfordert aber eine genaue Verfolgung der Zugriffe, was zusätzlichen Overhead verursachen kann.
- First-In, First-Out (FIFO): Ersetzt die älteste Seite im Speicher. Dieser Algorithmus ist einfach zu implementieren, kann aber zu weniger effizienten Entscheidungen führen (Belady's Anomaly).
- Andere Algorithmen: Es gibt viele andere Algorithmen wie Optimal (OPT), Least Frequently Used (LFU) und Random Replacement, die jeweils Vor- und Nachteile haben und je nach Anwendung und Systemkonfiguration unterschiedliche Leistungsmerkmale aufweisen.
Die Wahl des richtigen Page Replacement Algorithmus kann den Unterschied zwischen einer gut und einer schlecht performenden Speicherverwaltung in einem Betriebssystem ausmachen. Ein geeigneter Algorithmus wird die Anzahl der Page Faults minimieren und somit die Systemleistung optimieren.