Deskryptor segmentu: Różnice pomiędzy wersjami
[wersja przejrzana] | [wersja przejrzana] |
Usunięta treść Dodana treść
m drobna merytoryczna |
m →W procesorach o architekturze x86: poprawa według speyfikacji intela |
||
Linia 2:
'''Deskryptor segmentu''' ([[język angielski|ang.]] ''Segment descriptor'') - struktura występująca w globalnej oraz lokalnej [[Tablica deskryptorów|tablicy deksryptorów]], opisująca położenie i właściwości (rodzaj, rozmiar, flagi dostępu, status) 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 [[tryb chroniony|trybie chronionym]] procesora. Poniższy rysunek przedstawia budowę deskryptora segmentu procesorów [[x86]]:
[[Plik:Deskrypt.gif|center|Ogólna budowa deskryptora segmentu]]
Opis pól deskryptora:▼
Deskryptory służą także do definiowania bramek [[przerwanie|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).▼
* ''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.
*
* ''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.
*
Z każdym deskryptorem segmentu związane są [[selektor]]y, które mają taki sam indeks deskryptora segmentu lecz różnią się prawami uprzywilejowania.
▲Deskryptory służą także do definiowania bramek [[przerwanie|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).
▲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]]
▲* '''DPL''' - poziom uprzywilejowania segmentu (Descriptor Privilege Level)
== Zobacz też ==
|