Rozdział 6.2.2



Segmentacja w trybie chronionym



Tryb wirtualny chroniony jest trybem pracy procesora, w którym wykorzystuje się pełną 32 bitową szerokość szyny adresowej, co pozwala na zaadresowanie pamięci fizycznej do 4GB. Ponadto dostępne są sprzętowe mechanizmy niezbędne do obsługi pamięci wirtualnej, pracy wielozadaniowej i ochrony zasobów. Jest to możliwe miedzy innymi dzięki udoskonalonej segmentacji z zabezpieczeniem segmentów oraz stronicowania.

W trybie chronionym adres logiczny składa się z dwóch części:

selektora segmentu : przemieszczenia

Selektor segmentu jest strukturą zawierającą pole numeru segmentu, który wskazuje deskryptor segmentu przez indeksowanie tablicy deskryptorów segmentów. Z wybranego deskryptora segmentu można pobrać adres początku wybranego segmentu. Adresowany bajt znajdujemy wówczas za pomocą przemieszczenia, stanowiącego adres względem początku segmentu.
Selektor segmentu jest 16 bitowy i zawiera 3 pola:

Numer segmentu
(13 bitów)
TI
(1 bit)
RPL
(2 bity)

Pole numeru segmentu stanowi indeks do tablicy deskryptorów segmentów, kod TI określa typ tablicy deskryptorów (0 gdy tablica globalna - GDT, 1 gdy tablica lokalna - LDT), pole RPL określa poziom żądania przywileju przy dostępie do segmentu podlegającego mechanizmom ochrony (od najbardziej uprzywilejowanego 00, do najmniej uprzywilejowanego 11). Tryb chroniony cechuje odseparowanie segmentów, tzn. każdy z nich jest odwzorowany w rozłączny z innymi obszar w przestrzeni adresów liniowych.

Do translacji służą tablice deskryptorów złożone z deskryptorów segmentów. Deskryptor segmentu jest to struktura 8 bajtowa (numery bajtów podano z prawej) opisująca pojedynczy segment. Jest ona złożona z 3 rodzajów pól: adresu bazowego segmentu (32 bity), wielkości segmentu (20 bitów) i atrybutów segmentu (12 bitów).

Adres bazowy segmentu (31-24) G D 0 AVL Wielkość segmentu (19-16) +6
P DPL S TYP A Adres bazowy segmentu (23-16) +4
Adres bazowy segmentu (15-0) +2
Wielkość segmentu (15-0) +0

Wśród atrybutów segmentu mamy:
  • P - bit obecności segmentu w pamięci fizycznej,
  • AVL - bit dostępny dla programów systemowych,
  • DPL - poziom ochrony segmentu (2 bity),
  • G - bit ziarnistości segmentu, określa jednostkę wielkości segmentu: 1B lub 4KB,
  • D/B - bit długości segmentu: 0 gdy bitów, 1 gdy 32 bity, 16
  • S - bit typu segmentu: 0 gdy systemowy, 1 gdy użytkowy,
  • TYP - typ segmentu (kod/dane/odczyt/zapis) (3 bity),
  • A - bit wskazujący czy segment był użyty.
Deskryptory procesorów Pentium są zorganizowane w dwupoziomowy system tablic deskryptorów obejmujący: Lokalną Tablicę Deskryptorów (LDT) i Globalną Tablicę Deskryptorów (GDT) oraz służące do ich lokalizacji w pamięci liniowej dwa rejestry: Rejestr Globalnej Tablicy Deskryptorów (GDTR) i Rejestr Lokalnej Tablicy Deskryptorów (LDTR).

Do zlokalizowania GDT służy jej adres bazowy zawarty w GDTR. GDTR zawiera dwa pola:

Adres bazowy GDT Wielkość GDT

LDTR zawiera dwa pola:

Selektor LDT 3 rejestry podręczne


Schemat działania segmentacji w trybie chronionym znajduje się tutaj

Selektor LDT jest indeksem do GDT wskazującym deskryptor segmentu zawierającego LTD. Po wybraniu i odczytaniu z GDT deskryptora opisującego LDT z jego pola odczytuje się adres bazowy LDT. Wybranie jednego deskryptora następuje przez indeksowanie LDT numerem segmentu zapisanym w selektorze segmentu adresu logicznego. Po wybraniu deskryptora segmentu odczytujemy z jego pola adres bazowy segmentu. Dostęp do docelowego bajta w segmencie następuje przez indeksowanie segmentu przemieszczeniem zawartym w adresie logicznym.

Omówiona translacja adresu logicznego składa się z 3 etapów: pobrania z pamięci deskryptora segmentu zawierającego LDT, pobrania z pamięci deskryptora docelowego segmentu, obliczenia adresu docelowego bajta.




Powrót do rozdziału 6
Powrót do strony głównej