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.
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. Tablice deskryptorów
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 Zarezerwowane AVL Zarezerwowane S 0 segment należący do grupy systemowych. TYPE 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 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. 0 Zarezerwowane 0. PS Page Size, 0 oznacza 4kB, 1 oznacza 4 MB brak tablicy. G Global Page (ignorowany). Avail 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.