Diese Datei enthält die Prototypen zur Erstellung der GDT.
Mehr ...
gehe zum Quellcode dieser Datei
Datenstrukturen |
struct | gdt_struct |
| Diese Struktur bildet ein GDT-Eintrag. Mehr ...
|
struct | gdt_ptr_struct |
| Diese Struktur ist ein Struktur-Pointer auf die GDT. Mehr ...
|
Typdefinitionen |
typedef struct gdt_struct | gdt_entry |
typedef struct gdt_ptr_struct | gdt_ptr |
Funktionen |
struct gdt_struct | __attribute ((packed)) |
void | init_gdt () |
| Diese Funktion initialisiert die GDT, dabei werden alle nötigen Einträge in das Array eingetragen und initialisiert.
|
void | set_gdt (int, unsigned int, unsigned int, unsigned char, unsigned char) |
| Mit dieser Funktion kann man Einträge für die GDT erstellen.
|
Variablen |
unsigned short | s_size |
| Diese Variable enthält das Limit des Segments.
|
unsigned short | s_adress_low |
| Diese Variable bildet die niederwertigen 16-Bit der Base-Adresse.
|
unsigned char | s_adress_mid |
| Diese Variable bilde die mittelwertigen 8-Bit der Base-Adresse.
|
unsigned char | accs |
| Diese Variable bildet die Zugriffsrechte und Art eines Segments.
|
unsigned char | flags |
| Diese Variable beinhaltet die Flags eines Segments.
|
unsigned char | s_adress_high |
| Diese Variable bildet die höherwertiegn 8-Bit der Base-Adresse.
|
unsigned short | limit_gdt |
| Diese Variable enthält das Limit der gesamten GDT ((GDT * Einträge) -1)
|
unsigned int | base_gdt |
| Diese Variable zeigt auf den Start des GDT-Array.
|
Ausführliche Beschreibung
Diese Datei enthält die Prototypen zur Erstellung der GDT.
Definiert in Datei gdt.h.
Dokumentation der benutzerdefinierten Typen
Definiert in Zeile 34 der Datei gdt.h.
Definiert in Zeile 35 der Datei gdt.h.
Dokumentation der Funktionen
Diese Funktion initialisiert die GDT, dabei werden alle nötigen Einträge in das Array eingetragen und initialisiert.
Zunächst wird der Struktur-Pointer initialisiert, indem die Limit die Gesamtgröße der GDT-1 liefert. Danach werden die GDT-Einträge: CS DS, FS, GS in die GDT eingetragen. Der letzte Eintrag und der einzige mit einer richtigen Base- und Limit bildet die TSS, welche für das Multitasking relevant ist. Danach wird die TSS mit RING0-Werten belegt. Mit dem Befehl lgdt wird die GDT geladen, dabei wird der Struktur-Pointer als Adresse angegeben. Im Anschluss werden die Datensegmente mit RING0-Werten geladen und auch das CodeSegment bekommt RING0-Rechte (es kann in ein Code-Segment nur hineingesprungen werden). Als letztes wird das TSS-Register neu geladen.
Definiert in Zeile 29 der Datei gdt.c.
void set_gdt |
( |
int |
gdt_num, |
|
|
unsigned int |
adress, |
|
|
unsigned int |
size, |
|
|
unsigned char |
access, |
|
|
unsigned char |
flags |
|
) |
| |
Mit dieser Funktion kann man Einträge für die GDT erstellen.
Die vielen Aufteilungen der Parameter entsteht aus dem Grund der Kompatibilität, da früher die GDT etwas kleiner war und manche Adressbereiche erst später hinzugefügt worden sind, sodass eine Adresse auf mehrern Plätzen zersplittert ist. In Protected-Mode Systemem ist die Base-Adresse jedoch 0. Die Größe eines Segments beträgt 65 KByte. Die Flags und Access-Flags entscheiden, um was für ein Segment und mit welchen Rechten es sich handelt.
- Parameter:
-
gdt_num | Dieser Parameter bestimmt den Index der GDT |
adress | Dieser Parameter enthält die Base-Adresse |
size | Dieser Parameter beinhaltet zum einen in den niederwertigen 16-Bit das Segment-Limit, in den höherwertigen 8-Bit den niederwertigen Teil der Flags |
access | Dieser Parameter enthält die Rechte und die Art des Segments |
flags | Dieser Parameter enthält die höherwertigen 8-Bit der Flags (für die niederwertigen 8-Bit siehe size) |
Definiert in Zeile 75 der Datei gdt.c.
Variablen-Dokumentation
Diese Variable bildet die Zugriffsrechte und Art eines Segments.
Definiert in Zeile 31 der Datei gdt.h.
Diese Variable zeigt auf den Start des GDT-Array.
Definiert in Zeile 35 der Datei gdt.h.
Diese Variable beinhaltet die Flags eines Segments.
Definiert in Zeile 33 der Datei gdt.h.
Diese Variable enthält das Limit der gesamten GDT ((GDT * Einträge) -1)
Definiert in Zeile 33 der Datei gdt.h.
Diese Variable bildet die höherwertiegn 8-Bit der Base-Adresse.
Definiert in Zeile 35 der Datei gdt.h.
Diese Variable bildet die niederwertigen 16-Bit der Base-Adresse.
Definiert in Zeile 27 der Datei gdt.h.
Diese Variable bilde die mittelwertigen 8-Bit der Base-Adresse.
Definiert in Zeile 29 der Datei gdt.h.
Diese Variable enthält das Limit des Segments.
Definiert in Zeile 25 der Datei gdt.h.