69 - 6.2.8 Speicher: Anhang zur Speichervirtualisierung [ID:18331]
50 von 154 angezeigt

Schauen wir uns die Speichervirtualisierung noch mal etwas detailliert an und hier insbesondere

die Abbildungsfunktionen, die hier stattfinden, sprich die Operationen, die eine MMU durchführt,

aber hier weniger auf der Hardware-Ebene als stärker in Software nachgebildet. Hier haben

wir zunächst erstmal die Beschreibung eines Seitendeskripturs, der ja, wie wir schon gehört

haben, im Wesentlichen verwendet wird, um nachher eine eingerahmte reale Adresse zu generieren.

Hier als Beispiel habe ich mich orientiert an den Seitendeskriptur, wie er in x86 Prozessoren

etwa definiert ist und ich habe mal hier nur die wichtigen Attribute eines solchen Seitendeskripturs

herausgenommen. Wir gehen mal davon aus, dass so typischerweise die Seitengröße, aber eben

auch die Größe eines Seitenrahmens, 4 KB, das würden denn 12 Bits sein, die man hier

dafür verwenden würde. Diese 12 Bits sind dann relevant als Anteil innerhalb einer logischen

virtuellen Adresse. Denn sehen wir hier die Typdefinition eines solchen Seitendeskripturs.

Hier wichtig das Present-Bit. Das sagt uns etwas darüber aus, ob die Seite eben anwesend

ist im Hauptspeicher oder abwesend. Würde sie auf 1 gesetzt sein, dann hat der Present-Wert

True. Dann gehen wir mal davon aus, dass die Seite im Hauptspeicher liegen soll. Hier sind

beliebige andere Seitenattribute, die die Hardware unterstützen kann. Einen Teil davon haben wir

ja vorher schon genannt bekommen. Und dann hier eine andere wichtige Komponente, nämlich

die reale Adresse, die Seitenrahmenummer, wenn man so will, die letztendlich aussagt,

wo im realen Adressraum, wo im Hauptspeicher, denn nachher eine Seite abgelegt, platziert

ist eine Seite, die letztendlich auf diesem Seitendeskriptur hier abgebildet wird. Dann

haben wir eine Hilfsfunktion Match, die liefert ein Gegenstück zu der logischen Adresse hier

im Sinne einer realen Adresse. Sie bildet also eigentlich ab, basierend auf den Attributinformationen,

die man in dem Seitendeskriptur findet. Sie bildet eine logische oder virtuelle Adresse ab auf eine

reale Adresse, die dann nachher als Funktionsrückgabewert geliefert wird. Und das machen wir mal relativ

einfach. Wir nehmen die Seitenrahmenummer, die in dem Seitendeskriptur drin steht,

multiplizieren die mit der Seitengröße oder auch Seitenrahmengröße und dann odern wir sozusagen

nur noch die unteren 12 bits der Adresse hinzu, die als Offset praktisch durchgereicht werden.

Wir verwenden also Aadere im Wesentlichen, um den Offset, um den Versatz innerhalb einer Seite,

innerhalb des Seitenrahmens nachher zu identifizieren und nehmen die Seitenrahmennummer von dem

Seitendeskriptur, den man hier als Parameter angibt, um dann nachher aus beiden Komponenten

praktisch die reale Adresse zu generieren. Hier ist jetzt mal dargestellt, wie die Seitentabelle

ausgelegt sein kann. Das ist letztendlich ein Datentyp, wo wir denn die Basisadresse der Tabelle

dann letztendlich halt haben und dann einen Grenzwert angeben, der uns dann letztendlich

die Dimension, also die Anzahl der Elemente, die in dieser Tabelle dann drinstehen, beschreibt.

Diesen Limitwert verwenden wir dann letztendlich, um nachher eine Indexüberprüfung machen zu können.

Das ist praktisch die Nachbildung eines Base-Limit-Register-Pars, wie es in manchen

Memory-Management-Units vorhanden ist, um dann praktisch die Seitentabelle eines Prozess-Adressraums

dann eingrenzen, also einmal lokalisieren zu können mit dieser Basisadresse und dann

eingrenzen zu können. Ja, da würde jetzt hier eine Funktion bereitgestellt werden namens Probe,

die bekommt als Eingabeparameter diese Seitentabelle, ein Objekt auf diese Seitentabelle

und soll dann praktisch als Ergebnis, normalerweise wenn sie gelingt, die zu dieser logischen oder

virtuellen Adresse passende reale Adresse dann wirklich liefern. Naja, und das machen wir dann,

indem wir im ersten Schritt letztendlich in der Tabelle den Seitendeskriptur selektieren müssen.

Dazu müssen wir die Seitennummer aus der Adresse extrahieren. Das wäre dann genau die Operation,

die in der Zeile 20 stattfindet. Wir überprüfen, ob denn letztlich diese extrahierte Seitennummer,

die wir dann haben, praktisch innerhalb des Tabellengrenzwerts liegt, also letztendlich

einen gültigen Indexwert für die Seitentabelle darstellt. Und wenn das der Fall ist, nur dann,

dann liefern wir sozusagen als Ergebnis den Seitendeskriptur zurück, den man dann in Form

von anderen Funktionen, wie wir gerade auch gesehen haben, dann weiter verwenden kann.

Scheitert diese Abbildung, also stellt man fest, dass hier eine Indexwertüberschreitung ist,

dann liefert man etwas, was man als Segmentation-Fault bezeichnet. Dann ist das eindeutig so,

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

00:17:39 Min

Aufnahmedatum

2020-06-22

Hochgeladen am

2020-06-22 14:36:33

Sprache

de-DE

Tags

module programmstruktur Variablen Datentypen Preprozessor Gültigkeit
Einbetten
Wordpress FAU Plugin
iFrame
Teilen