Tabelele de descriptori

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 7 noiembrie 2018; verificările necesită 4 modificări .

Tabelele de descriptori  sunt structuri de date de serviciu care conțin descriptori de segment .

Există trei tipuri de tabele de descriptori în arhitectura x86 :

Tabel global de descriptori

Deoarece un descriptor ocupă 8 octeți, iar limita din registrul GDTR  este de doi octeți și stochează dimensiunea tabelului minus unu (valoarea maximă a limitei este 65535) și 8192 x 8 = 65536.

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 (cu un offset zero față de începutul tabelului) descriptor . Accesarea acestuia generează o excepție #GP , care împiedică accesul la memorie folosind un registru de segment neîncărcat.

Tabel de descriptor local

Spre deosebire de GDT , pot exista multe LDT-uri (în funcție de numărul de sarcini (threads), dar nu neapărat). Fiecare sarcină poate avea propria sa. Locația tabelului de sarcini curent este indicată de registrul LDTR .

Mărimea și locația LDT -ului în memoria liniară este determinată de descriptorul LDT al GDT (dar acest lucru nu înseamnă că dimensiunea LDT -ului poate fi mai mare de 65536 de octeți ).

Se poate folosi primul descriptor LDT (#0).

Tabel de descriptori de întrerupere

Tabelul de întreruperi este global. Locația în memoria fizică este determinată de registrul IDTR .

Când apare o întrerupere (externă, hardware sau cauzată de instrucțiunea Int ):

Vezi și

Link -uri