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,
Presenters
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