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:
- Adres bazowy segmentu
- Limit segmentu, który określa rozmiar segmentu
- Bajt praw dostępu zawierający informacje o mechanizmie ochrony
- Bity kontrolne
Struktura
Deskryptor segmentu x86 i x86-64 ma następującą postać:
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ż
- Tabak, Daniel. Zaawansowane mikroprocesory . McGraw Hill and Co.
- Hall, Douglas. Mikroprocesory i interfejsy . Publikacje McGraw Hill.
Dalsza lektura
- Robert R. Collins (sierpień 1998). „Pamięć podręczna deskryptora segmentu” . Dziennik doktora Dobba .
Linki zewnętrzne