Speicheradresse
# Speicheradresse

Speicheradressen dienen zur eindeutigen Bezeichnung von Speicherzellen im Hauptspeicher eines Computers. Sie werden beim Speicherzugriff verwendet, um den genauen Ort zu benennen, auf den der Zugriff erfolgt. Die Spezifika der Adressierung hängen jeweils von der konkreten Hardware ab und sind nicht standardisiert.

Speicheradressen beginnen typischerweise bei Null und werden i. d. R. aufsteigend und fortlaufend durchnummeriert. Sie werden meist als vorzeichenlose Integer-Zahl und in hexadezimaler Schreibweise angegeben.

## Logische und physische Adressen

Man unterscheidet:

* logische und
* physische Speicheradressen.

Die logische Adresse ist die, die ein Programm „sieht“. Durch die Memory Management Unit werden diese logischen Adressen auf physische Adressen abgebildet. Diese Abbildung ist im Allgemeinen für jeden Prozess unterschiedlich und für den Prozess transparent. Damit ist es möglich, dass mehrere Prozesse die gleichen logischen Adressen verwenden, aber dabei auf unterschiedliche physische Adressen zugreifen.

Auch ist es möglich, einem Prozess mehr logischen Speicher zuzuteilen, als physisch vorhanden ist. Beim Zugriff auf die physisch nicht vorhandenen Speicherbereiche löst die CPU automatisch eine Ausnahme aus, welche vom Betriebssystem abgefangen wird. Das Betriebssystem kann dann zusätzlichen Speicher bereitstellen, indem es beispielsweise andere Speicherbereiche auf die Festplatte auslagert. Diese Technik wird Virtuelle Speicherverwaltung genannt.

Bestimmte physische Adressbereiche können aber in mehreren Prozessen im logischen Adressraum eingeblendet werden. Diese Technik wird auch Shared Memory genannt und ist eine Form der Interprozesskommunikation.

## Segmentierte Adressen

Eine Besonderheit stellen Speicheradressen dar, bei denen zu einer Basisadresse ein Versatz in Form eines ganzzahligen Wertes – auch Offset genannt – addiert wird.

* Bei der Segmentierung im Real Mode der x86-Prozessorfamilie wird eine Speicherstelle angegeben nach dem Schema Segment:Offset. Die echte Adresse lässt sich berechnen als:

       $\mathrm {Adresse=\underbrace {(Segmentnummer\cdot 16)} _{Segmentadresse}+Offset}$
* Im Protected Mode lässt sich die Startadresse des Segmentes aus dem Segment selector ermitteln. Zu dieser Segmentstartadresse wird dann der Offset addiert, um eine lineare logische Speicheradresse zu erhalten.
