Beschreibt den Aufbau von Segment-Descriptoren. Mehr ...
#include <machine/gdt.h>
Öffentliche Methoden | |
| constexpr | SegmentDescriptor (uint64_t val=0) |
| Konstruktor für einen konkret gegebenen Eintrag. | |
| constexpr | SegmentDescriptor (uintptr_t base, uint32_t limit, bool code, int ring, Mode mode) |
| Konstruktor für einen 16/32 Bit Code/Memory Eintrag. Mehr ... | |
Öffentliche Attribute | |
| struct { | |
| uint64_t limit_low: 16 | |
| Niederwertige 16 Bits der Segmentgröße – Wird beeinflusst von granularity! | |
| uint64_t base_low: 24 | |
| Niederwertige 24 Bits der Basisaddresse. | |
| uint64_t type: 3 | |
| enum Type segment_type: 2 | |
| Segmenttyp (beeinflusst die Bedeutung der beiden vorherigen Bits) | |
| uint64_t privilege_level: 2 | |
| Ring des Segments. | |
| bool present: 1 | |
| Valider (vorhandener) Eintrag. | |
| uint64_t limit_high: 4 | |
| Höherwertige 4 Bits der Segmentgröße. | |
| bool available: 1 | |
| Bit zur freien Verwendung. | |
| uint64_t custom: 2 | |
| Granularity granularity: 1 | |
| Setzt die Einheit, mit der der angegebene Wert für das Segmentlimit interpretiert werden soll. | |
| uint64_t base_high: 8 | |
| Höherwertige 8 Bits der Basisaddresse. | |
| }; | |
| struct { | |
| uint64_t __pad0__: 40 | |
| bool code_accessed:1 | |
| Wenn gesetzt, dann wurde das Codesegment seit dem letzten löschen des Bits mindestens einmal betreten. | |
| bool readable: 1 | |
| Wenn gesetzt ist der Code lesbar (sonst nur ausführbar) | |
| bool conforming: 1 | |
| Wenn gesetzt, wird die Ausführung eines Codes im höher priveligierten Segment unter Beibehaltung des Rings erlaubt. Ansonst gibt es eine General-Protection-Ausnahme. | |
| uint64_t __pad1__: 10 | |
| bool is64bit: 1 | |
| 64bit Code segement Mehr ... | |
| Size operation_size: 1 | |
| Standardbreite für Adressen. | |
| uint64_t __pad2__: 0 | |
| }; | |
| Code Segment spezifische Felder. Mehr ... | |
| struct { | |
| uint64_t __pad0__: 40 | |
| bool data_accessed: 1 | |
| Wenn gesetzt, dann wurde das Datensegment seit dem letzten löschen des Bits mindestens einmal betreten. | |
| bool writeable: 1 | |
| Wenn gesetzt sind die Daten schreibbar (sonst nur lesbar) | |
| bool expand_down: 1 | |
| Richtung: nach unten wachsend Relevant für dynamisch änderbare, wachsende Segmente. | |
| uint64_t __pad1__: 10 | |
| uint64_t reserved: 1 | |
| Reserviert – soll gelöscht sein! | |
| Size big: 1 | |
| Größe des Stackpointer. Mehr ... | |
| uint64_t __pad2__: 0 | |
| }; | |
| Daten Segment spezifische Felder. Mehr ... | |
| struct { | |
| uint64_t __pad0__: 40 | |
| }; | |
| spezifische Felder für Systemsegment (Task State Segment) Mehr ... | |
| uint64_t | value |
| zusammengesetzter Wert | |
Beschreibt den Aufbau von Segment-Descriptoren.
Eine Datenstruktur, welche die Größe, die Position, die Zugriffsberechtigungen und Verwendung eines Segmentes enthält und in freier Wildbahn in der GDT oder auch in einer LDT aufzufinden ist.
|
inline |
Konstruktor für einen 16/32 Bit Code/Memory Eintrag.
| base | Basisaddresse |
| limit | Größe |
| code | Code oder Datensegment |
| ring | Privilegienlevel |
| mode | Betriebsmodus (Real/Protected/Long) |
| struct { ... } |
Code Segment spezifische Felder.
| struct { ... } |
Daten Segment spezifische Felder.
| struct { ... } |
spezifische Felder für Systemsegment (Task State Segment)
| Size GDT::SegmentDescriptor::big |
Größe des Stackpointer.
| bool GDT::SegmentDescriptor::is64bit |
64bit Code segement