Tablica deskryptorów

Tablica deskryptorów – w trybie chronionym procesora x86 struktura ulokowana w dedykowanym segmencie, zawierająca deskryptory wszystkich segmentów znajdujących się w pamięci operacyjnej. W środowiskach wielozadaniowych wyróżniamy jedną wspólną tablicę globalną (GDT - ang. Global Descriptor Table), tablicę przerwań (IDT - ang. Interrupt Descriptor Table), a także tablice lokalne (LDT - ang. Local Descriptor Table) przypisane do każdego procesu w systemie[1] (nowoczesne systemy operacyjne nie korzystają już z segmentacji). Typowa tablica deskryptorów może pomieścić 213 8-bajtowych wpisów, gdyż jej rozmiar to 64 kB.

Dysponując rozmiarem tablicy deskryptorów można określić maksymalny rozmiar pamięci wirtualnej, którą może zaadresować pojedynczy proces - w przypadku układów 80386, 80486 i Pentium jest to 21 * 213 * 232 = 246 B = 64 TB (kolejno: jeden bit determinujący tablicę GDT/LDT, 13 bitów określających numer segmentu i 32 bity opisujących wielkość segmentu przy uwzględnieniu granulacji równej 4 kB). Dla procesora 80286 będzie to odpowiednio 21 * 213 * 216 = 230 B = 1 GB (w tym przypadku 16 bitów określających wielkość segmentu).

Z tablicami LDT i GDT powiązane są rejestry LDTR i GDTR:

  • 48-bitowy rejestr GDTR zawiera adres (32 bity) i rozmiar tablicy GDT (16 bitów). Rejestr ten musi być zainicjalizowany podczas przełączania procesora w tryb chroniony.
  • 16-bitowy rejestr LDTR zawiera selektor segmentu z tablicą LDT.

Tablica IDT ma strukturę podobną do GDT lecz zawiera deskryptory wszystkich segmentów z procedurami obsługi przerwań[2].

Przypisy edytuj

  1. Syck 1991 ↓, s. 244-245.
  2. Syck 1991 ↓, s. 245.

Bibliografia edytuj

  • Gary Syck: Turbo Assembler. Biblia użytkownika. Warszawa: Oficyna Wydawnicza LT&P, 1991. ISBN 83-901237-2-X.