Nun bei den Verfahrensweisen haben wir ja gesehen, dass so was wie Speicherverschnitt
auftreten kann. Also es bleiben Reste übrig und die Frage ist, ob denn diese Reste überhaupt
verwertbar sind und wenn sie nicht verwertbar sind, wie problematisch denn das wäre und wenn
man das als ein Problem halt aufpasst, welche Lösung man sozusagen da halt hat. Das bringt uns eben zu
dem allgemeinen Konzept des Speicherverschnitts und da werden wir im ersten Teil mal auf die
Fragmentierung an sich, den Verschnitt, wie er entsteht, nochmal eingehen und dann sehen wir
zwei Techniken, Verschmelzung und Kompaktifizierung, die dazu helfen, einmal die Fragmentierung zu
minimieren oder sie auch komplett aufzulösen, indem man kompaktifiziert. Da war dazu dann später mehr.
Nun, es geht um eine Bruchstückbildung. Verschnitt ist eigentlich immer ein Speicher, der zu viel
zugeteilt worden ist und möglicherweise dadurch auch nicht nutzbar ist, weil er wurde ja nicht
angefordert in der Größe, wie er denn zugeteilt wurde. Das ist die eine Sicht. Man kann es denn so
sehen, dass eben dieser nicht nutzbare Bereich, das was zu viel zugeteilt worden ist, als Abfall
letztendlich in Erscheinung tritt und dass man damit auch eine gewisse Speicherverschwendung
einfach in Kauf nehmen muss in seinem System. Nun sieht diese Bruchstückbildung durchaus sehr
differenziert aus. Je nach Adressraumkonzept und je nach Zuteilungsverfahren gibt es jetzt
unterschiedliche Formen der Ausprägung dieser Fragmentierung, die halt hier existiert. Wir
sprechen von der sogenannten internen Fragmentierung, wenn wir etwa seitennummerierte
Adressräume haben oder etwa das Halbierungsverfahren. Da vergeben wir ja immer ein
Seitenvielfaches an Speicher. Die Löcher müssen dann auch entsprechend ein Seitenvielfaches von
der Größe her ausmachen. Das kann also sein, dass wir einfach eine anfordernde Größe haben,
die ist kleiner als das dann zugeteilte Stück. Das ist dann sehr offensichtlich bei der
Seitennummerierung. Das gilt aber auch bei dem Halbierungsverfahren. Und da haben wir einen
lokalen Verschnitt, denn der Bereich, der zugeteilt wird, der wird auch in diesem Adressraum des
Prozesses eingebunden. Und wenn wir jetzt seitennummerierte Adressräume haben,
da werden dann die beiden aufgrund einer Speicheranforderung, wenn die erfüllbar ist,
Vielfaches von Seiten in den Adressraum des Prozesses eingebunden. Damit sind gültige
Adressen auf Speicherbereiche, die eigentlich gar nicht angefordert worden sind. Aber die auf
Grund des Adressraumkonzepts und des Zuteilungsverfahren einfach den Prozessen zur Verfügung gestellt werden
müssen. Wir könnten hier sagen, dass Verschwendung, die eigentlich durchs Betriebssystem zumindest
nicht zu vermieden werden kann, weil es an dem Zuteilungsverfahren und dem Adressraumkonzept
dann halt liegt. Also wir müssten dann schon von Paging abgehen, um sowas wie interne
Fragmentierung vermeiden oder dem vorbeugen zu können. Wichtig, viel gravierender ist
einfach die Tatsache, dass dieser lokale Verschnitt sehr wohl nutzbar ist für den jeweils
anfordernden Prozess, obwohl er diesen Bereich in einer Seite zum Beispiel gar nicht als
Speicherbereich angefordert hat. Das kann dann dazu führen, dass man dann einfach Adressierungsfehler,
Programmierfehler einfach nicht erkennt, weil die Memory Management Unit, die dahintersteckt,
halt immer die Seitengrünse denn respektiert und alles, was innerhalb einer Seite ist,
dann letztendlich als korrekt, als eine korrekte Adresse den halt eben doch begreift. Obwohl von
einer reinen Logik her ein bestimmter Bereich, nämlich meistens dann immer zum Ende der
Seite halt hin in so einem Fall, wenn mit Verschnitt gearbeitet werden muss, eben ein
logisch nicht nutzbarer Bereich existiert. Aber diese Adresse wird vom System den nicht als
eine fehlerhafte Adresse erkannt. Demgegenüber steht die externe Fragmentierung, die haben wir
typischerweise bei segmentierten Adressräumen, aber eben auch wiederum beim Halbierungsverfahren.
Hier stellen wir fest, dass wir eine anforderte Größe einfach nicht erfüllen können, weil jedes
einzelne Loch zu klein ist. Die Summe der Größen, wenn man die Löcher sozusagen nur aufsummiert,
die würde bedeuten, dass wir damit sehr wohl der angeforderten Größe entsprechend Rechnung
tragen können. Aber der Punkt ist ja der, dass diese Löcher dann eben nicht linear hintereinander
im Hauptspeicher angefordert sind. Wenn wir einen segmentierten Adressraum haben und wir
Segmente praktisch vergeben, dann müssen die Bites der Segmente oder auch die Seiten der
Segmente linear innerhalb des Segments angeordnet sein. Nun bezogen auf den Hauptspeicher mit einem
Presenters
Zugänglich über
Offener Zugang
Dauer
00:13:17 Min
Aufnahmedatum
2021-01-12
Hochgeladen am
2021-01-12 13:19:45
Sprache
de-DE