Architektura komputerów Wykład nr 5: Sposoby adresowania Piotr Bilski
Skąd potrzeba różnych trybów adresowania? Przestrzeń pamięci rzeczywistej lub wirtualnej jest zwykle większa od przestrzeni adresowanej przez argument (zbyt mała liczba bitów) Konieczny jest kompromis pomiędzy zakresem adresów i prostotą uzyskiwania adresu
Adres rzeczywisty (efektywny) a adres wirtualny Adres rzeczywisty jest adresem fizycznego miejsca w pamięci Adres wirtualny (efektywny - AE) jest adresem przechowywanym jako argument rozkazu Proces translacji adresu wirtualnego na rzeczywisty jest zależny od organizacji pamięci
Konwencja zapisu AE – adres efektywny R – zawartość pola adresowego w rozkazie odnoszącym się do rejestru A – zawartość pola adresowego w rozkazie (X) – zawartość lokacji X
Tryby adresowania Natychmiastowy Bezpośredni Pośredni Rejestrowy Rejestrowy pośredni Z przesunięciem Stosowy
Tryb natychmiastowy 0 3 4 15 Kod operacji Wartość argumentu Argument jest przechowywany w rozkazie w postaci liczby o reprezentacji U2. Liczba ta nie może być zbyt duża
Tryb bezpośredni AE = A 0 3 4 15 Kod operacji Adres argumentu pamięć 0 3 4 15 Kod operacji Adres argumentu pamięć Argument AE = A
Tryb pośredni AE = (A) Możliwe zagnieżdżenia! 0 3 4 15 Kod operacji 0 3 4 15 Kod operacji Adres informacji o adresie argumentu pamięć AE = (A) Argument Możliwe zagnieżdżenia!
Tryb rejestrowy AE = R 0 3 4 15 Kod operacji Nazwa (numer rejestru) 0 3 4 15 Kod operacji Nazwa (numer rejestru) rejestry Argument AE = R
Tryb rejestrowy pośredni 0 3 4 15 Kod operacji Nazwa (numer) rejestru rejestry pamięć Adres Argument AE = (R)
Tryb z przesunięciem AE = (A)+(R) 0 3 4 15 Kod operacji 0 3 4 15 Kod operacji Nazwa (numer) rejestru Adres argumentu rejestry pamięć Adres Argument AE = (A)+(R)
Adresowanie z przesunięciem c.d. Adresowanie względne (R=PC) Adresowanie z rejestrem podstawowym (wygodne dla pamięci segmentowanej) – AE=R+A Indeksowanie (interpretacja pola rejestru i pola adresowego odwrotna niż w przypadku adresowania z rejestrem podstawowym) – AE=A+R
Adresowanie z przesunięciem c.d. Adresowanie z rejestrem podstawowym Indeksowanie (wykorzystuje dedykowany rejestr indeksowy) 0 3 4 15 Kod operacji Rejestr z adresem argumentu Wartość przesunięcia 0 3 4 15 Kod operacji Rejestr z przesunięciem Adres argumentu
Tryb stosowy 0 3 4 15 Kod operacji Adres argumentu stos rejestry 0 3 4 15 Kod operacji Adres argumentu stos rejestry Rejestr stosu
Typy adresów Fizyczny – umiejscowienie adresu w pamięci Logiczny – umiejscowienie adresu względem początku programu Bazowy – adres początku programu
Organizacja pamięci z poziomu systemu operacyjnego Pamięć stronicowana (model niewidzialny dla programisty) – podzielona jest na małe fragmenty (ramki stron), które przydzielane są fragmentom (stronom) programów Pamięć segmentowana (model dostępny dla programisty) – zapewnia odrębną przestrzeń adresową dla każdego procesu
Partycjonowanie z ustalonym rozmiarem Jest to podział pamięci na fragmenty o ustalonych rozmiarach (stałych lub zmiennych) 16 MB (SO) 16 MB 16 MB (SO) 4 MB 8 MB 16 MB
Partycjonowanie z rozmiarem dynamicznym Jest to podział pamięci na fragmenty o rozmiarach zależnych od zapotrzebowania procesów 16 MB (SO) 48 MB wolne 16 MB (SO) Proces 1 (20 MB) 28 MB wolne 16 MB (SO) Proces 1 (20 MB) Proces 2 (16) MB 12 MB wolne 16 MB (SO) Proces 3 (18 MB) Proces 2 (16) MB 12 MB wolne
Stronicowanie Proces A: pamięć pamięć Strona 0 Strona 1 11 Strona 2 11 12 13 14 15 16 17 18 11 12 13 14 15 16 17 18 Strona 0 Strona 1 Tablica stron procesu A: 11 12 15 Wolne ramki: 11 12 15 16 18 Strona 2
Adresy fizyczne i logiczne w strukturze stron pamięć Adres logiczny Adres fizyczny 11 12 13 14 15 16 17 18 Strona 0 1 30 12 30 Strona 1 Tablica stron procesu A: 11 12 15 Strona 2
Translation Lookaside Buffer Pamięć podręczna dla ostatnich translacji adresów w pamięci Bardzo szybka i mała TLB współpracuje z „prawdziwą” pamięcią podręczną Niewłaściwy projekt prowadzi do problemów w systemie (patrz procesory Phenom)!
Bufor translacji adresów (TLB) START TAK Zapis w TLB? Sprawdzanie TLB Aktualizacja TLB NIE Dostęp do tablicy stron Generacja adresu fizycznego NIE Obsługa błędu strony Strona w pamięci? TAK STOP
Segmentacja Prostota zarządzania strukturami danych o zmiennej wielkości Możliwość indywidualnego przypisywania praw procesom do poszczególnym segmentom Możliwość użytkowania segmentu przez wiele procesów Adresowanie: numer segmentu + adres względny
Przestrzenie adresowe Pentium Niesegmentowana pamięć niestronicowana (adres wirtualny = adres fizyczny) - sterowniki Niesegmentowana pamięć stronicowana (BSD) Segmentowana pamięć niestronicowana Segmentowana pamięć stronicowana (UNIX System V)
Segmentacja w Pentium II Adres wirtualny Odniesienie do segmentu Adres względny 16 bitów 32 bity 2 bity odniesienia do segmentu przeznaczone na mechanizm ochrony Adres względny pozwala adresować 232 = 4 GB pamięci Całkowita ilość adresowanej pamięci wynosi 216 x 232 = 64 TB Dostęp procesu do segmentu zależny jest od poziomu dostępności (oznaczany cyfrą od 0 – najwyższy do 3 - najniższy)
Selektor i deskryptor segmentu 16 3 2 1 0 Indeks TI PRV 31 D/B AVL Baza 31-24 GS 19-16 G P DPL S Type Baza 23-16 Baza 15-0 Granica segmentu 15-0
Stronicowanie w Pentium II Istnieje katalog stron o długości 1024 wpisów, dzielący pamięć na tyleż grup stron Każda grupa stron zawiera do 1024 wpisów Każda strona ma rozmiar 4 kB lub 4MB (w zależności od wartości bitu PSE) Tablice stron mogą być przechowywane w pamięci wirtualnej Bufor translacji adresów zawiera do 32 zapisów tablic stron dla określonego katalogu stron
Stronicowanie/segmentacja w Pentium II
Tryby adresowania Pentium Pentium posiada sześć rejestrów segmentowych (SR) do przechowywania adresów początkowych segmentów Z rejestrem segmentowym związany jest rejestr deskryptora segmentu (zawiera prawa dostępu do segmentu i jego długość) Dodatkowe rejestry (podstawowy i indeksowy) pomagają budować adres
Tryby adresowania Pentium c.d. Natychmiastowy (Arg = A) Rejestrowy (AL = R) Z przesunięciem (AL = (SR) + A) Z rejestrem podstawowym (AL = (SR) + (B)) Z rejestrem podstawowym z przesunięciem (AL = (SR) + (B) + A) Skalowane indeksowanie z przesunięciem (AL = (SR) + (I) x S + A) Z rejestrem podstawowym z indeksem i przesunięciem (AL = (SR) + (B) + (I) + A) Z rejestrem podstawowym ze skalowanym indeksem i przesunięciem (AL = (SR) + (I) x S + (B) + A) Względny (AL = (PC) + A)
Ilustracja trybów adresowania Pentium Rejestr segmentu Rejestr indeksowy Rejestr bazowy Selektor Pamięć Adres bazowy segmentu Skala Przemieszczenie Adres liniowy Rejestr deskryptora Granica
Zarządzanie pamięcią w PowerPC Implementacja zależna jest od architektury (32- lub 64-bitowej – prostsza lub bardziej złożona segmentacja) Mechanizm translacji adresu bloku stosowany jest jako alternatywa dla mechanizmu stronicowania – pozwala ominąć stronicowanie dla dużych bloków pamięci Posiada 16 rejestrów segmentowych
Adres efektywny i rzeczywisty PowerPC Adres rzeczywisty 0 3 4 19 20 31 Segment Strona Selektor bajtu 0 19 20 31 Numer strony rzeczywistej Wyrównanie bajta
Tryby adresowania PowerPC Pośredni (AE = (BR) + D ) Pośredni indeksowany (AE = (BR) +(IR)) Adresowanie rozgałęzień Bezwzględny (AE = I) Względny (AE = (PC) +I) Pośredni (AE = (LR/CR)) Rejestrowy stałopozycyjny (AE = GPR) Natychmiastowy (Arg = I) Rejestrowy zmiennopozycyjny (AE = FPR)
Format rozkazu Długość rozkazu jest ograniczona przez szerokość stosowanych magistral Długość rozkazu powinna być równa szerokości magistrali lub jej wielokrotności Konieczny jest kompromis pomiędzy liczbą bitów przeznaczoną na kod rozkazu a przestrzenią adresową Rozkazy zawierające kody o zmiennej długości są bardziej elastyczne
Kryteria projektowania rozkazów Liczba trybów adresowania Liczba argumentów Liczba rejestrów i ich zestawów Zakres adresów Stopień granulacji adresu (adresowanie po bajcie, czy po słowie?)
Przykład formatu w PDP-8 Rozkazy i dane o długości 12 bitów Jeden rejestr – akumulator Pamięć jest podzielona na strony o długości 27 = 128 słów Ósmy bit jest znacznikiem numeru strony
Rozkazy PDP-8 Rozkazy z odniesieniem do pamięci 0 2 3 4 5 11 Operacja D/I Z/C Przemieszczenie Rozkazy wejścia/wyjścia 0 2 3 8 9 11 1 1 0 Urządzenie Kod operacji Mikrooperacje i rozkazy z odniesieniem do rejestrów 0 3 4 5 6 7 8 9 10 11 1 1 1 x CLA CLL CMA CML RAR RAL BSW IAC
Rozkazy PDP-10 Elementy instrukcji są ortogonalne Adresowanie wyłącznie bezpośrednie 36-bitowy rozkaz i dane 0 8 9 12 13 14 17 18 35 Operacja Rejestr I Rejestr indeksowy Adres w pamięci
Format rozkazów Pentium 0-4 B 1-2 B 0-1 B 0-1 B 0-4 B 0-4 B Przedrostki Kod operacji ModR/M SIB Przesunięcie Natychmiastowe Specyfikator adresu
Format rozkazów PowerPC 6 b 5 b 5 b 16 b Operacja Opcje/rejestr Opcje/rejestr przeznaczenia źródłowy Wszystkie rozkazy mają długość 32 bitów!