Deskryptor segmentu
Deskryptor segmentu – struktura występująca w globalnej oraz lokalnej tablicy deskryptorów, opisująca położenie i właściwości segmentu pamięci.
Budowa ogólna
W ogólności deskryptor segmentu jest 64-bitową strukturą określającą jednoznacznie położenie segmentu w pamięci, jego typ, rozmiar, prawa dostępu oraz pozostałe informacje przydatne przy dostępie do segmentu w trybie chronionym procesora. Każdy deskryptor należy do odpowiedniej tablicy deskryptorów. Poniższy rysunek przedstawia budowę deskryptora segmentu procesorów Intel x86, a dokładniej procesora 80386 i późniejszych (procesor 80286, jako 16-bitowy, nie posiada pól znajdujących się w dwóch najstarszych bajtach deskryptora):

Opis pól deskryptora:
- Limit segmentu - określa wielkość segmentu; procesor 80386 łączy oba pola, aby otrzymać 20-bitową liczbę reprezentującą wielkość segmentu. Liczba ta jest następnie interpretowana w zależności od stanu pola G. W przypadku procesora 80286 wielkość segmentu wynosi 16-bitów.
- Adres bazowy, Baza - pola określające offset segmentu. Z trzech pól adresu bazowego w deskryptorze segmentu procesor 80386 tworzy jeden 32-bitowy adres. Procesor 80286 z dwóch pól tworzy 24-bitowy adres.
- Typ - określa typ segmentu oraz prawa dostępu do niego; pole te jest interpretowane różnie dla każdego typu segmentu.
- S - okresla typ deskryptora segmentu. Jeżeli to pole ustawione jest na 0 to deskryptor opisuje segment systemowy, w przeciwnym wypadku opisuje segment danych lub kodu.
- DPL - poziom uprzywilejowania segmentu (0 - największy, 3 - najmniejszy)
- P - pole informujące o tym, czy segment jest załadowany do pamięci. W przypadku obecności segmentu w pamięci pole ustawiane jest na 1.
- AVL - bity przeznaczone do wykorzystania przez system operacyjny
- D/B - domyślny rozmiar operacji (0 - segment 16-bitowy, 1 - segment 32-bitowy)
- G - ziarnistość (Granularity) określa jednostkę rozmiaru segmentu (0 - ziarnistość 1 B, 1 - ziarnistość 4 kB). Jeśli G = 0, maksymalny rozmiar segmentu to 1MB, przy G = 1, rozmiar maksymalny wynosi 4 GB
Z każdym deskryptorem segmentu związane są selektory, przechowywane w rejestrach segmentowych, które mają taki sam indeks deskryptora segmentu lecz różnią się prawami uprzywilejowania.
Deskryptory służą także do definiowania bramek przerwań i procedur (interrupt gate i callgate) - wówczas deskryptor podaje adres takiej procedury i reguły dostępu. Bramki umożliwiają wywoływania kodu o wyższym uprawnieniach (np. procedur systemu operacyjnego lub sterownika) z poziomu programu o niższych uprawnieniach (np. programu użytkowego).
Bibliografia
- Intel® 64 and IA-32 Architectures Software Developer Manuals. [w:] System Programming Guide (volume 3) [on-line]. (ang.).
Zobacz też
- deskryptor pliku – identyfikator pliku wykorzystywany przez system operacyjny
- procesor Intel 386 – pierwszy 32-bitowy procesor x86