Tomasz Mamczak kl.II TI
*
Tryb rzeczywisty,
chroniony i wirtualny
Architektura
pamięci
Stronicowanie – wsparcie dla systemów pamięci
wirtualnej, gdzie fragmenty programów są ładowane do
pamięci fizycznej tylko wtedy gdy są potrzebne. W
przeciwnym wypadku pozostają na dysku twardym.
Segmentacja – mechanizm umożliwiający odizolowanie
obszarów kodu, danych i stosu należących do różnych
programów. W rezultacie żaden program nie może
ingerować w obszar innego programu.
Adres logiczny - adres obliczony na podstawie danych
zawartych w programie przez jednostkę centralną; adres
wirtualny. Adres logiczny może podlegać przekształceniu
przez jednostkę zarządzania pamięcią na adres fizyczny
komórki w jednostce pamięci.
Adres fizyczny - dres słowa pamięci fizycznej, pojawiający
się na magistrali adresowej procesora w momencie
odwoływania się do pamięci operacyjnej lub przestrzeni
wejścia-wyjścia.
Tryb rzeczywisty
Tryb pracy mikroprocesorów z rodziny procesorów x86, w którym procesor pracuje tak jak
procesor Intel 8086. Tryb rzeczywisty nie zapewnia ochrony pamięci przed użyciem przez inny
proces oraz obsługi wielozadaniowości. W trybie tym pracowały programy w systemie
operacyjnym DOS. Na przełomie lat 80. i 90. dwudziestego wieku prowadzono działania nad pracą
programów w systemie DOS w trybie chronionym, pozostawiając sam system w trybie
rzeczywistym. Zbudowano kilka systemów umożliwiających taką pracę systemu. Nowym trybem
pracy procesora Intel 80286 był tryb chroniony. Tryb rzeczywisty nie zapewnia ochrony pamięci
przed użyciem przez inny proces oraz obsługi wielozadaniowości. W trybie tym pracowały
programy w systemie operacyjnym DOS. Na przełomie lat 80. i 90. dwudziestego wieku
prowadzono działania nad pracą programów w systemie DOS w trybie chronionym, pozostawiając
sam system w trybie rzeczywistym. Zbudowano kilka systemów umożliwiających taką pracę
systemu.
W trybie rzeczywistym dostępna jest 1-megabajtowa przestrzeń adresowa. Adres logiczny
(programowy) składa się z dwóch liczb 16-bitowych: segmentu (numeru segmentu) oraz
przemieszczenia względem początku segmentu (ang. offset). Adres fizyczny jest liczony jako
segment * 16 + przemieszczenie. Ponieważ segmenty nie są rozłączne, wiele różnych adresów
logicznych może odwoływać się do tej samej komórki pamięci np.
segment:offset = 0x1000:0xA000
adres fizyczny = 0x1000*0x10 + 0xA000 = 0x1A000
Program rozruchowy (ang. boot loader) to działający na zasadzie bootstrapu program
uruchamiany jako pierwszy po wykonaniu BIOS-u (lub EFI), służący do załadowania systemu
operacyjnego do pamięci operacyjnej komputera.W komputerach PC nagłówek (segment
startowy) programu rozruchowego może być umieszczony w pierwszym, 446-bajtowym
fragmencie sektora startowego dysku twardego (ang. Master Boot Record). W systemach
DOS/Win32 jest tam zapisany program, który ładuje kolejny program rozruchowy z partycji
oznaczonej jako aktywna. W systemach uniksowych pliki dodatkowe programu rozruchowego
znajdują się zazwyczaj w katalogu lub partycji montowanej w katalogu /boot.
Tryb chroniony
To tryb pracy mikroprocesorów serii x86 wprowadzony w mikroprocesorze Intel 80286.
Tryb chroniony umożliwia adresowanie pamięci w większym zakresie niż 1 MiB (tryb
rzeczywisty), wprowadza wiele nowych udogodnień wspierających wielozadaniowość,
takich jak: sprzętowa ochrona pamięci (układ MMU), wsparcie przełączania kontekstu
procesora i wiele innych. Większość nowoczesnych systemów operacyjnych wykorzystuje
procesory serii x86 właśnie w trybie chronionym. Zaliczają się do nich m.in.: Linux,
Windows w wersji 3.0 i wyższych, systemy z rodziny BSD. Tryb chroniony został
wprowadzony do mikroprocesora Intel 80286 wraz z trybem rzeczywistym (ang. real
mode) dla zachowania zgodności z poprzednimi mikroprocesorami rodziny x86. W
mikroprocesorze Intel 80286 w trybie chronionym 16-bitowe rejestry segmentowe CS, SS,
DS, ES zawierają selektory, które jednoznacznie określają deskryptor (8-bajtowa struktura
w pamięci) opisujący segment. Deskryptor dysponuje następującymi informacjami o
segmencie: fizyczna lokalizacja segmentu w pamięci (24-bitowy adres bazowy, 16-bitowa
długość segmentu w bajtach), prawa dostępu do segmentu i numer uprawnienia
segmentu. W odróżnieniu od trybu chronionego w trybie rzeczywistym rejestry
segmentowe CS, SS, DS, ES zawierają adresy bazowe (początków) segmentów. Procesor
zaczyna pracę w trybie chronionym po ustawieniu bitu PE (ang. Protection Enable) na
jeden, wyzerowanie tego bitu powoduje powrót do trybu rzeczywistego (bit PE to
najmłodszy bit rejestru CR0 (ang. Control Register)). Intel 80386 i następne posiadają 32-
bitowy tryb chroniony, w którym są dostępne 4 GiB pamięci wirtualnej i stronicowanie
pamięci.
Przełączanie w
tryb chroniony
Przełączanie w tryb chroniony jak i operowanie na nim
sprawia dość duże problemy początkującym. Komputer z
powodu jednego źle ustawionego bitu jest w stanie się
zresetować nie zwracając nam żadnej informacji odnośnie
błędu. Tutaj oczywiście polecam stosowanie emulatorów PC
z których Bochs jest bardzo dobry ponieważ posiada
debuger umożliwiający bardzo dokładne zlokalizowanie
błędu. Największą wadą Bochs'a jest niestety słabe jeszcze
odwzorowanie wszystkich aspektów realnego komputera
PC. W każdym razie kod, który tutaj przedstawię i opiszę
jest sprawdzony i w 100% działający tak więc jest zawsze
jakimś pewnym przykładem do przeanalizowania na
podstawie teorii podanych w innych artykułach.
Mechanizm
segmentacji
Segmentacja dostarcza mechanizm
podziału przestrzeni adresowej procesora
na chronione obszary zwane segmentami.
Segmenty mogą zawierać dane, kod i
wszelkie struktury systemowe.
Mechanizm
stronicowania
Procesory 80386 i nowsze pracujące w trybie chronionym umożliwiają dowolne mapowanie adresów
logicznych na adresy fizyczne – mechanizm ten nazywany jest stronicowaniem (ang. paging). Adresy
logiczne obejmują całą przestrzeń adresową procesora, czyli 4 GB, niezależnie od tego, ile w
rzeczywistości w komputerze zainstalowano pamięci. Zadaniem systemu operacyjnego jest
odpowiednie mapowanie adresów logicznych na adresy pamięci fizycznej, co pozwala zwykłym
programom użytkowym przez cały czas działania odwoływać się do tych samych adresów
logicznych.Jeśli włączone jest stronicowanie, wówczas cała pamięć (4 GB) dzielona jest na bloki –
strony o rozmiarach 4 kB; w procesorach Pentium i nowszych możliwe jest także używanie stron o
rozmiarach 4 MB. Gdy program odwołuje się do pamięci, podaje adres właściwej komórki pamięci.
Adres ten jest 32-bitową liczbą, która składa się z trzech części:
indeks w katalogu stron (liczba 10-bitowa),
indeks w tablicy stron (liczba 10-bitowa),
przesunięcie w obrębie strony (liczba 12-bitowa).
Zatem pierwsza część adresu wybiera z katalogu stron tablicę stron. Druga część adresu wybiera
pozycję z tablicy stron, która wyznacza fizyczny adres konkretnej strony. Przesunięcie jest adresem
lokalnym w obrębie wybranej strony. Ostatecznie adres fizyczny, na który zmapowano adres logiczny,
wyznaczany jest z dwóch składników: adresu fizycznego strony i przesunięcia.
Ponieważ uzyskiwanie dostępu do pamięci w celu odczytania informacji o stronie jest czasochłonne,
dlatego procesory posiadają pamięć podręczną (ang. TLB, Translation Lookaside Buffer), w której
pamiętane są ostatnio wyznaczone adresy fizyczne stron. TLB przechowuje 32, 64, 256 lub więcej
pozycji.
Ochrona zasobów w trybie
chronionym
•
cztery poziomy ochrony umożliwiające w
wielozadaniowym systemie ochronę
programów i danych użytkownika i
systemu,
•
Ochrona przestrzeni adresowej określa
minimalny poziom uprzywilejowania,
który może wykonywać instrukcje;
dodatkowo każde zadanie posiada tablice
8kB określająca możliwość wykonania
operacji na poszczególnych lokacjach
przestrzeni
Tryb wirtualny
specjalny tryb pracy procesorów o architekturze IA-32, dostępny w trybie
chronionym, który umożliwia uruchamianie programów przeznaczonych dla trybu
rzeczywistego. W trybie wirtualnym symulowane jest działanie analogiczne dla
procesora Intel 8086 (faktycznie można uruchamiać kod także dla 8088, 80186 i
80188), tzn. otrzymuje dostęp do 1 MB pamięci i rejestrów procesora i może
wykonywać te rozkazy, które mają sens w takim otoczeniu. Natomiast w
odróżnieniu od "prawdziwego" trybu rzeczywistego, wszelki dostęp do portów
procesora jest sankcjonowany przez system operacyjny pracujący w trybie
chronionym. Podobnie przerwania są obsługiwane przez system operacyjny. To
umożliwia bezkonfliktową pracę zwykłych zadań systemu i zadań V86. Możliwe
jest ponadto jednoczesne uruchomienie wielu zadań V86. Ponieważ to na system
operacyjny spada obsługa dostępu do portów oraz przerwań, system musi
emulować sprzęt, jak i udostępniać określoną funkcjonalność 16-bitowego systemu
operacyjnego. Innymi słowy system musi tłumaczyć żądania zadania V86, np. zapis
do określonego portu na akcję sterownika sprzętu. Tryb V86 jest wykorzystywany
do uruchamiania programów DOS-owych. System Windows posiada wbudowane
mechanizmy umożliwiające uruchomienie takich programów (w Microsoft
Windows NT jest to NTVDM), natomiast dla systemu Linux istnieją programy
dosbox oraz DOSEMU.