x86-Programmierung und -Betriebsarten (Teil 5)

Logische, lineare, physikalische Adressen und Paging

Durch die 32-Bit-Offset-Register und die 16-Bit-Segmentregister besitzt bereits der 80386 einen logischen Adressraum von 64 TByte je Task. Da die Basisadresse in den Segmentdeskriptoren 32 Bits breit ist, werden diese 64 TByte auf einen Adressraum mit einer Größe von maximal 4 GByte abgebildet. Die Kombination von Basisadresse eines Segments und Offsets innerhalb des Segments im Adressaddierer führt zu einer so genannten linearen Adresse. Dies bedeutet, dass die Adresse die Stelle eines Speicherobjekts in linearer Weise angibt, bei einer größeren Adresse finden Sie das Speicherobjekt auch weiter oben im Speicher.

Die Segmentnummer, das heißt der Segmentselektor, sagt dagegen hierüber nichts aus. Ein größerer Selektor kann ohne Weiteres auf ein Segment weit unten im Speicher zeigen. Die Abbildung der 64 TByte auf die 4 GByte ist möglich, da nicht alle Segmente der 64 TByte auch tatsächlich vorhanden sein müssen (P-Bit der Segmentdeskriptoren). Der Rest kann beispielsweise auf die Festplatte ausgelagert sein.

Werden alle 32 Adressleitungen benutzt, so kann diese lineare 32-Bit-Adresse in eine physikalische Adresse umgesetzt werden, die ebenfalls 32 Bits umfasst. Jeder Adresse im logischen Adressraum von 4 GByte entspricht dann ein Speicherobjekt in einem der Speicherchips.