Mikroinformatyka Tryb wirtualny

Transkrypt

Mikroinformatyka Tryb wirtualny
Mikroinformatyka
Tryb wirtualny
Tryb wirtualny z ochroną
Wprowadzony w 80286.
● Rozbudowany w 80386.
- 4 GB pamięci fizycznej,
- 64 TB przestrzeni wirtualnej,
- pamięć podzielona na segmenty o rozmiarze do 4 GB,
- układ stronicowania.
●
Mechanizm segmentacji:
- tłumaczy adres wirtualny na adres liniowy.
●
Mechanizm stronicowania:
- tłumaczy adres liniowy na adres fizyczny.
●
Tryb wirtualny 8086:
- jak w rzeczywistym w 8086,
- dzięki stronicowaniu przestrzeń 1MB umieszczona dowolnie w
przestrzeni fizycznej.
●
Adresowanie wirtualne
Translacja adresu logicznego na liniowy.
Segment jest wybierany za pomocą 16-bitowego selektora.
● Selektor wskazuje na deskryptor opisujący segment.
● Deskryptor jest umieszczony w tablicy deskryptorów.
● W deskryptorze jest zawarty adres początku segmentu.
●
Dodatkowe rejestry 80386
GDTR – zawiera 32-bitowy adres liniowy globalnej tablicy
deskryptorów i jej 16-bitowy rozmiar.
●
IDTR – zawiera 32-bitowy adres liniowy tablicy deskryptorów
przerwań i jej 16-bitowy rozmiar.
●
LDTR – zawiera 16-bitowy selektor lokalnej tablicy
deskryptorów, 32-bitowy adres tej tablicy i jej 16-bitową wielkość.
●
●
TR – rejestr bieżącego procesu.
CR0–CR3 – rejestry sterujące trybem pracy procesora oraz bloku
stronicowania.
●
●
DR0–DR7 – rejestry uruchomieniowe.
TR6, TR7 – rejestry testowe do sprawdzania działania pamięci
asocjacyjnej elementów tablic stron (TLB) – usunięte w Pentium.
●
●
FS, GS – dodatkowe rejestry segmentowe (selektory segmentów).
Rejestry GDTR i IDTR
GDTR – Rejestr globalnej tablicy deskryptorów.
IDTR – Rejestr tablicy deskryptorów przerwań.
Rejestry te zawierają adresy globalnych tablic systemowych i ich
rozmiar.
LGDT – instrukcja załadowania GDTR.
SGDT – zapisanie wartości z GDTR.
LIDT – instrukcja załadowania IDTR.
SIDT – zapisanie wartości z IDTR.
Rejestry LDTR i TR
LDTR – Rejestr (selektor segmentu) lokalnej tablicy deskryptorów.
TR – Rejestr (selektor segmentu) aktualnie wykonywanego zadania.
LLDT – instrukcja załadowania LDTR.
SLDT – zapisanie wartości z LDTR.
Segment, który zawiera LDT musi być opisany deskryptorem w GDT.
Podczas ładowania selektora segmentu do LDTR z GDT jest
uzupełniana część niewidoczna dla programisty.
LTR – instrukcja załadowania TR.
STR – zapisanie wartości z TR.
Podczas ładowania selektora zadania jest uzupełniana część
niewidoczna opisująca segment TSS (Task-State Segment).
Zmiana zawartości TR zachodzi także podczas przełączania zadania.
Rejestr sterujący CR0
Znaczenie bitów rejestru CR0:
PG – bit stronicowania
CD – Cache Disable, “1” wyłącza pamięć cache.
NW – Not Write-through, “1” wyłącza tryb Write-through.
AM – Alignment Check, kontrola wyrównania danych w pamięci.
WP – Write Protect, zabezpieczenie przestrzeni użytkownika przed
zapisem z poziomu zarządcy.
NE – Numeric Error, zgłaszania błędów z wewnętrznego koprocesora.
ET – Extension Type, obecność koprocesora.
TS – Task Switched, zgłoszenie wyjątku przy użyciu instrukcji FPU po
przełączeniu z zadania już korzystającego z FPU (MMX, SSE...)
EM – Emulation, emulacja koprocesora.
MP – Monitor Coprocessor, monitorowanie instrukcji WAIT.
PE – Protection Enable, włączenie trybu chronionego.
Rejestry sterujące CR1, CR2, CR3
CR1 – Zarezerwowany.
CR2 – Liniowy adres, który spowodował powstanie #PF.
CR3 – Page Directowy Base Register, adres bazowy katalogu stron.
PCD – Page-level Cache Disable, włączenie zapisu katalogu stron do
pamięci cache.
PWT – Page-level Writes Transparent, tryb zapisu katalogu stron do
pamięci cache (Write-back czy Write-through).
Rejestry uruchomieniowe DR0- DR3
DR0–DR3 Zawierają liniowy adres czterech pułapek (breakpoints).
Użycie pułapek jest sterowane zawartością rejestrów DR6-DR7.
Rejestry DR4 i DR5 są zarezerwowane.
W Pentium użycie rejestrów DR4 i DR5 powoduje przy włączonych
rozszerzeniach uruchamiania (bit DE w CR4) wyjątek #UD.
Przy wyłączonych rozszerzeniach uruchamiania są mapowane na
DR6 i DR7.
Rejestry uruchomieniowe DR6, DR7
DR7 – Rejestr sterujący pułapkami.
LENn – Długość danych dla adresów pułapek (1,2 lub 4 bajty).
R/Wn – Rodzaj dostępu do pamięci (wykonanie, zapis, zapis/odczyt).
GD – Detekcja dostępu do rejestrów uruchomieniowych DR0-DR7.
LE i GE – Detekcja instrukcji (nie obsługiwane w Pentium).
Gn – Włączenie pułapki dla wszystkich zadań.
Ln – Włączenie pułapki dla aktualnego zadania.
DR6 – Rejestr stanu pułapek.
BT – Wyjątek spowodowany przełączeniem zadania.
BS – Wyjątek przy pracy krokowej.
BD – Wyjątek spowodowany dostępem do rejestru DRx.
Bn – Wyjątek spowodowany spełnieniem warunków pułapki.
Rejestry segmentowe w 386
Rejestry segmentowe zawierają
selektory segmentów.
●
Z każdym rejestrem segmentowym
jest związany rejestr deskryptora
segmentu – jest niewidoczny dla
programisty a jego ładowanie
następuje automatycznie.
●
Tablice deskryptorów
GDT – Globalna tablica
deskryptorów.
Jest jedna w systemie.
Element 0 nie używany.
LDT – Lokalna tablica
deskryptorów.
Może być jedna lub
wiele – osobna dla
zadania.
Jest umieszczona w
segmencie opisanym
przez deskryptor w
GDT.
Deskryptor segmentu
BASE – 32-bitowy adres liniowy początku segmentu.
LIMIT – 20-bitowe pole rozmiaru segmentu.
G
– Granularity, jednostka rozmiaru (1B, 4kB).
B/D – Default/Big, segment adresowany16- lub 32-bitowo.
AVL – Available To Software, do dowolnego wykorzystania.
P
– Present, obecność segmentu w pamięci.
DPL – Descriptor Priviledge Level, poziom ochrony segmentu.
S
– Descriptor type, wyróżnik deskryptora systemowego.
TYPE – Typ segmentu (n.p. bramka).
Deskryptor segmentu danych
S
– 1 – segment nie należący do grupy systemowych.
TYPE – 0 – segment danych.
– E – Expansion Direction, kierunek wzrostu.
– W – Writable, czy zapisywalny.
– A – Accessed, czy był używany.
Deskryptor segmentu kodu
S
– 1 – segment nie należący do grupy systemowych.
TYPE – 1 – segment kodu.
– C – Conforming, czy segment zgodny.
– R – Readable, czy odczytywalny.
– A – Accessed, czy był używany.
Deskryptor segmentu systemowego
B/D
AVL
S
TYPE
– Zarezerwowane
– Zarezerwowane
– 0 – segment należący do grupy systemowych.
– Deskryptor segmentu lokalnej tablicy deskryptorów LDT.
– Deskryptor segmentu stanu zadania TSS.
– Deskryptor bamki wywołania.
– Deskryptor bramki przerwania.
– Deskryptor bramki pułapki.
– Deskryptor bramki zadania.
Wywołanie poprzez bramkę
Wywołanie przez bramkę polega na podaniu jedynie selektora
segmentu w którym jest zakodowana wywoływana procedura.
●
Deskryptor bramki wywołania
Deskryptory bramek wywołania mogą być umieszczone w
tablicach GDT i LDT.
● P – bit obecności segmentu, do którego odwołuje się bramka.
● Param. Count – liczba słów jaka ma być skopiowana ze stosu.
●
Adresowanie wirtualne
Stronicowanie 4kB
Stronicowanie 4MB
Wpis w katalogu stron
4 kB
P
R/W
U/S
PWT
PCD
A
0
PS
G
Avail
– Present, strona obecna w pamięci.
– Read/Write, strona zapisywalna/odczytywalna.
– User/Supervisor, ochrona na poziomie stronicowania.
– Write-through.
– Cache Disabled.
– Accessed, strona była używana.
– Zarezerwowane “0”.
– Page Size, “0” oznacza 4kB, “1” oznacza 4 MB – brak tablicy.
– Global Page (ignorowany).
– Bity przeznaczone dla programisty.
4 MB
Wpis w tablicy stron
4 kB
P
– Present, strona obecna w pamięci.
R/W – Read/Write, strona zapisywalna/odczytywalna.
U/S – User/Supervisor, ochrona na poziomie stronicowania.
PWT – Write-through.
PCD – Cache Disabled.
A
– Accessed, strona była używana.
D
– Dirty, strona była modyfikowana i trzeba ją zapisać przed
usunięciem z pamięci.
PAT – Page Attribute Table.
G
– Global Page, zapobiega usuwaniu strony z TLB.
Avail – Bity przeznaczone dla programisty.
Stronicowanie
W przypadku, kiedy strona nie jest załadowana do pamięci
pojawia się #PF – obsługą tego wyjątku i załadowaniem strony ma
się zająć system operacyjny.
● Najczęściej używane wpisy w katalogu i tablicy stron są
przechowywane w specjalnej pamięci cache TLB (Translation
Lookaside Buffer).
● W nowych procesorach wprowadzono dodatkowy poziom tablicy
stron (wskażnik katalogu – przed katalogiem).
● Nowe procesory obsługują również strony o rozmiarze 2 MB
oraz adresowanie 36-bitowe.
●

Podobne dokumenty