Segmentdeskriptor - Segment descriptor
Bei der Speicheradressierung für Intel x86- Computerarchitekturen sind Segmentdeskriptoren Teil der Segmentierungseinheit, die zum Übersetzen einer logischen Adresse in eine lineare Adresse verwendet wird. Segmentdeskriptoren beschreiben das Speichersegment, auf das in der logischen Adresse Bezug genommen wird. Der Segmentdeskriptor (8 Byte lang in 80286 und höher) enthält die folgenden Felder:
- Eine Segmentbasisadresse
- Das Segmentlimit, das die Segmentgröße angibt
- Zugriffsrechtsbyte mit den Informationen zum Schutzmechanismus
- Steuerbits
Struktur
Der x86- und x86-64-Segmentdeskriptor hat die folgende Form:
31 | - - | 24 | 23 | 22 | 21 | 20 | 19 | - - | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | - - | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Basisadresse [31:24] | G | D / B. | L. | AVL | Segmentlimit [19:16] | P. | DPL | 1 | Art | C / E. | R / W. | EIN | Basisadresse [23:16] | |||||||
Basisadresse [15: 0] | Segmentlimit [15: 0] |
Wo die Felder stehen für:
- Basisadresse
- 32-Bit-Startspeicheradresse des Segments
- Segmentlimit
- 20 Bit Länge des Segments. (Insbesondere die Adresse der zuletzt zugänglichen Daten, sodass die Länge um eins höher ist als der hier gespeicherte Wert.) Wie genau dies interpretiert werden soll, hängt von anderen Bits des Segmentdeskriptors ab.
- G = Granularität
- Wenn dies klar ist, wird der Grenzwert in Byteeinheiten mit maximal 2 bis 20 Byte angegeben. Wenn festgelegt, liegt das Limit in Einheiten von 4096-Byte-Seiten für maximal 2 32 Byte.
- D = Standardoperandengröße
- Wenn dies klar ist, handelt es sich um ein 16-Bit-Codesegment. Wenn gesetzt, ist dies ein 32-Bit-Segment.
- B = groß
- Wenn festgelegt, wird die maximale Versatzgröße für ein Datensegment auf 32-Bit 0xffffffff erhöht. Ansonsten ist es das 16-Bit-Maximum 0x0000ffff. Im Wesentlichen die gleiche Bedeutung wie "D".
- L = lang
- Wenn gesetzt, ist dies ein 64-Bit-Segment (und D muss Null sein), und der Code in diesem Segment verwendet die 64-Bit-Befehlscodierung. "L" kann nicht gleichzeitig mit "D" oder "B" eingestellt werden.
- AVL = Verfügbar
- Für die Verwendung mit Software, nicht von Hardware verwendet
- P = vorhanden
- Wenn diese Option deaktiviert ist, wird für jeden Verweis auf dieses Segment eine Ausnahme "Segment nicht vorhanden" generiert
- DPL = Deskriptor-Berechtigungsstufe
- Berechtigungsstufe (Ring) erforderlich, um auf diesen Deskriptor zuzugreifen
- Art
- Wenn gesetzt, ist dies ein Codesegmentdeskriptor. Wenn klar, ist dies ein Daten- / Stapelsegmentdeskriptor, bei dem "D" durch "B", "C" durch "E" und "R" durch "W" ersetzt sind. Dies ist in der Tat ein Sonderfall des 2-Bit-Typfelds, in dem das vorhergehende Bit 12, das als "0" gelöscht wurde, auf mehr interne Systemdeskriptoren für LDT, LSS und Gates verweist.
- C = konform
- Code in diesem Segment kann von weniger privilegierten Ebenen aufgerufen werden.
- E = Expand-Down
- Wenn diese Option deaktiviert ist, wird das Segment von der Basisadresse bis zur Basis + Grenze erweitert. Wenn diese Option aktiviert ist, wird sie vom maximalen Versatz bis zum Grenzwert erweitert, ein Verhalten, das normalerweise für Stapel verwendet wird.
- R = Lesbar
- Wenn dies klar ist, kann das Segment ausgeführt, aber nicht gelesen werden.
- W = Beschreibbar
- Wenn dies klar ist, kann das Datensegment gelesen, aber nicht beschrieben werden.
- A = Zugriff
- Dieses Bit wird von der Hardware beim Zugriff auf das Segment auf 1 gesetzt und von der Software gelöscht.
Siehe auch
Verweise
- Tabak, Daniel. Erweiterte Mikroprozessoren . McGraw Hill und Co.
- Hall, Douglas. Mikroprozessoren und Schnittstellen . McGraw Hill Publications.
Weiterführende Literatur
- Robert R. Collins (August 1998). "Der Segmentdeskriptor-Cache" . Dr. Dobbs Tagebuch .
Externe Links