GDT ( English Global Descriptor Table , tabel global al descriptorilor) este o structură de date de serviciu în arhitectura x86 care definește segmente globale (comune pentru toate sarcinile) . Locația și dimensiunea memoriei sale fizice sunt determinate de registrul sistemului GDTR .
Descriptori LDT și segment de activitate ( TSS ) pot fi găsiți doar aici.
O caracteristică a GDT-ului este că nu permite accesul la primul (adică, zero) descriptor . Accesarea acestuia generează o excepție #GP , care împiedică accesul la memorie folosind un registru de segment neîncărcat.
GDTR ( Registrul tabelului global de descrieri în engleză - Registrul tabelului global de descriptori ) este un registru special de 48 de biți care descrie locația și dimensiunea tabelului care conține descriptori . A apărut împreună cu mecanismul de protecție în modelele de procesoare 80286 ca un mecanism de protecție segmentat .
Registrul conține două câmpuri: primul câmp - primii 32 de biți , descrie adresa liniară la care ar trebui să se găsească tabelul descriptor, iar ultimii 16 biți - limita care determină dimensiunea tabelului în octeți. Fiecare descriptor ocupă 8 octeți în memorie . Prin urmare, limita trebuie calculată întotdeauna astfel: limit = 8*n - 1, unde n este numărul de descriptori .
Când sistemul de operare este inițializat , tabelul global de descriptori este de obicei creat pentru numărul complet de descriptori (limită = 65535) sau 8192 descriptori . Apoi adresa virtuală de la începutul tabelului este încărcată în registrul GDTR cu o instrucțiune specială de asamblare LGDT ( Load GDT ) :
mov ax , GDT_Limit push ax mov eax , GDT_Base push eax mov bp , sp lgdt qword [ ss : bp ] ; stiva crește „în jos”!După ce mecanismul de protecție este activat, sistemul de adresare selector, în locul celui de segment, începe să funcționeze și este utilizat GDT-ul.