Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
28
1.Architekturaprocesorówrodzinyx86
1.2.1.Segmentacjapamięciwtrybiechronionym
Podczaspracyprocesorawtrybiechronionymkażdyzsegmentówprogramu,danych
czystosujestopisanyzbioremparametrów,określającychlokalizacjędanegosegmen-
tuwprzestrzeniadresowejpamięciorazzasadydostępudotegosegmentu.Parametry
segmentusąprzedstawionewpostaci8-bajtowejstrukturydanych,nazywanejdeskryp-
torem.Podczaswyznaczaniaadresu,procesorwykorzystujedeskryptor,abyokreślić,
czyjestdopuszczalneodwołaniedotegosegmentu,wyznaczyćadreskomórkipamię-
ci(tzw.adresliniowy),atakżesprawdzić,czyadresmieścisięwzakresietegosegmen-
tu.Deskryptorysegmentówsąprzechowywanewpamięciwpostacitablicdeskryptorów.
Tablicetemogąmiećrozmiaryod8bajtów(deskryptoropisującyjedensegment)do
64kB(8192deskryptory).Występujątrzytypytablicdeskryptorów:
•
GDT
(ang.GlobalDescriptorTable)–globalnatablicadeskryptorów;
•
LDT
(ang.LocalDescriptorTable)–lokalnatablicadeskryptorów;
•
IDT
(ang.InterruptDescriptorTable)–tablicadeskryptorówprzerwań.
TablicaGDTzawieradeskryptory,któremogąbyćstosowaneprzezsystemopera-
cyjnypodczaswykonywaniaswoichzadań.TabliceLDT,którychmożebyćmaksymalnie
8192,zawierajądeskryptorysegmentówużywanychprzezposzczególnezadania(każde
zadaniemawłasnątablicęLDT).TablicaIDTzawieradeskryptorysegmentówwykorzy-
stywanychprzezproceduryobsługiprzerwań.Wtymrozdzialeskupimysięnaopisie
adresowaniapamięciwtrybiechronionymprzeztabliceGDTorazLDT.
Odwołaniedoodpowiedniegodeskryptorawtablicydeskryptorówjestwykonywa-
nezapomocąselektora,zapisanegowjednymzrejestrówsegmentowych:CS,DS,SS,ES,
FS,GS.Selektorjest16-bitowymrekordem,zawierającymtrzypola(rys.1.7).
Rysunekl.7.Formatselektora
Zkażdymzrejestrówsegmentowychjestzwiązany8-bajtowyukrytyrejestrdeskryp-
tora,będącykopiąodpowiedniegodeskryptoraztablicydeskryptorów.PoleRPL(ang.
Requestor’sPrivilegeLevel)określapoziomprzywilejuprogramuwywołującego(mecha-
nizmfunkcjonowaniasystemuochronybędzieomówionywdalszejczęści),poleTI(ang.
TableIndicator)wskazuje,czyselektordotyczytablicyglobalnej(TI=0)czylokalnej
(TI=1),natomiast13-bitowepoleINDEXzawieranumerpozycjiwtablicydeskryptorów.
Dookreśleniaadresubazowegoposzczególnychtablicorazichrozmiaruwprocesorze
przewidzianoodpowiednierejestry:GDTR,IDTR,LDTR.48-bitowerejestryGDTRiIDTR
zawierają32-bitowyadresbazowyodpowiedniejtablicydeskryptoróworaz16-bitowy
rozmiartablicy.Natomiast16-bitowyrejestrLDTRzawieraselektor,określającynumer
pozycjiwglobalnejtablicydeskryptorów,wktórejdeskryptoropisujeumieszczenie