Zitat von
Christian Seehase:
Um jetzt den ausgelagerten Prozess an eine andere physikalische Adresse zu legen müsste man, ohne Segmentregister, erst einmal alle beim Laden aufgelösten Adressen anpassen. Dies lässt sich umgehen, indem einfach die Segementregister für den Prozess auf einen neuen Wert gesetzt werden.
Schon passen die vorberechneten Werte wieder, da sie relativ zum jeweiligen Segmentregister zugreifen.
Das klingt einleuchtend. Jedoch hat die Segmentierung nichts mit der physikalischen Adresse im Speicher zu tun, dazu ist das Paging zuständig. Ich habe gerade nachgesehen: Linux zum Beispiel übersetzt eine logische Adresse zuerst über die Segmentation
Unit in eine lineare und dann über die Paging
Unit in eine physikalische Adresse. Pointer wie ebp könnten dann doch gleich eine lineare Adresse beinhalten, denn das würde einen Performancevorteil ergeben, weil die Adresse nicht zuerst noch per Segmentation in eine lineare Adresse umgewandelt werden muss. Eine zusätzliche Angabe des Registers, auf das sie sich bezieht, ist somit unnötig, zumal der gesamte adressierbare Speicher in ein Register passt und es nicht mehr -- wie auf dem 8086 -- eine zusätzliches Register für Adressierung geben muss.