WikiDer > Speicherverwaltung

Geheugenbeheer

Speicherverwaltung ist ein Paradigma Bei der Computerprogrammierung von Computer Programms. Es ist eine der wichtigsten Aktivitäten im Rahmen des Betriebs von a Computer die auf allen Ebenen von der Hardware bis zur Anwendungssoftware zurückkommt.

Einführung

Bei der theoretischen Gestaltung eines Programms wird häufig ein Modell verwendet, bei dem unendlich viele Erinnerung ist verfügbar und es können unendlich viele Variablen nebeneinander angelegt werden. Ebenfalls höhere Programmiersprachen bieten dem Programmierer a Berechenbarkeitsmodell in dem er sich nicht um die Platzierung von Variablen und Datenstrukturen im Speicher kümmern muss.

Es Speicher eines Computers ist jedoch ein endlicher "String"-Byte. Wenn für eine bestimmte Aufgabe im Computer Speicher benötigt wird, muss ein Teil dieser Zeichenfolge zugewiesen werden. Im Idealfall sollte es möglich sein, dass ein ununterbrochener Teilstring beliebiger Länge zu jedem beliebigen Zeitpunkt abrufbar ist.

Ein gutes Speichermanagement organisiert den Speicher so, dass dieser Wunsch bestmöglich erfüllt werden kann. Offensichtlich sollte die Speicherverwaltung selbst so wenig Speicher wie möglich benötigen und die Speicherverwaltung sollte so ausgelegt sein, dass das Anfordern und Freigeben von Speicher schnell und effizient erfolgen kann.

Diese Anforderungen sind in vielerlei Hinsicht widersprüchlich. Beispielsweise ist es für die Geschwindigkeit der Speicherverwaltung von Vorteil, wenn mehr Speicherplatz für die Verwaltung verwendet werden kann. Wenn jedoch ein relativ großer Prozentsatz des Speichers für seine Verwaltung verwendet wird, bleibt nur noch wenig Platz, um etwas Nützliches damit zu tun.

Fragmentierung.png

Eine große Gefahr bei der Speicherverwaltung ist die Speicherfragmentierung. Wenn beispielsweise Speicherblöcke im gesamten Speicher gleichmäßig verteilt zugewiesen werden, wird es unmöglich, einen weiteren zusammenhängenden Speicherbereich mit einer größeren Größe als diesem Abstand zu finden. Fragmentierung tritt auf, weil Speicher nicht unbedingt in derselben Reihenfolge freigegeben wird, in der er zugewiesen wird.

Speicherverwaltung auf Hardwareebene

Wenn eine Festplatte fragmentiert ist. Dies bedeutet, dass eine Datei aus 2 oder mehr Fragmenten besteht und auf der Festplatte abgelegt wurde. Eine normale Datei befindet sich an einer Stelle auf der Festplatte, eine fragmentierte Datei jedoch an zwei Stellen auf der Festplatte. Daher muss die Datei beim Öffnen an 2 Stellen auf der Festplatte aus dem Cluster gelesen werden. Dies dauert länger und macht Ihren Computer langsam. Was Sie dagegen tun können, ist die Festplatte zu defragmentieren. Dann werden diese Fragmente, die sich an verschiedenen Stellen befinden, an einer Stelle auf der Festplatte abgelegt. Dies erleichtert das Lesen und macht Ihren Computer schneller. Dieses Programm ist auf jedem Microsoft Windows-Computer verfügbar. Diese finden Sie, indem Sie mit der rechten Maustaste auf eine Partition klicken und dann zusätzliche Optionen auswählen. Dann können Sie Ihr Laufwerk defragmentieren. Weitere Informationen finden Sie auf der Seite Defragmentierung

Speicherverwaltung auf Betriebssystemebene

Das Betriebssystem eines Computers ist dafür verantwortlich, auf Speicheranforderungen von Programmen zu reagieren. Sie bestimmt vom gesamten physikalischen Speicher, welcher Teil welchem ​​Programm zugeordnet ist. Darüber hinaus verwaltet das Betriebssystem virtueller Speicher. Dadurch wird ein nicht verwendeter Teil eines Programms auf der Festplatte gespeichert, wodurch Speicherplatz für die Verwendung durch andere Programme freigegeben wird. Heutzutage erfolgt diese Speicherverwaltung meist nach dem Prinzip von Speicher-Paginierung Reduzierung des Fragmentierungsproblems. Oftmals ist es jedoch erforderlich, zusammenhängende Speicherteile für beispielsweise Hardware-Puffer anfordern zu können, weshalb das Problem auch heute noch besteht.

Speicherverwaltung auf Anwendungsebene

Um zu funktionieren, bauen Computerprogramme ständig Datenstrukturen auf und abbauen sie. Datenstrukturen verwenden Speicher und daher ändert sich die benötigte Speichermenge ständig. Das Aufrufen des Betriebssystems für jedes Mitglied einer Datenstruktur, um ihm Speicher zuzuweisen, ist zu ineffizient.

Stattdessen fordern Programme Speicher in großen Blöcken vom Betriebssystem an und verteilen ihn weiter. Diese Chunks bilden somit wiederum Byteketten, die gemäß der Speicherverwaltung des Anwendungsprogramms verwaltet werden.

Die Speicherverwaltung auf Anwendungsebene kann in zwei Kategorien unterteilt werden:

  • Manuelle Speicherverwaltung. Der Programmierer muss manuell Speicher für seine Datenstrukturen anfordern und wieder freigeben, sobald er nicht mehr benötigt wird.
  • Automatische Speicherverwaltung. Eine Datenstruktur verwendet Speicher, sobald sie erstellt wird. Dieser Speicher bleibt solange belegt, bis ein sogenannter Müllsammler findet ungenutzten Speicher und gibt ihn frei.

Die automatische Speicherverwaltung ist derzeit (2005) beliebt, da sich der Programmierer weniger um den Speicher kümmern muss. Müllsammler sind traditionell dafür bekannt, langsam zu sein und können ein Programm jederzeit unterbrechen. Der Speicherverbrauch eines Programms mit automatischer Speicherverwaltung hängt davon ab, wie oft der Garbage Collector seine Arbeit erledigt. Häufig werden bei diesen Programmtypen große, ungenutzte Speicherbereiche verwendet.

Moderne Garbage-Collector-Techniken haben diese Einwände jedoch bereits weitgehend überwunden und es ist nun klar, dass automatische Speicherverwaltungstechniken keine Verschlechterung der algorithmischen Komplexität bedeuten müssen. Es gibt auch hier und da Berichte, dass die automatische Speicherverwaltung noch schneller sein kann als die manuelle Speicherverwaltung.

Bisher wurde nur ein Teil davon in die Praxis umgesetzt; Programmiersprachen mit manueller Speicherverwaltung wie C und Pascal behalten Sie vorerst einen Dichte- und Geschwindigkeitsunterschied im Vergleich zu den Sprachen mit automatischer Speicherverwaltung wie z Java und C♯. Sie bieten dem Endbenutzer kompaktere Programme, die weniger in das System eingreifen. Dies ist wahrscheinlich der Hauptgrund, warum eine vollständige Umstellung auf automatische Speicherverwaltung noch nicht ansteht.