Privacy Policy Cookie Policy Terms and Conditions Segmentierung (Speicherverwaltung) - Wikipedia

Segmentierung (Speicherverwaltung)

aus Wikipedia, der freien Enzyklopädie

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.

Inhaltsverzeichnis

[Bearbeiten] Speicheradressierung bei der Segmentierung

Ein Segment wird über zwei Werte definiert:

  1. Segmentanfangsadresse, Segmentbasis oder Basis: die erste im Segment enthaltene Speicheradresse
  2. Segmentlänge, Segmentlimit oder Limit: die Zahl der aufeinanderfolgenden Speicheradressen die das Segment umfasst.

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 mit Segmentverwaltungstabelle
vergrößern
Segmentierung mit Segmentverwaltungstabelle
kombinierte Segment- und Seitenverwaltung
vergrößern
kombinierte Segment- und Seitenverwaltung

[Bearbeiten] Beispiele

[Bearbeiten] Intels x86er im Real-Mode

Beim 8086-Prozessor und neueren x86ern im Real-Mode wird die Segmentanfangsadresse direkt aus dem Segmentselektor der logischen Adresse berechnet. Alle Segmente haben die feste Länge von 64 KB. Eine logische Adresse wird in Real-Mode-Programmen meist so geschrieben: Segment:Offset, wobei Segment und Offset 16-Bit-Zahlen sind und in der Regel im Hexadezimalsystem angegeben werden, also zum Beispiel: 2F10:87A1.

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.

[Bearbeiten] Intels x86er im Protected-Mode

Ab Intels 80286-Prozessor wurde der sogenannte Protected-Mode eingeführt. Hier können Segmente zwischen einem Byte und 4Gigabytes lang sein und an beliebigen Byte-Positionen im physikalischen oder linearen Adressraum beginnen. Jedes Segment wird durch eine spezielle Datenstruktur, Segmentdeskriptor genannt, beschrieben. Neben der Segmentbasisadresse und der Segmentlänge enthält ein Segmentdeskriptor auch Informationen über Segmentattribute wie Segmenttyp, Privilegierungsebene und Lese-/Schreibrechte. Segmentdeskriptoren werden aus im Arbeitsspeicher liegenden Deskriptortabellen gelesen. Diese Tabellen werden vom Betriebssystem aufgebaut und verwaltet. Der Segmentselektor einer logischen Adresse gibt die Deskriptortabelle und den Index eines Segmentdeskriptors innerhalb der Tabelle an. Aus dem gewählten Segmentdeskriptor werden dann die zur Adressberechnung nötigen Daten ausgelesen.

[Bearbeiten] Geschichte

Die Segmentierung war früher die einzige Möglichkeit, mehr Speicher zu adressieren als Adressleitungen zur Verfügung standen. Auch zur Auslagerung von ganzen Prozessen und für den Speicherschutz wurde Segmentierung eingesetzt. Durch leistungsfähigere Prozessoren wurde es aber durch das Paging zu Segmentierung mit Seitenadressierung (segmentation with paging) erweitert, das eine feinkörnigere und flexiblere Verwaltung des Speichers ermöglichte. Auf den neuen 64-Bit Prozessoren der x86-Reihe wurde die Segmentierung im 64-Bit Modus nahezu abgeschafft.

Andere Sprachen
THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu