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. ●