Przejdź do zawartości

Deskryptor segmentu

Z Wikipedii, wolnej encyklopedii
To jest stara wersja tej strony, edytowana przez Matekm (dyskusja | edycje) o 10:27, 12 sie 2009. Może się ona znacząco różnić od aktualnej wersji.

Deskryptor segmentu (ang. Segment descriptor) - struktura występująca w globalnej oraz lokalnej tablicy deksryptorów, opisująca położenie i właściwości (rodzaj, rozmiar, flagi dostępu, status) segmentu.

W procesorach o architekturze x86

Struktura deskryptora jest 64-bitowa i określa segment w pamięci, dostępnych jest kilka rodzajów deskryptorów. Podstawowym typem deskryptora w architekturze x86 jest deskryptor segmentu (ang. Segment Descriptor) umieszczony jest on w lokalnej lub globalnej tablicy deskryptorów (ang. Global Descriptor Table - GDT, Local Descriptor Table - LDT). Przez GDT lub LDT prowadzą wszystkie odwołania do pamięci. Deskryptor segmentu określa jednoznacznie segment, jego położenie w pamięci, rozmiar, typ, prawa dostępu do segmentu oraz inne dane potrzebne przy dostępie do segmentu w trybie chronionym pracy procesora x86. Z każdym deskryptorem segmentu jest związany jego selektor (a właściwie możliwych jest kilka selektorów różniących się prawami uprzywilejowania selektora, a mające taki sam indeks deskryptora oraz wskaźnik na rodzaj tablicy GDT lub LDT).

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).

Poniższy rysunek przedstawia budowę deskryptora segmentu procesorów x86:

Opis pól deskryptora:

  • G - ziarnistość (Granularity) określa jaka jest jednostka liczenia rozmiaru segmentu (0 - ziarnistość 1B, 1 - ziarnistość 4kB). Jeśli G = 0, maksymalny rozmiar segmentu to 1MB, przy G = 1, rozmiar maksymalny wynosi 4GB
  • D/B - domyślny rozmiar operacji (0 - segment 16-bitowy, 1 - segment 32-bitowy)
  • AVL - bity przeznaczone do dowolnego wykorzystania przez system operacyjny
  • Limit Segmentu - określa rozmiar całego segmentu w jednostkach określonych przez flagę G
  • P - czy segment jest obecny pamięci operacyjnej
  • DPL - poziom uprzywilejowania segmentu (Descriptor Privilege Level)
  • S - typ deskryptora (0 - systemowy 1 - kodu lub danych)
  • Typ - typ segmentu: dane, stos, kod programu, bramki (przerwań i procedur, interrupt gate, call gate)
  • Baza, Adres Bazowy - adres bazowy (początkowy) segmentu

Zobacz też

Linki zewnętrzne