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 z modelu x86, zgodnych z procesorem 80386 (procesor 80286, jako 16-bitowy, nie ma pól znajdujących się w dwóch najstarszych bajtach rejestrów deskryptora): center|Ogólna budowa deskryptora segmentu
Pola deskryptora określają: Limit segmentu – wielkość segmentu; procesor 80386 łączy oba pola, tworząc 20-bitową liczbę reprezentującą wielkość segmentu, a liczba ta jest następnie interpretowana w zależności od stanu pola G. W przypadku procesora 80286 wielkość segmentu określana jest przez liczbę 16-bitową. Adres bazowy, Baza – 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 – typ segmentu oraz prawa dostępu do niego; pole te jest interpretowane różnie dla każdego typu segmentu. S – 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 uprawnień (uprzywilejowania) segmentu (0 – najwyższy, 3 – najniższy). 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ść (ang. granularity) określa jednostkę rozmiaru segmentu (0 – ziarnistość 1 B, 1 – ziarnistość 4 kB). Jeśli G = 0, maksymalny rozmiar segmentu to 1 MB, 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ę poziomem uprawnień (uprzywilejowania).
Deskryptory służą także do definiowania bramek przerwań i procedur (interrupt gate i callgate) – wówczas deskryptor podaje adres takiej procedury i prawa dostępu. Bramki umożliwiają wywoływania kodu o wyższym poziomie uprawnień (np. funkcji systemu operacyjnego lub sterownika) z poziomu programu o niższych uprawnieniach (np. programu użytkowego).
Zobacz też deskryptor pliku – identyfikator pliku wykorzystywany przez system operacyjny procesor Intel 386 – pierwszy 32-bitowy procesor x86
Bibliografia
Kategoria:Architektura komputerów Kategoria:Zarządzanie pamięcią