COBE 0.1 ALPHA

D:/COBE-Packet/cobe/system/gdt.h-Dateireferenz

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

typedef struct gdt_struct gdt_entry

Definiert in Zeile 34 der Datei gdt.h.

typedef struct gdt_ptr_struct gdt_ptr

Definiert in Zeile 35 der Datei gdt.h.


Dokumentation der Funktionen

struct idt_ptr_struct __attribute ( (packed)  )
void init_gdt ( )

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_numDieser Parameter bestimmt den Index der GDT
adressDieser Parameter enthält die Base-Adresse
sizeDieser Parameter beinhaltet zum einen in den niederwertigen 16-Bit das Segment-Limit, in den höherwertigen 8-Bit den niederwertigen Teil der Flags
accessDieser Parameter enthält die Rechte und die Art des Segments
flagsDieser 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

unsigned char accs

Diese Variable bildet die Zugriffsrechte und Art eines Segments.

Definiert in Zeile 31 der Datei gdt.h.

unsigned int base_gdt

Diese Variable zeigt auf den Start des GDT-Array.

Definiert in Zeile 35 der Datei gdt.h.

unsigned char flags

Diese Variable beinhaltet die Flags eines Segments.

Definiert in Zeile 33 der Datei gdt.h.

unsigned short limit_gdt

Diese Variable enthält das Limit der gesamten GDT ((GDT * Einträge) -1)

Definiert in Zeile 33 der Datei gdt.h.

unsigned char s_adress_high

Diese Variable bildet die höherwertiegn 8-Bit der Base-Adresse.

Definiert in Zeile 35 der Datei gdt.h.

unsigned short s_adress_low

Diese Variable bildet die niederwertigen 16-Bit der Base-Adresse.

Definiert in Zeile 27 der Datei gdt.h.

unsigned char s_adress_mid

Diese Variable bilde die mittelwertigen 8-Bit der Base-Adresse.

Definiert in Zeile 29 der Datei gdt.h.

unsigned short s_size

Diese Variable enthält das Limit des Segments.

Definiert in Zeile 25 der Datei gdt.h.

 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Makrodefinitionen