Unter Segmentierung versteht man bei der Speicherverwaltung in einem Betriebssystem die Unterteilung des benutzten Speicheradressraums in einzelne Segmente. Zweck der Unterteilung ist meist die Implementierung von Schutzmechanismen. Je nach Betriebssystem und unterliegender Hardware können einem Segment verschiedene Attribute zugewiesen werden. So können beispielsweise Programm-, Daten- und Stack-Segmente festgelegt werden. Die jeweilige Speicherwaltung sorgt dann unter anderem dafür, dass aus dem Programmsegment nur Befehle aber keine Daten gelesen werden, oder dass Daten im Datensegment nicht als Befehle interpretiert werden. Oft ist es auch möglich Segmenten Privilegierungsebenen zuzuweisen, sodass die entsprechenden Segmente nur von Programmen der gleichen oder einer höheren Privilegierungsebene zugegriffen werden können. Man kann so zum Beispiel Betriebsystemdaten und -befehle vor Zugriff durch andere Programme schützen. Häufig kann auch die Zugriffsart (zum Beispiel nur lesen, nur schreiben, kein Zugriff) eingeschränkt werden. Manche Systeme erlauben auch Privilegierungsebenen-abhängige Zugriffsarteneinschränkung.
Segmentiert wird in der Regel der physikalische Adressraum direkt oder ein virtueller linearer Adressraum, der auf den physikalischen Adressraum abbildet. Durch die Segmentierung wird ein sogenannter logischer Adressraum gebildet. Logische Adressen sind unterteilt in einen Segmentselektor und ein Offset. Der Segmentselektor bestimmt direkt oder indirekt, über eine Segmentverwaltungstabelle, das adressierte Segment und somit die Segmentanfangsadresse und -länge. Das Offset gibt, relativ zum Segmentanfang, die genaue Speicherstelle innerhalb eines Segmentes an.
Soll aus einer logischen Adresse die tatsächliche Adresse im segmentierten Adressraum bestimmt werden, wird zunächst über den Segmentselektor die Segmenteigenschaften Basis, Länge, Typ, Lese-/Schreibrechte usw. bestimmt. Danach wird anhand der ermittelten Segmenteigenschaften geprüft, ob der Speicherzugriff zulässig ist. Des Weiteren wird das Offset mit der Segmentlänge verglichen, um sicher zu stellen, dass der Zugriff innerhalb der Segmentgrenzen liegt. Schlägt eine dieser Überprüfungen fehl, wird eine Fehlerbehandlung (Interrupt, Prozessor-Exception etc.) eingeleitet. Das Offset wird zur Segmentbasis hinzuaddiert und ergibt die Zieladresse im zugrundeliegenden Adressraum. Ist der Adressraum der durch die Segmentierung segmentiert wird nicht der physische, wird die Zieladresse noch weiter umgerechnet, zum Beispiel durch die Seitenverwaltung, bis letztendlich die an den Prozessor-Adressbus anzulegende, physikalische Adresse bestimmt ist.
Die Adressumwandlung wird in modernen Computern normalerweise von Speicherverwaltungseinheiten übernommen, welche in vielen modernen Prozessoren integriert sind.
segmentierung.jpg | Segment-paging.jpg
Diese logische Adresse wird folgendermaßen in eine physische umgerechnet:
Adresse physisch = Segmentselektor logisch · 16 + Offset logisch
Im Beispiel ergibt sich für die physische Adresse:
0x2F10 · 16 + 0x87A1 = 0x2F10 · 0x10 + 0x87A1 = 0x2F100 + 0x87A1 = 0x378A1
Mit dieser Adressierung kann man die physikalische Adressbreite auf 20 Bit ausweiten, da die 16-Bit-Segmentadresse durch die Multiplikation mit 16 zu einer 20-Bit-Zahl wird, zu der noch der Offset addiert wird. Mit diesen 20 Bit können immerhin bis zu 1 MiB RAM auf einem 16-Bit-Prozessor adressiert werden. Genaugenommen können unter bestimmten Umständen durch den Übertrag bei der Addition sogar 21-Bit-Zahlen bei der Adressrechnung entstehen, es kann also etwas mehr als 1 MiB Speicher addressiert werden. Für genauere Informationen hierzu sei auf die Artikel High Memory Area und A20-Gate verwiesen.
This article is licensed under the GNU Free Documentation License.
It uses material from the
"Segmentierung (Speicherverwaltung)".
Home Page • arts • business • computers • games • health • hospitals • home • kids & teens • news • physicians • recreation• reference • regional • science • shopping • society • sports • world