background image

Tomasz Mamczak kl.II TI

*

Tryb rzeczywisty, 
chroniony i wirtualny 

background image

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.

background image

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.

background image

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.

background image

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.

background image

Mechanizm 

segmentacji 

Segmentacja dostarcza mechanizm 
podziału przestrzeni adresowej procesora 
na chronione obszary zwane segmentami. 
Segmenty mogą zawierać dane, kod i 
wszelkie struktury systemowe.

background image

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.

background image

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

background image

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.


Document Outline