Wie berechne ich die physischen Adressen aus virtuellen Adressen anhand einer Seitentabelle?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Du hast die gegebene virtuelle Adresse. Diese muss in physische Adressen umgesetzt werden.
Dafür wird die Adresse zerlegt in einen Teil, der für die Umsetzung in die physische Adresse verwendet wird, und einen Teil, der innerhalb einer Umsetzungseinheit adressiert.

Solche Umsetzungseinheiten sind z.B. Pages. Der hintere Teil der Adresse wird einfach übernommen, da das die Adresserelativ zum Anfang der Page ist.

Was man braucht ist die Startadresse der Page. Die virtuelle Startadresse erhält man aus dem vorderen Teil der virtuellen Adresse.
Diesen extrahiert man, schaut in der Umsetzungstabelle nach, auf welche physische Adresse diese abbildet und erhält die physische Adresse der Page.

Wie viele Bit der Adresse jeweils der Startadresse der Page entsprechen bzw. der Adresse innerhalb der Page, das musst du dir aus den gegebenen Infos errechnen.

Ist die Page-Größe angegeben, so sind

log_2(pagegröße)

Bits für die Adressiering innerhalb der Page nötigt.

Enthält die Größe der Umsetzungstabelle gegeben (wie hier) musst du errechnen, wie viele Bits es braucht, um alle Einträge darzustellen.
Das sind.

 log_2(tabellengröße)

Bits.

Im gegebenen Beispiel musst du zusätzlich noch den Offset der Tabelle rausrechnen. Dies eliegt nicht an Position 0 im Speicher, sondern an einer anderen Position.
Wenn du den 0ten Eintrag der Tabelle suchst, musst du also an Stelle

0 + Offset

lesen, um die Umsetzung zur physischen Adresse zu finden.