Deskryptor segmentu

W adresowaniu pamięci dla architektur komputerów Intel x86 deskryptory segmentów są częścią jednostki segmentacji, używanej do tłumaczenia adresu logicznego na adres liniowy. Deskryptory segmentów opisują segment pamięci , do którego odnosi się adres logiczny. Deskryptor segmentu (o długości 8 bajtów w 80286 i późniejszych) zawiera następujące pola:

  1. Adres bazowy segmentu
  2. Limit segmentu, który określa rozmiar segmentu
  3. Bajt praw dostępu zawierający informacje o mechanizmie ochrony
  4. Bity kontrolne

Struktura

Deskryptor segmentu x86 i x86-64 ma następującą postać:

SegmentDescriptor.svg

Gdzie pola oznaczają:

Base Address
Początkowy adres pamięci segmentu. Jego długość wynosi 32 bity i jest tworzony z dolnych bitów części od 16 do 31 i górnych bitów części od 0 do 7, po których następują bity od 24 do 31. Limit segmentu Jego długość
wynosi
20 bitów i jest tworzony z dolnego bitu części 0 do 15, a górny bit części od 16 do 19. Określa adres ostatnio dostępnych danych. Długość jest o jeden większa niż wartość zapisana tutaj. Jak dokładnie należy to interpretować, zależy od bitu szczegółowości deskryptora segmentu.
G=Granularity
Jeśli jasne, limit jest w bajtach, maksymalnie 2 20 bajtów. Jeśli jest ustawiony, limit jest podany w jednostkach 4096-bajtowych stron, maksymalnie 2 32 bajty.
D/B
D = Domyślny rozmiar operandu: Jeśli jest czysty, jest to 16-bitowy segment kodu; jeśli jest ustawiona, jest to segment 32-bitowy.
B = Big: Jeśli ustawiono, maksymalny rozmiar przesunięcia dla segmentu danych jest zwiększany do 32-bitowego 0xffffffff. W przeciwnym razie jest to 16-bitowy maks. 0x0000ffff. Zasadniczo to samo znaczenie co „D”.
L=Long
Jeśli jest ustawiona, jest to segment 64-bitowy (a D musi być zerem), a kod w tym segmencie używa 64-bitowego kodowania instrukcji. „L” nie może być ustawione w tym samym czasie co „D”, czyli „B”. (Bit 21 na obrazie)
AVL=Dostępny
Do użytku programowego, nieużywany przez sprzęt (Bit 20 na obrazie z etykietą A)
P=Obecny
Jeśli jest pusty, generowany jest wyjątek „nieobecny segment” dla każdego odniesienia do tego segmentu
DPL=Poziom uprawnień deskryptora Poziom
uprawnień (pierścień) wymagany do uzyskania dostępu do tego
typu deskryptora
Jeśli jest ustawiony, jest to deskryptor segmentu kodu. Jeśli jest to jasne, jest to deskryptor segmentu danych/stosu, w którym „D” zostało zastąpione przez „B”, „C” zastąpione przez „E” i „R” zastąpione przez „W”. W rzeczywistości jest to szczególny przypadek pola typu 2-bitowego, w którym poprzedzający bit 12 wyczyszczony jako „0” odnosi się do bardziej wewnętrznych deskryptorów systemowych, dla LDT, LSS i bramek.
C=Zgodny
kod w tym segmencie może być wywoływany z mniej uprzywilejowanych poziomów.
E=Rozwiń-w dół
Jeśli jest pusty, segment rozszerza się od adresu podstawowego do adresu podstawowego + limit. Jeśli jest ustawiona, rozszerza się od maksymalnego przesunięcia w dół do limitu, co jest zwykle używane w przypadku stosów.
R=Czytelny
Jeśli jest pusty, segment może być wykonywany, ale nie może być odczytywany.
W=Writable
Jeśli jest wyczyszczony, segment danych może być odczytywany, ale nie zapisywany.
A=dostęp
Ten bit jest ustawiany sprzętowo na 1, gdy segment jest uzyskiwany, i kasowany przez oprogramowanie.

Zobacz też

Dalsza lektura

Linki zewnętrzne