osdev.labedz.org

Coś, czego dużo ludzi się boi, a całkiem niepotrzebnie...

Praca w trybie chronionym umożliwia wykorzystanie wszystkich możliwości procesora Intel386, dlatego jest preferowana jako podstawowy tryb pracy

Jak się do niego 'dostać'?

Przełączenie procesora w tryb pracy chronionej następuje po ustawienie flagi PE w słowie rejestru CR0 - od tej chwili procesor wykonuje program w trybie chronionym z aktualnym poziomem uprzywilejowania (ang. current privilege level - CPL) ustawionym na wartość '0'. Po przełączeniu trybu rejestry segmentowe wskazują na ten sam adres liniowy na jaki wskazywały w trybie rzeczywistym.

Natychmiast po ustawieniu flagi PE, kod inicjujący musi wyzerować kolejkę instrukcji do wykonania (ang. instruction prefetch queue) poprzez wykonanie instrukcji skoku. Operacja ta musi być wykonana, ponieważ procesor Intel386 pobiera i dekoduje instrukcje i adresy zanim zostaną użyte, a po zmianie trybu pracy pobrane wcześniej informacje (które odnoszą się do trybu rzeczywistego) nie są właściwe (aktualne). Instrukcja skoku JMP wymusza odrzucenie tych danych.

Jeżeli chcemy korzystać z wielu różnych segmentów, systemu przerwań i wyjątków, mechanizmu stronicowania oraz wielozadaniowości, należy ustawić globalną tablice deskryptorów wraz z rejestrem (ang. global descriptor table - GDT, global descriptor table register - GDTR), tablice deskryptorów przerwań wraz z rejestrem (ang. Interrupt descriptor table - IDT, interrupt descriptor table register - IDTR), stworzyć katalog stron oraz tablice stron i ustawić bit PG w rejestrze CR0, oraz ustawić rejestr zadania i segment stanu zadania (ang. task register, task state segment - TSS).