Tabel descriptor global
Tabelul descriptor global sau Tabel descriptor global (GDT) este o structură de date utilizată de procesoarele din familia x86 Intel , începând cu ' 80286 , pentru a defini diferite zone ale memoriei în executarea unui program, cum ar fi baza adresei, dimensiunea, și privilegii de acces precum executabilitatea și scrierea. Aceste zone de memorie sunt numite segmente în terminologia Intel.
GDT conține mai mult decât descriptori de segmente. Fiecare 8 octeți din GDT reprezintă un descriptor, dar aceștia pot fi descriptori Task State Segment (sau TSS), descriptori LDT sau descriptori de poartă de apel . Acestea din urmă, Call Gates, sunt deosebit de importante pentru transferul controlului între diferitele niveluri de privilegii ale x86, chiar dacă această metodă nu este utilizată de sistemele de operare moderne.
Cum funcționează sistemul de operare
Pentru a încărca GDT, sistemul de operare trebuie să execute instrucțiunea LGDT addr , unde addr este adresa structurii care reprezintă registrul GDT.
Acest registru, format din 48 de biți, are această structură:
Dimensiune | Nume | Descriere |
---|---|---|
cuvânt | Limită | Dimensiunea totală a octeților GDT-1 |
dword | Baza | Adresa fizică a GDT |
Tabelul descriptorilor globali
Dimensiunea maximă a GDT este de 8192 de elemente, deoarece într-o memorie segmentată există în mod obișnuit 2 14 (16384) segmente, din care jumătate (8192) sunt atribuite informațiilor de sistem, cealaltă informațiilor procesate de utilizator. Jumătate din descriptori sunt, prin urmare, stocate în GDT, cealaltă jumătate în LDT. Procesoarele Intel necesită ca primul element al GDT și, prin urmare, primii 8 octeți, să fie setat la 0. Fiecare element al GDT are această structură:
Dimensiune | Nume | Descriere |
---|---|---|
cuvânt | LimitLow | Primii 16 biți ai limitei |
cuvânt | BaseLow | Primii 16 biți ai bazei |
octet | BaseMiddle | Biții 17 - 24 ai bazei |
octet | Acces | Vezi mai jos |
octet | Granularitate | Vezi mai jos |
octet | BaseHigh | Biții 25 - 32 ai bazei |
Baza
Câmpul de bază (32 biți) este format din câmpurile BaseLow (16 biți), BaseMiddle (8 biți) și BaseHigh (8 biți). Acest câmp indică adresa fizică de la care începe segmentul. Mai multe segmente se pot „suprapune”
Limită
Câmpul limită (20 biți) este format din câmpul LimitLow (16 biți) și cei 4 biți inferiori ai câmpului Granularitate. Acest câmp indică lungimea segmentului, nu adresa finală!
Cei 20 de biți ai câmpului limită trebuie interpretați ca un număr de unități de 8 octeți sau ca un număr de pagină adresabilă în cadrul segmentului. Prin urmare, dacă utilizați pagini de 4 KB (12 biți) și câmpul limită are valoarea 0xFFFFF, dimensiunea segmentului este egală cu 4 GB (dimensiunea maximă a unui segment pe o mașină de 32 de biți).
Deci, un segment acoperă zonele de memorie dintre „Baza” și „Baza + Limită”
Acces
Câmpul de acces conține diverse informații. Fiecare bit specifică modul în care este utilizat acel segment:
Pic | Nume | Descriere |
---|---|---|
7 | Prezent | Indică dacă segmentul este prezent sau nu în memorie, este întotdeauna setat la 1 |
6 - 5 | DPL | Indică nivelul privilegiului în raport cu CPU - ul segmentului respectiv |
4 | Sistem | Dacă este setat la 1, CPU utilizează acest segment pentru date și cod, dacă este setat la 0, este un TSS (Task State Segment) sau un Gate Gate |
3 - 0 | Tip | Indică procesorului drepturile pe care le are asupra segmentului (numai citire / scriere de exemplu) |
Granularitate
Câmpul de granularitate, precum și câmpul de acces, oferă diverse informații:
Pic | Nume | Descriere |
---|---|---|
7 | Granularitate | dacă este setat la 1, câmpul limită este înmulțit cu 4096. În acest fel putem obține cum dimensiunea maximă a segmentului 4 GB, în caz contrar, la 0, dimensiunea maximă este de 1 MB. |
6 | Dimensiunea operației | Indică dacă segmentul este utilizat în 16 sau 32 de biți |
5 | Rezervat | Trebuie setat la 0 |
4 | AVL | Acest câmp a fost utilizat în procesoare înainte de seria Pentium . Acum este utilizabil în mod liber de către sistemul de operare |
3 - 0 | LimitHigh | Cei mai mari 4 biți ai câmpului Limit |
Elemente conexe
linkuri externe
- ( EN ) Manualul dezvoltatorului de software de arhitectură Intel Volumul 3: Programare sistem (engleză)
- ( EN ) Tutorial GDT (engleză)