COBE 0.1 ALPHA

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

Diese Datei enthält die Funktionen zur Erstellung der GDT. Mehr ...

#include <gdt.h>
#include <stdint.h>
#include <multitasking.h>
#include <stdio.h>

gehe zum Quellcode dieser Datei

Funktionen

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 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.

Variablen

gdt_entry gdt [6]
 Dieses Array mit sechs GDT Einträgen bildet die gesamte GDT.
gdt_ptr gdt_pointer
 Dieser Struktur-Pointer beinhaltet einen Base-Zeiger auf dei GDT und eine Limit-Variable der GDT.
new_tss_t tss
 Die TSS wird erstellt und bildet den sechsten Eintrag der GDT.

Ausführliche Beschreibung

Diese Datei enthält die Funktionen zur Erstellung der GDT.

Definiert in Datei gdt.c.


Dokumentation der Funktionen

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

Dieses Array mit sechs GDT Einträgen bildet die gesamte GDT.

Definiert in Zeile 12 der Datei gdt.c.

Dieser Struktur-Pointer beinhaltet einen Base-Zeiger auf dei GDT und eine Limit-Variable der GDT.

Definiert in Zeile 14 der Datei gdt.c.

Die TSS wird erstellt und bildet den sechsten Eintrag der GDT.

Definiert in Zeile 17 der Datei multitasking.c.

 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Makrodefinitionen