Speicherverwaltung in Betriebssystemen: Konzepte und Strategien

Eingeordnet in Informatik

Geschrieben am in Deutsch mit einer Größe von 10,9 KB

Grundlagen des Speichermanagements

Definition und Aufgaben des Memory Managers

Memory (Speicher) bezieht sich auf Computerkomponenten, Geräte und Speichermedien, die digitale Daten für Berechnungen über einen bestimmten Zeitraum speichern.

Der Teil des Betriebssystems, der das Speichermanagement übernimmt, wird als Memory Manager bezeichnet.

Seine Hauptaufgaben sind:

  • Verfolgen, welche Speicherbereiche verwendet werden und welche frei sind.
  • Bereitstellung von Speicherplatz für Prozesse, wenn Benutzer dies anfordern.
  • Verwaltung des Hauptspeichers (Primärspeicher oder realer Speicher).
  • Laden von Programmen von der Festplatte in den Speicher.
  • Schutz des gemeinsamen Speichers zwischen mehreren Prozessen.

Die Organisation und Verwaltung des Hauptspeichers ist einer der wichtigsten Faktoren bei der Gestaltung des Betriebssystems.

Multiprogramming führt dazu, dass mehrere Prozesse gleichzeitig in den Speicher geladen werden. Um diesen Bereich zu teilen, gibt es verschiedene Memory-Management-Algorithmen.

Das Speichermanagement stützt sich stark auf die Hardware.

Parkinson's Law und Speicherschutz

„Die Programme erweitern sich so weit, wie sie im Speicher können.“ Programme dürfen sich nicht gegenseitig stören; daher muss das Betriebssystem den Speicher effizient verwalten.

Ein Prozess muss sich im Hauptspeicher des Computers befinden, um ausgeführt werden zu können.

Hierarchie und Speichertypen

Die grundlegenden Punkte des Speichers lassen sich wie folgt zusammenfassen: Menge, Geschwindigkeit und Kosten.

  • Menge: Je mehr Speicher vorhanden ist, desto mehr kann genutzt werden.
  • Geschwindigkeit: Die Rate, mit der der Prozessor arbeiten kann.
  • Kosten: Die Gesamtkosten des Speichers sollten nicht zu groß sein, um einen zugänglichen Computer bauen zu können.

Überlegungen zur Hierarchie:

  • Programme und Daten müssen im Hauptspeicher sein, um ausgeführt oder referenziert zu werden.
  • Programme und Daten, die nicht sofort benötigt werden, können im Sekundärspeicher gehalten werden.

Der „Cache“ oder High-Speed-Speicher ist schneller und teurer als der Hauptspeicher. Programme laufen im Cache-Speicher wesentlich schneller als im Hauptspeicher.

Speicherfragmentierung und Partitionierung

Arten der Fragmentierung

Fragmentierung kann in zwei Ausführungen auftreten:

  1. Interne Fragmentierung: Entsteht aufgrund der Größendifferenz zwischen der Speicherpartition und dem Objekt, das dort untergebracht ist (statische Partitionierung).
  2. Externe Fragmentierung: Fehlender zusammenhängender Speicher zwischen Partitionen (dynamische Partitionierung).

Multiprogramming mit festen Partitionen (Statisch)

Dies ist der einfachste Weg, Speicher im Multiprogramming-Modus zu verwalten. Der Speicher wird in n Teile fester und oft ungleicher Größe unterteilt.

Vorteile der statischen Partitionierung

  • Die Verwaltung ist relativ einfach, da zur Speicherung staatlicher Ressourceninformationen nur ein Datensatz jeder Zone (frei oder besetzt) benötigt wird.
  • Der Schutz zwischen Prozessen kann durch den Mechanismus des Speicherschlüssels oder mithilfe des Basisregisters und des Längenregisters des Bereichs erfolgen.

Nachteile der statischen Partitionierung

  • Schlechte Speicherauslastung aufgrund der mangelnden Flexibilität der Methode.
  • Es ist schwierig, Programme auszuführen, die größer sind als die größte Partition. Wenn das Programm größer ist als die Partition, wird nur ein Teil des Programms im Hauptspeicher gehalten (Lösung: Overlay/Überlagerungen).
  • Speicherverschwendung für die Bereitstellung einer schlechten Partition (Zersplitterungstechnik wird verwendet).

Zuordnungsalgorithmen bei statischer Partitionierung

Die Prozesse werden Partitionen zugeordnet. Es gibt zwei Hauptansätze:

  • Queue pro Partition: Prozesse werden nach der Partition zugeordnet, in der Regel nach Größe.
  • Single-Queue: Prozesse, die geladen werden sollen, werden in einer einzigen Warteschlange gesammelt, und ein Modul verwaltet die Nutzung aller Partitionen.

Multiprogramming mit variablen Partitionen (Dynamisch)

Der Speicher wird in Blöcke unterschiedlicher Größe je nach den Bedürfnissen des Prozesses unterteilt.

Vorteile der dynamischen Partitionierung

Flexibilität, die es erlaubt, Blöcke in der gewünschten Größe zu definieren, wodurch die interne Fragmentierung beendet wird.

Nachteile der dynamischen Partitionierung

Wenn eine Partition freigegeben wird und nicht sofort belegt werden kann, entstehen Speicherlücken (externe Fragmentierung).

Schritte bei variablen Partitionen:

  • Die Partitionen sind variabel in Anzahl und Länge.
  • Wenn einem Prozess Speicher zugeteilt wird, erhält er den gesamten benötigten Speicher.
  • Wenn einer dieser Prozesse beendet wird und den verwendeten Speicher freigibt, kann dieser Raum durch einen Prozess gleicher oder kleinerer Abmessungen verwendet werden.
  • Dieser Speicher wird in kleine Räume fragmentiert, die nicht groß genug sind, um sie den bereitstehenden Prozessen zuzuweisen.
  • Die Summe dieser Fragmente ergibt einen Raum, der zwar nutzbar wäre, aber nicht zusammenhängend verfügbar ist (externe Fragmentierung).

Strategien zur Speicherzuweisung und Optimierung

Platzierungsstrategien ("Placement Strategies")

Diese Algorithmen bestimmen, wo ein neuer Prozess im Speicher platziert werden soll:

  1. Erster Satz (First Fit): Ordnet den ersten Raum zu, der größer ist als die gewünschte Größe.
  2. Best Fit: Ordnet den Raum zu, dessen Größe die kleinste ist, die den benötigten Betrag überschreitet.
  3. Worst Fit: Ordnet den größten Raum zu, dessen Größe den benötigten Betrag überschreitet.
  4. Die folgende Einstellung (Next Fit): Ist ähnlich wie First Fit, mit dem Unterschied, dass ein Hinweis darauf gespeichert wird, wo der letzte Platz zugewiesen wurde, um die nächste Suche von dort aus zu starten.
  5. Quick Fit: Separate verkettete Listen werden je nach Größe der Löcher verwaltet, so dass die Suche nach einem Raum für Prozesse in der Warteschlange schneller wird.

Speicherverdichtung (Compaction)

Die Form der Streitbeilegung (der externen Fragmentierung) kann die Verdichtung des Speichers (Compaction) sein.

Compaction vereint alle freien Speicherblöcke zu einer einzigen zusammenhängenden Partition, indem Prozesse verschoben werden, sodass die Freiflächen in einem Block zusammenhängend links liegen.

Überlegungen zur Compaction

  • Optimierung der Verdichtung erfordert intelligentere Algorithmen.
  • Swapping kann kombiniert werden, um dynamisch verteilte Räume zu erzeugen.
  • Es wird Unterstützung für dynamische Programmverschiebung benötigt:
    • Verschieben der Blöcke.
    • Anpassen der Basis- und Begrenzungsregister.

Swapping (Speicheraustausch)

Die Technik, ein Verfahren vorübergehend in den Sekundärspeicher zu verlagern, wird als Swapping bezeichnet. Der Speicherplatz auf der Festplatte, in dem es gespeichert wird, wird als Hintergrundspeicher oder Austauschzone (Swap Area) bezeichnet.

Ein Prozess wird vorübergehend ausgelagert (Swap-out), weil mehr Platz benötigt wird oder ein Prozess mit höherer Priorität eintrifft.

  • Wenn der Prozess aus dem Speicher entfernt wird, spricht man von Swap-out.
  • Wenn er wieder in den Speicher geladen wird, spricht man von Swap-in.

In einem System mit statischen Partitionen wird die Anzahl der Prozesse im fertigen Zustand wahrscheinlich durch die Anzahl der Partitionen bestimmt.

In dynamischen Partitionen wird dies durch die Größe des Hauptspeichers und den Umfang der Prozesse bestimmt, da bei beiden Methoden ein Prozess bis zum Ende in einer Partition verbleibt.

Adressierung und Bindung

Adressbindung (Binding)

Bindung bezeichnet den Zeitpunkt, an dem eine logische Adresse in eine physikalische Adresse übersetzt wird.

Ein Prozess kann logisch oder physikalisch verschiebbar sein.

  • Logische Adresse: Ein Verweis auf eine Speicherstelle, unabhängig von der aktuellen Zuordnung der Daten im Speicher. Sie muss in eine physikalische Adresse übersetzt werden.
  • Relative Adresse: Die Adresse wird als eine Position relativ zu einem bekannten Punkt im Speicher ausgedrückt (oft beginnend bei Adresse Null).
  • Physikalische Adresse: Die absolute Adresse oder der tatsächliche Ort im Hauptspeicher.

Angrenzende und nicht angrenzende Speicherzuordnung

  • Angrenzende Speicherzuordnung: Ein Prozess befindet sich in seiner Gesamtheit in aufeinanderfolgenden Speicherpositionen.
  • Nicht angrenzende Speicherzuordnung: Ein Prozess kann in Blöcke aufgeteilt werden, und diese Blöcke können an nicht in unmittelbarer Nähe liegenden Positionen im Hauptspeicher platziert werden.

Monoprogrammierung vs. Multiprogrammierung

In Monoprogrammierungssystemen gibt es nur einen Benutzerprozess, in dem sich alle Ressourcen des PCs befinden.

Im Allgemeinen bieten Single-User-Betriebssysteme (Monoprogrammierung) keinen Speicherschutz.

Der einzige Benutzerprozess, der im Speicher vorhanden ist, könnte Speicherplätze belegen, die dem Betriebssystem gehören.

Die Lösung wird durch den Schutz mittels des in der CPU integrierten Grenzwertregisters (Limit Register) erreicht. Die Hardware überprüft zur Laufzeit, dass die vom Benutzer generierte Adresse den Wert des Begrenzungsregisters nicht überschreitet.

Multiprogrammierung: Der Speicher muss von mehreren Prozessen gemeinsam genutzt werden, um eine stärkere Nutzung der Computerressourcen zu erreichen. Der Schutz muss erweitert werden, um die Speicherbereiche zwischen den Prozessen zu schützen.

Multiprogramm-Systeme machen die Speicherverwaltung wesentlich komplizierter, da eine Strichliste der von Prozessen belegten Speicherbereiche geführt werden muss. Wenn ein neuer Prozess in den Speicher gelangt, erhält er einen Bereich, der frei war.

Verwandte Einträge: