Speicherfragmentierung tritt auf, wenn ein System technisch freien Speicher enthält, den der Computer jedoch nicht nutzen kann. Der Speicherzuordner, der den benötigten Speicher verschiedenen Aufgaben zuweist, teilt und allokiert Speicherblöcke so, wie sie von Programmen benötigt werden; Wenn Daten gelöscht werden, werden weitere Speicherblöcke im System freigegeben und dem Pool des verfügbaren Speichers wieder hinzugefügt. Wenn die Aktionen des Allocators oder die Wiederherstellung von zuvor belegten Speichersegmenten dazu führen, dass Blöcke oder sogar Bytes des Speichers zu klein oder zu isoliert sind, um vom Speicherpool verwendet zu werden, ist eine Fragmentierung aufgetreten. Die Fragmentierung kann den freien Speicher eines Computers erheblich beanspruchen und ist oft die Ursache für frustrierende Fehlermeldungen wegen unzureichenden Speichers.
Interne Fragmentierung
Interne Fragmentierung tritt auf, wenn der Speicherzuordner innerhalb eines Speicherblocks, der einem Client zugewiesen wurde, zusätzlichen Platz leer lässt. Dies geschieht normalerweise, weil das Design des Prozessors vorschreibt, dass der Speicher in Blöcke bestimmter Größe geschnitten werden muss – zum Beispiel können Blöcke gleichmäßig durch vier, acht oder 16 Byte geteilt werden. In diesem Fall kann einem Client, der beispielsweise 57 Byte Speicher benötigt, ein Block zugewiesen werden, der 60 oder sogar 64 Byte enthält. Die zusätzlichen Byte, die der Client nicht benötigt, werden verschwendet, und im Laufe der Zeit werden diese winzigen Brocken ungenutzten Speichers können große Speichermengen aufbauen und erzeugen, die vom Allocator nicht verwendet werden können. Da sich all diese nutzlosen Bytes in größeren Speicherblöcken befinden, wird die Fragmentierung als intern betrachtet.
Externe Fragmentierung
Externe Fragmentierung tritt auf, wenn der Speicherzuordner Abschnitte von ungenutzten Speicherblöcken zwischen Teilen des zugewiesenen Speichers hinterlässt. Wenn beispielsweise mehrere Speicherblöcke in einer durchgehenden Zeile zugewiesen werden, aber einer der mittleren Blöcke in der Zeile freigegeben wird (vielleicht weil der Prozess, der diesen Speicherblock verwendet hat, nicht mehr läuft), wird der freie Block fragmentiert. Der Block steht dem Allocator später noch zur Verwendung zur Verfügung, wenn Speicherbedarf besteht, der in diesen Block passt, aber der Block ist jetzt für größere Speicheranforderungen unbrauchbar. Er kann nicht mit dem gesamten freien Speicher, der dem System zur Verfügung steht, wieder in einen Topf geworfen werden, da der gesamte Speicher zusammenhängend sein muss, damit er für größere Aufgaben verwendet werden kann. Auf diese Weise können am Ende ganze Abschnitte des freien Speichers vom Ganzen isoliert werden, die oft zu klein für eine signifikante Nutzung sind, was zu einer Gesamtreduzierung des freien Speichers führt, die im Laufe der Zeit zu einem Mangel an verfügbarem Speicher für wichtige Aufgaben führen kann.
Fragmentierung kann große Probleme für Systeme bedeuten
Fragmentierung kann zu einem Problem werden, da sie sich im Laufe der Zeit aufbaut, kleine und nutzlose Speicherblöcke erzeugt und die Menge des verfügbaren freien Speichers eines Computers begrenzt. Im weiteren Verlauf kann die Fragmentierung dazu führen, dass die Systemleistung kurzfristig langsam und träge wird. Langfristig kann die Fragmentierung die Lebensdauer eines Computers oder Servers um durchschnittlich 30 Prozent verkürzen. Von den beiden Arten der Fragmentierung ist die interne besser vorhersehbar als die externe, da die Menge des verschwendeten Speicherplatzes durch die Parameter des Speicherzuordners bestimmt wird (wie groß die zugewiesenen Blöcke sein müssen), die eine Konstante sind. Darüber hinaus ist der Gesamtspeicherverlust durch die interne Fragmentierung normalerweise geringer als der, der durch die externe Fragmentierung verloren geht, obwohl er sich allmählich ansammeln kann. Die externe Fragmentierung ist dagegen schwieriger vorherzusagen, da in den meisten Fällen mehrere Prozesse im System regelmäßig starten und stoppen und unterschiedlich lange genutzte Speicherblöcke in einer anderen Reihenfolge freigegeben werden, als sie gefüllt wurden, Lücken im verfügbaren Speicher hinterlassen.
Kampf gegen Fragmentierung für verbesserte Leistung
Wenn es um die Optimierung des Arbeitsspeichers geht, ist die einzige sinnvolle Lösung ein Neustart des Systems, der einen Großteil des Speichers löscht, der von lang laufenden Programmen verwendet wird, und dem Computer einen Neustart für die Speicherzuweisung ermöglicht. Tools, die behaupten, RAM zu defragmentieren, sind irreführend, da der virtuelle Speichermanager in modernen Computern ständig daran arbeitet, die RAM-Auslastung zu optimieren. Für Ihre Festplatte kann jedoch eine Defragmentierung erforderlich sein, um die Systemleistung zu maximieren. Wenn Sie Windows Vista oder höhere Versionen ausführen, defragmentiert das System Ihren Festplattenspeicher in regelmäßigen Abständen automatisch für Sie. Wenn Sie eine langsamere Systemleistung feststellen und den Defragmentierer selbst ausführen möchten, können Sie den Vorgang manuell starten, indem Sie auf "Start" und dann auf "Alle Programme | Zubehör | Systemprogramme | Defragmentierung" klicken. Klicken Sie abschließend auf "Jetzt defragmentieren". Der Vorgang kann Minuten bis Stunden dauern, je nachdem, wie fragmentiert Ihre Festplatte ist, aber die gute Nachricht ist, dass Sie Ihren Computer verwenden können, während die Defragmentierung ausgeführt wird.
Das Problem der Fragmentierung gilt nicht für alle Betriebssysteme gleichermaßen. Bei Mac-Computern ist eine Defragmentierung nicht erforderlich, da Mac OS X beim Schreiben von Dateien automatisch den Speicherplatz optimiert. Linux-Maschinen erfordern auch keine regelmäßige Defragmentierung, da sie den Speicher in einem verstreuten statt einem zusammenhängenden Format zuweisen, was den Dateien Raum zum Erweitern gibt. Linux-Benutzer, die einen Rückgang der Systemleistung feststellen, sollten in Betracht ziehen, die Größe ihrer Festplatte zu erhöhen. Schließlich sollten Sie niemals ein Solid-State-Speicherlaufwerk (z. B. ein USB-Laufwerk) defragmentieren, da eine Defragmentierung die Nutzungsdauer von Solid-State-Laufwerken tatsächlich verkürzen kann.