Przejdź do zawartości

Deskryptor segmentu

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

Deskryptor segmentu - struktura występująca w globalnej oraz lokalnej tablicy deskryptorów, opisująca położenie i właściwości segmentu.

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. Poniższy rysunek przedstawia budowę deskryptora segmentu procesorów x86:

Ogólna budowa deskryptora segmentu
Ogólna budowa deskryptora segmentu

Opis pól deskryptora:

  • Limit segmentu - określa wielkość segmentu; procesor łą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.
  • Adres bazowy, Baza - pola określające offset segmentu. Z trzech pól adresu bazowego w deskryptorze segmentu procesor tworzy jedną 32-bitową liczbę.
  • 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 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

Z każdym deskryptorem segmentu związane są selektory, 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

Szablon:Bibliografia start

Szablon:Bibliografia stop

Zobacz też