Adressraum
# Adressraum

Als Adressraum wird eine Menge von Adressen bezeichnet, die sich jede einheitlich und (innerhalb des Adressraums) eindeutig ansprechen (adressieren) lässt.

## Beispiele

Beispiele für Adressräume sind die Menge aller:
* Rufnummern – zum Beispiel der deutsche Adressraum beginnend mit +49
* IP-Adressen – zum Beispiel der IPv4-Adressraum von 0.0.0.0 bis 255.255.255.255
* adressierbaren Speicheradressen in einem Rechner (s. u.)
* E-Mail-Adressen einer Domain – zum Beispiel alle local-parts @de.wikipedia.org
* Domain Name System/FQDN

## Adressraum in der Informationstechnologie

Der Arbeitsspeicher in Computern wird mit Hilfe von Adressen verwaltet und angesprochen. In modernen Computern gibt es dabei aber nicht nur einen einzigen Adressraum, vielmehr sind häufig Speicherverwaltungsmechanismen zuschaltbar, die es ermöglichen, verschiedene Adressräume zu benutzen. Die Abbildung der Adressen eines Adressraums auf die jeweiligen Speicherzellen wird von der Speicherverwaltung übernommen. Diese Abbildung kann auch mehrstufig geschehen, so dass Adresse $a$ aus Adressraum $A$ auf Adresse $b$ des Adressraumes $B$ abgebildet wird, und erst die Adresse $b$ wird dann auf die Adresse der anzusprechenden Speicherzelle abgebildet. Des Weiteren kann sich die Adressumsetzung während der Laufzeit ändern, wodurch ein und derselben Adresse eines Adressraums zu verschiedenen Zeitpunkten verschiedene Speicherzellen zugeordnet sein können.

### Gebräuchliche Speicheradressräume

In modernen Computersystemen werden u. a. folgende Speicheradressräume angewendet:

#### Physischer Adressraum

    Der physische Adressraum oder Speicherraum ist die Menge aller durch einen Prozessor ansprechbaren Speicheradressen. Die Größe dieses Adressraumes wird durch die Zahl der Adressleitungen des Prozessors oder der Speicherverwaltung (MMU) begrenzt.
    Der physische Adressraum wird in der Regel nicht einfach auf den vorhandenen Arbeitsspeicher abgebildet („gemappt“). Bestimmte Adressbereiche sind für spezielle Verwendungszwecke reserviert, sie dienen der Kommunikation mit Hardwarekomponenten (zum Beispiel die AGP-Apertur zur Kommunikation mit der Grafikkarte) oder dem Zugriff auf nichtflüchtigen Speicher (zum Beispiel Flash-ROMs, die das BIOS enthalten). Der im System verfügbare Arbeitsspeicher (RAM) wird über Adressbereiche zwischen den reservierten Bereichen angesprochen. Dadurch ist der vorhandene Arbeitsspeicher mancher Systeme nicht über einen einzigen, zusammenhängenden und an der ersten physischen Adresse beginnenden Adressbereich ansprechbar. Abhängig von der Systemspeicheraustattung sind Teile des physischen Adressraums nicht zugeordnet, also unbenutzbar.
    Um den physischen Adressraum zu erweitern, hat man früher Bank Switching in Form von Erweiterungen wie etwa EMS verwendet.
    Neben dem Arbeits- und Programmspeicher ist auch noch der I/O-Adressraum wichtig, der je nach Computersystem als Memory Mapped I/O oder als Isolated I/O ausgeführt sein kann.

#### Linearer Adressraum

    Bei modernen Prozessoren können Betriebssystem und MMU in Zusammenarbeit einen virtuellen von der ersten bis zur letzten linearen Adresse zusammenhängenden Adressraum bilden. Dies geschieht mittels sogenannter Seitenverwaltung. Sie ermöglicht einen linearen Adressraum, der größer sein kann als die Menge der real im System vorhandenen Arbeitsspeicherzellen. Je nach Prozessor und dessen MMU kann der lineare Adressraum sogar größer sein als der physische Adressraum (zum Beispiel beim PowerPC).
    Wird keine Seitenverwaltung unterstützt oder ist sie abgeschaltet, sind physischer und linearer Adressraum identisch.

#### Logischer Adressraum

    Mit Hilfe von Segmentierung teilen Betriebssystem und MMU den linearen oder (direkt) den physischen Adressraum in Segmente und bilden somit den logischen Adressraum. Logische Adressen bestehen aus zwei Teilen, einer Segmentadresse und einem Offset. Die Segmentadresse gibt an, aus welchem Segment des linearen Adressraums eine Adresse angesprochen werden soll. Der Offset adressiert, relativ zum Segmentanfang, die Speicherstelle innerhalb des Segments, die angesprochen werden soll. Ist nur der Offset angegeben, ist meist das aktuelle Segment gemeint („implizite Adressierung“).
    Ist die Speichersegmentierung nicht vorhanden oder deaktiviert, sind logischer und linearer Adressraum identisch.

### Aktuellere Betriebssysteme

In Desktop- oder Serverbetriebssystemen wie Microsoft Windows (ab Windows NT), Solaris oder Linux (ab Kernelversion 2.6) werden, außer während des Systembootvorgangs, durchgängig lineare Adressräume benutzt. Da auf x86er Prozessoren im 32-Bit-Protected-Modus die Segmentierung nicht abschaltbar ist, wird hier ein stark vereinfachter logischer Adressraum benutzt, bei dem sich Programm-, Daten- und Stacksegment über den gesamten linearen Adressraum erstrecken, beginnend an der kleinsten linearen Adresse. Somit findet auch hier effektiv keine Segmentierung statt und Offset und lineare Adresse sind identisch.

### Ältere Betriebssysteme

Einfache Computersysteme (8-Bit-Computer der 1970er und 1980er Jahre, heute nur noch die Mikrocontroller des untersten Preissegments) unterstützen meist gar keine echte Speicherverwaltung; dort sind alle drei genannten Adressräume identisch. Die 16-Bit-Betriebssysteme der MS-DOS-Familie verwendeten nur Segmentierung als Form der Speicherverwaltung; hier sind physischer und linearer Adressraum identisch, der logische Adressraum weicht ab. Das Gleiche gilt für frühe Versionen von Microsoft Windows. MS-Windows-Versionen der 1990er Jahre (Windows 3.x, Windows 9x) verwendeten eine komplexe Kombination von Segmentierung und Seitenverwaltung; hier unterscheiden sich in vielen Situationen alle drei genannten Adressräume voneinander.