Das sind wir schon bei der Zusammenfassung.
Ein Resümee des Stoffes von heute.
Wir haben uns mit der Platzierungsstrategie im Detail beschäftigt, also mit der Zuteilung von Arbeitsspeicher, genauer Hauptspeicher,
an entsprechende Prozessexemplare, die Einblendung von freien Speicherbereichen in den Adressräumen der Prozesse.
Nun, wie man jetzt so eine Speicherstücke denn praktisch erfassen möchte, hängt dann noch sehr stark vom Adressrahm-Modell selbst ab.
Wenn wir etwa seitenbasierte Adressräume halt haben, dann verwendet man zum Beispiel Bitkarten.
Wir können auch eine Lochliste nehmen. Die Bitkarte wäre dann schon ein bisschen effektiver.
Wenn wir segmentierte Adressräume halt haben, dann haben wir typischerweise eine Lochliste als Repräsentation zur Erfassung der Speicherstücke.
Das heißt, wir haben hier eine dynamische Datenstruktur, die es einfach doppelt sonst wie verkettert.
Wir haben vielleicht Bäume, die halt verwendet werden.
Auf jeden Fall dynamische Datenstrukturen, die auf Basis solcher segmentbasierten Herangehensweisen eine Grundlage bilden, um eine Platzierungsstrategie zu implementieren.
Nun, die Folge von all diesen strategischen Herangehensweisen, um freien Speicher zu verwalten, ist eben die interne und die externe Fragmentierung.
Da kann man nun machen, was man möchte. Wofür man sich entscheidet, entscheidet man sich für den ersten Fall die Seiten.
Dann haben wir die interne Fragmentierung, entscheidet man sich für den segmentierten Ansatz.
Dann kriegen wir garantiert die externe Fragmentierung als Problem.
Das sind dann immer entweder zu viel zugeteilte oder denn eigentlich nicht mehr nutzbare Bereiche von freien Speicher im Hauptspeicher,
wo denn praktisch gewisse Probleme mitgegeben sind.
Wenn die zu viel zugeteilt worden sind, die Speicherbereiche, das aber für den Prozess vielleicht gar nicht intendiert gewesen ist,
dann kann er dennoch Adressen generieren, die sich auf diese zu viel zugeteilten Bereiche beziehen.
Und die würden denn von der Adressraum-Hardware etwa nicht als illegale Zugriffe denn erkannt werden können.
Wohin gehen wir bei der externe Fragmentierung einfach nicht mehr nutzbare Bereiche haben.
Da wüssten wir denn, dass kein Loch existiert für die gegebenen Speicheranforderungen.
Und das kann für alle weiteren Speicheranforderungen eben auch zu gelten, weil die alle mit zu großen Blöcken arbeiten wollen, die Prozesse.
Aber wir finden unten im Hauptspeicher kein zusammenhängend großes Loch, um so nur eine Einzige von diesen Anforderungen nachfüllen zu können.
Das ist vielleicht so das größere Problem, das wir halt haben, betrifft sämtliche Maschinenprogramme, das gesamte Rechensystem.
Und da muss man dann halt irgendwie den Schuhen auflösen.
So, diese Zuteilungsverfahren verwalten Löcher, die nach der Größe oder nach der Adresse entsprechend sortiert sind.
Wir könnten die Liste nach einer abnehmenden Größe letztendlich sortieren.
Das war das worst fit. Wir könnten nach einer ansteigenden Größe sortieren. Best fit oder Buddy etwa.
Oder wir nehmen die Adresse als Sortierkriterien, die Adresse eines Lochs.
Und dann würde die ansteigende Adresse sozusagen in den Lochlisten dann entsprechend relevant sein.
Und das haben wir bei first fit und bei next fit Verfahren.
Nun der Speicherverschnitt, den wir haben. Je nachdem, welche Variante wir wählen, den sollte man reduzieren oder idealerweise dann entsprechend auflösen.
Wir reduzieren praktisch diesen Speicherverschnitt durch Verschmelzungsmaßnahmen immer dann, wenn wir neue Löcher generieren.
Also wenn Speicher freigegeben wird oder wenn praktisch Prozessexemplare terminieren.
Die Folge davon ist, dass wir die Speicherzuteilung beschleunigen können. Wir haben kürzere Listen im Endeffekt.
Und die weitere Folge ist, wenn wir größere Löcher geschaffen haben, dass wir im Mittel sozusagen dazu kommen würden,
dass eine Speicherzuteilung, eine Anfrage für neuen Speicher gelingen würde.
Das ist also erfolgreicher. Die Kompaktifizierung dient der kompletten Auflösung der externen Fragmentierung.
Im Idealfall wollen wir ein gesamtes großes Loch haben.
Wann man mit dem Kompaktifizieren aber stoppt, hängt auch wirklich mit der Berechnungskomplexität zusammen,
um dann sozusagen das Optimum aus dem System dann halt herausholen zu können.
Vielleicht stoppt man nach einer gewissen Anzahl von Kopiervorgängen und hat dann zwar viele größere, sehr große Löcher geschaffen,
aber nicht ein einzelnes Loch, aber man stoppt einfach deshalb früher, damit man das System nicht so lange inaktiv lässt.
Also es ist so ein Trade-off, den man da hat.
Hängt auch sehr stark von der Last ab, die in dem Rechensystem dann halt existiert.
Aber ein wichtiger Punkt ist, dass wir von der Positionsunabhängigkeit von Programmen ausgehen müssen,
was durch logische Adressräume praktisch gegeben ist.
Es gibt aber auch andere Techniken, wo man positionsunabhängigen Code, den letztendlich verwenden kann, um seine Programme zu generieren,
wo wir dann halt auch Programme, die immer noch im realen Adressraum nur ausführbar sind,
Presenters
Zugänglich über
Offener Zugang
Dauer
00:06:40 Min
Aufnahmedatum
2021-01-12
Hochgeladen am
2021-01-12 11:38:47
Sprache
de-DE