AKII-Pentium-PowerPC
Transkrypt
AKII-Pentium-PowerPC
Architektura Pentium Potok P5 i P6 Struktura potoku Pentium / Pentium MMX Port 4 Port 3 BTB0 BTB1 IFU1 IFU2 ID0 ID1 RAT ROBR RS ROBW Port 2 RRF Port 1 Port 0 Struktura potoku w architekturze P6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Dr All Rename Que Sch Disp RF EX Flg BrC Dr TCNxtIP TC Fetch Cykle potoku Pentium 4 © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–1 © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 * N +, E O D # cache R Q + ! # # P J E O D + ! ) # $ K & $ K & J K J ( K H H L M H E D I & store & & J % J ' J % H H FG FG 9 # * . / :: - +, 0 2 0 0 = ; < 1 # ) > ? = # # 2 5 @ 3 4 (& ' %& 9 6 - 8 A B C / 4 7 # $ " ! cache cache ) ! Architektura Pentium Organizacja Pentium III PPC–2 © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 M cache K V ! E D D D store move # H U G mul add U T T F F F F T T G C IJ C IJ C BS # C BS # C B # C B # C B # P P IJ V IJ Q 7 R ) ! " J K Q 9 ( ' 8 & ' . ( % ( & % , * $ 9 + + , 0 ; ' %. : * - 0 "# ! << , / µ trace cache M L prognoza pobrania 3 G NO ?@ 4 5 6 % ( = > 2 1 2 A Architektura Pentium Organizacja Pentium IV cache bypass network PPC–3 Architektura Pentium 78 → © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 → " → ; Q " , = # < + N - ) ' + → K < # " . / 4 K ! ! Q # $% &' ( $ → ! N ) * ( ,+ . K / 0 5 6 : 1 2 3 9 pamięć Kontekst procesora (IA-32) Kontekst procesora – opis bie cego stanu procesu (segment TSS) • zawarto rejestrów roboczych, rejestrów stanu i rejestrów wyj tków • [wska nik kontekstu pami ci - wska nik LDTR do tablicy LDT] • wska niki dost pnych systemowych struktur danych (stosy 4 poziomów) • wska nik powi zania z procesem wywołuj cym (LINK) • dane specyficzne (np. tablica zezwole we/wy) PPC–4 Architektura Pentium Kontekst pami ci Kontekst pami ci – lokalny (LM) i globalny (GM) Aktualizacja kontekstu pami ci tylko w trybie nadzoru Kontekst pami ci (memory context) – w tablicy opisów (deskryptorów) pami ci • adresy i rozmiary bloków pami ci (segmentów) procesu i reguły dost pu do bloków pami ci procesu (deskryptory w LDT lub GDT) • obecno bloków pami ci procesu w pami ci głównej adres wirtualny (K) PT PCB (K) PCB (N) PCB (Q) CPU(K) dane specyficzne Kontekst K Kontekst N Kontekst Q [→ kontekst pami ci] rejestry robocze rejestry stanu [→ struktury systemowe] [→ powi zanie] © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 LM(K) adres fizyczny bloku (1) reguły dost pu (rozmiar bloku) … … … adres fizyczny bloku (n) reguły dost pu (rozmiar bloku) PPC–5 Architektura Pentium Segment TSS I/O permissions 0000 0000 0000 0000 0000 0000 0000 0000 LDT GS FS DS SS CS ES EDI ESI EBP ESP EBX EDX ECX EAX EFLAGS EIP CR3 0000 SS (2) ESP (2) 0000 SS (1) ESP (1) 0000 SS (0) ESP (0) 0000 © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 LINK PPC–6 Architektura Pentium Ochrona danych P Rozmiar seg. (L19...16) Adres bazowy segmentu (A31...24) G D/B 0 AVL DPL DPL S t t t t/a Adres bazowy segmentu (A23...16) Adres bazowy segmentu (A15...0) Rozmiar segmentu (L15...0) t t t t – segment systemowy (S = 0) 0h, 8h – nieokreślony 2h – tablica LDT 9h – segment TSS dostępny (IA-32) 0Bh – segment TSS zajęty (IA-32) 9h (1h) – segment TSS dostępny (80286) 0Bh (3h) – segment TSS zajęty (80286) 4h...7h – furtka 80286* 0Ch...0Fh – furtka IA-32 (80386+)* t t t a – segment zwykły (S = 1) 0h/8h – segment danych, RWX = (r – –) 1h/9h – segment danych, RWX = (r w –) 2h/Ah – segment danych (stos), RWX = (r – –) 3h/Bh – segment danych (stos), RWX = (r w –) 4h/Ch – segment kodu, RWX = (– – x) 5h/Dh – segment kodu, RWX = (r – x) 6h/Eh – segment kodu zgodny, RWX = (– – x) 7h/Fh – segment kodu zgodny, RWX = (r – x) Struktura deskryptora pami ci i deskryptora systemowego: P – bit obecno ci, DPL – poziom uprzywilejowania deskryptora, S – typ deskryptora, G – ziarnisto adresu (1 – rozmiar segmentu L23...0 podany w stronach 4 kB, 0 – rozmiar L15...0 podany w bajtach), AVL – dost pny, a – bit u ywalno ci, D/B – domniemany rozmiar adresu i operandu (1 – 32b, 0 – 16b) (format furtki pokazuje rys. A.7) selektor Nr deskryptora (13b) © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 S RPL PPC–7 Architektura Pentium Ochrona danych Przemieszczenie (d31...16) P DPL DPL S t 1 t a 0 0 0 Liczba słów przekazywanych Selektor (wirtualny) Przemieszczenie (d15...0) t 1 t a – deskryptor furtki (S = 0) 5h – furtka zadania (task gate) 0Ch (4h)– furtka wywołania (cal gate) 0Eh (6h) – furtka przerwania (interrupt gate) 0Fh (7h) – furtka potrzasku (trap gate) t 0 t a – segment danych kontekstowych 0h, 8h – nieokreślony 2h – tablica LDT 9h (1h) – segment TSS dostępny 0Bh (3h) – segment TSS zajęty Struktura systemowego deskryptora furtki (w nawiasach kod dla trybu wirtualnego 80286) © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–8 Architektura Pentium Ochrona danych pamięć główna przełączenie zadania wywołanie zewn. LDT GDT (LDT) CALL FAR … JMP FAR … deskryptor furtki adres atrybuty selektor CS ...x0bb CALL FAR … adres selektor ...x1bb wywołanie wewn. CALL FAR … JMP FAR … selektorCS segment kodu deskryptor pamięci atrybuty adres bazowy JMP FAR … TSS deskryptor pamięci atrybuty adres bazowy segment pamięci adres Rys. A.1. U ycie furtki i deskryptora LDT – deskryptory pami ci, furtki wywołania GDT – furtki zadania, deskryptory TSS IDT – furtki przerwania © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–9 Architektura Pentium Ochrona danych – poziomy ochrony Każdy rozkaz programu jest wykonywany na określonym poziomie ochrony, zwanym bieżącym poziomem uprawnień CPL (Current Privilege Level). Poziom ten może być zmieniony tylko przez zmianę selektora CS, co jest możliwe wyłącznie przez wykonanie skoku lub wywołania międzysegmentowego. Kod wymaganego poziomu uprawnień (Requested Privilege Level, RPL) jest zapisany na dwóch bitach selektora CS. Informacja o bieżącym poziomie uprzywilejowania jest porównywana z poziomem uprzywilejowania deskryptora zapisanym w polu DPL (Descriptor Privilege Level). Jeśli wskazywany jest segment pamięci, wtedy pole DPL określa minimalny poziom uprzywilejowania, uprawniający do dostępu do tego segmentu. Jeśli wskazywana jest furtka, to pole DPL wskazuje najwyższy dozwolony poziom uprzywilejowania, uprawniający do użycia tej furtki (aby zadania bardziej uprzywilejowane nie mogły korzystać z usług niższego poziomu). W takim przypadku zostają zignorowane bity RPL selektora docelowego, a procedura może być wykonana, jeśli poziom ochrony zapisany w polu DPL deskryptora segmentu kodu tej procedury nie jest niższy niż bieżący poziom uprzywilejowania. Dostęp do pamięci jest zawsze realizowany: przez deskryptor pamięci – do danych lub kodu własnego przez furtkę (zadanie, podprogram, przerwanie, pułapka) – do kodu innego zadania lub jego udostępnionej części (procedury). Podczas dostępu do pamięci należy porównać poziom DPL ze wskaźnikami CPL oraz RPL. Zasady zmiany poziomów ochrony są następujące: 1. Można wykonać procedurę o wyższym poziomie uprzywilejowania – nie można wykonać procedury mniej uprzywilejowanej (na niższym poziomie ochrony). Jeśli zadanie wykonywane na poziomie RPL korzysta z usługi na poziomie CPL to pole rpl selektora segmentu danych powinno zostać osłabione – istotny jest słabszy poziom. 2. Można uzyskać dostęp do danych na niższym poziomie ochrony – nie można uzyskać dostępu do danych bardziej uprzywilejowanych. Instrukcje we i wy mogą być wykonane tylko przez program, którego CPL jest nie niższy od wskazanego w polu IOPL (może być inne dla każdego zadania) lub tablicy zezwoleń we/wy (część opisu w segmencie TSS). © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–10 Architektura Pentium Stronicowanie 1 W architekturze IA-32 stronicowanie jest wtórnym mechanizmem adresowania wirtualnego. Segmentacja może być wyłączona tylko pozornie przez ustalenie dla każdego segmentu zerowego adresu bazowego i maksymalnego rozmiaru. Metoda ta jest określana jako płaski model pamięci (flat memory). Stronicowanie zostaje włączone po ustawieniu bitu 31 (PG) w rejestrze sterującym CR0. Rozmiar strony może być standardowy (4kB) lub rozszerzony (4MB). Dodatkowo ustawienie bitu rozszerzenia adresu fizycznego w rejestrze CR4 (b5=PAE – Physical Address Extension) umożliwia użycie stron o rozmiarze 2MB. W podstawowym trybie 10 najwyższych bitów adresu liniowego identyfikuje opis w katalogu, wskazujący aktywną tablicę stron, a 10 kolejnych aktualny opis strony w tablicy stron, a pozostałe 12 adres na stronie. W trybie rozszerzonym najwyższych 10 bitów adresu liniowego wskazuje opis strony w katalogu, który pełni teraz rolę tablicy stron, a pozostałe adres na stronie. Każdy opis strony jest 32-bitowy i zawiera 20- lub 10-bitowy numer strony fizycznej. Lokalizacja katalogu stron jest zapisana w rejestrze sterującym CR3. Deskryptor tablicy stron w katalogu oraz strony w tablicy mają taką samą strukturę. Najniższe 8 bitów deskryptora zawiera informacje o sposobie dostępu do strony (rys A.9), wyższe bity (12...31/35) są numerem (adresem) strony fizycznej. Dla strony można określić poziom uprzywilejowania (U/S=1 – poziom użytkownika, odpowiadający najniższemu poziomowi uprzywilejowania w segmentacji, lub systemowy – wszystkie pozostałe). 63 … … 31 … … … … 36 35 4 3 numer strony 11 ... 33 32 numer strony (zarezerwowane) 12 34 7 6 5 2 1 0 0 ... 0 D A PCD PWT U/S R/W P Rys. A.2. Struktura 32/64-bitowego deskryptora strony © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–11 Architektura Pentium Stronicowanie W obszarze strony można lokalnie wyłączyć (PCD=1) użycie wewnętrznej pamięci podręcznej oraz ustalić tryb współpracy z zewnętrzną pamięcią podręczną (PWT). Bit D równy 1 wskazuje, że w obszarze strony dokonano zapisu, P jest bitem obecności strony w pamięci głównej. W opcji z rozszerzonym 36-bitowym adresem fizycznym 2 najwyższe bity adresu logicznego służą do wyboru jednego z 4 katalogów. Lokalizacja opisu tych katalogów jest wskazana w rejestrze sterującym CR3. W trybie podstawowym kolejnych 9 bitów wskazuje deskryptor w katalogu stron lokalizujący aktywną tablicę stron, następnych 9 identyfikuje w tej tablicy 64-bitowy deskryptor, który zawiera 24-bitowy numer strony standardowej. W trybie rozszerzonym 2 bity adresu wskazują katalog, zaś 9 kolejnych – 64-bitowy deskryptor strony w tablicy stron. Strona ma tu rozmiar 2MB. wsk katalog tablica strona 2 (strona 4kB) 9 9 deskryptor 12L (21L) deskryptor dana deskryptor 32L 24H CR3 (32b) strona 4kB 24H 24H strona 4kB (15H) wsk katalog strona 2 (strona 2MB) deskryptor 21L 9 deskryptor dana deskryptor 32L CR3 (32b) 24H strona 4kB 15H strona 4kB Rys. A.3. Stronicowanie w trybie rozszerzonych adresów fizycznych © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–12 Architektura PowerPC Jednostka zmiennoprzecinkowa FPU dane Pamięć podręczna kodu Jednostka stałoprzecinkowa IU Pamięć podręczna danych adres Jednostka rozgałęzień BPU adres Architektura podstawowa Bufor DMA Układ sprzęgu z magistralą © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–a Architektura PowerPC Architektura – cechy PowerPC zdefiniowano jako otwartą architekturę 64-bitową – wszelkie adresy są 64-bitowe, argumenty obliczeń stałoprzecinkowych są także 64-bitowe. Procesor może jednak działać także w trybie 32-bitowym, a procesor 64-bitowy jest w stanie wykonać bezpośrednio kod wytworzony dla architektury 32-bitowej (przełączanie trybów jest dynamiczne). Otwartość architektury zapewnia przenośność programów i przejrzyste, spójne rozszerzenia 32-bitowej listy rozkazów dla wersji 64-bitowych. Jednym z założeń projektu PowerPC była optymalizacja architektury ze względu na łatwość tworzenia kodu wynikowego przez kompilatory. Cechami ułatwiającymi proces kompilacji i jego optymalizację są w szczególności: powiązania typu zmiennej z postacią kodu wynikowego stały rozmiaru kodu rozkazu, duża liczba rejestrów ułatwiająca tworzenie lokalnych powiązań zmiennych bezpieczne przechowywanie warunków dla rozkazów warunkowych. Zgodnie z postulatami koncepcji RISC, wszystkie rozkazy procesora o architekturze PowerPC, oprócz komunikacji z pamięcią (load i store), używają jako argumentów rejestrów procesora. Swobodny dostęp do rejestrów oraz trójoperandowe działania (wskazanie argumentów i wyniku w osobnych rejestrach) pozwalają wyeliminować kopiowanie rejestrów, a ich duża liczba (32 w jednostce stałoprzecinkowej oraz 32 zmiennoprzecinkowe) umożliwia ograniczenie komunikacji z pamięcią. © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–b Architektura PowerPC Spójno pami ci W architekturze POWER procesor nie testuje spójności danych w buforze pamięci podręcznej w części związanej z dostępem we/wy lub zawierającej kod (procesory POWER komunikują się z pamięcią główną tylko przez pamięć podręczną z jednym wyjątkiem, którym jest osobna przestrzeń, sygnalizowana przez ustawienie bitu T=1, interpretowana jako programowane we/wy). Testowanie musi być więc tam realizowane programowo. W PowerPC usunięto polecenia realizujące blokadę i śledzenie dostępu do danych, ponieważ mogłyby one utrudniać zarządzanie pamięcią. Model pamięci PowerPC jest też bardziej elastyczny niż w architekturze POWER. Atrybuty są kojarzone z każdą stroną przestrzeni wirtualnej, co umożliwia programową kontrolę rodzaju dostępu. Pozwala to na realizację spekulacyjnego trybu dostępu do każdej strony, chyba że ma ona przypisane cechy, które uniemożliwiają taka obsługę, na przykład przypisany atrybut we/wy. Pozostałe atrybuty wskazują, czy strona może być buforowana w cache i jaki jest tryb aktualizacji stron buforowanych. Pozwala to na jednolite odwzorowanie przestrzeni adresowej we/wy oraz przestrzeni pamięci (bez logicznej separacji tych przestrzeni). Ponieważ specyfikacja architektury nie przewiduje sprzętowego wspomagania protokołu MESI, ani żadnego innego, więc spójność pamięci podręcznej musi być kontrolowana programowo. Służą do tego nowe polecenia zarządzania buforami cache (sync, icbi, dcbt/dcbtst, dcbf, dcba, dcbi, dcbz). Instrukcja sync gwarantuje, że zanim zostanie podjęty następny rozkaz, wszystkie zainicjowane przez program dostępy do pamięci zostaną wykonane z zachowaniem wymagań spójności, uwzględniających działania innych procesorów w lokacjach docelowych. Instrukcji sync można też użyć w programie, aby przed zdjęciem blokady obszaru współdzielonych struktur danych upewnić się, że aktualizacja danych jest widziana przez inne procesory. Wykonanie instrukcji sync gwarantuje, że zakończyły działanie instrukcje zarządzające buforami cache (icbi, dcbz, dcbst, dcbf, dcba, dcbi) oraz instrukcja unieważniania bufora TLB. W celu wspomagania kontroli dostępu do współdzielonych bloków pamięci i ułatwienia implementacji mechanizmu semafora, w architekturze PowerPC zaprojektowano parę instrukcji komunikacji z pamięcią: „czytaj i modyfikuj” pamięć (lwarx/ldarx – load word/ double word and reserve indexed), kopiuje zmienną kluczującą z pamięci do rejestru, zapisując adres tej zmiennej w specjalnym rejestrze rezerwacji. Wykonując warunkowy rozkaz zapisu stwcx/stdcx (store word/ double word conditional indexed procesor sprawdza, czy rezerwacja jest aktualna (zgodny adres). Jeśli tak, to zapis jest wykonany, a na pozycji EQ w polu CR0 jest wpisane 1. Jeśli rezerwację anulowano zostaje wpisane EQ = 0. Ponieważ instrukcje lwarx i stwcx nie naruszają bitowej kompatybilności aplikacji POWER (można je nadal wykonywać bez użycia tych instrukcji), specyfikacja wymaga ich wpasowania na granicy słowa (word-aligned). Wynik niewpasowanego dostępu jest nieokreślony, więc kontrola wpasowania musi być programowa. Przyjęty słabo spójny model pamięci ułatwia niekolejne wykonanie rozkazów. Jeżeli dostęp do kolejnych lokacji musi być uporządkowany, na przykład dostęp do urządzeń we/wy, należy go wymusić instrukcją eieio (enforce in-order execution of I/O). © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–c Architektura PowerPC Lista rozkazów Wykonanie rozkazów arytmetycznych jest kontrolowane programowo. Stosownie do ustalonego typu argumentów zostaje dobrany wariant rozkazu stałoprzecinkowego a zapis cech wyniku w rejestrze warunków może być zablokowany. Syndromy wyniku działania arytmetycznego mogą być zapisane w rejestrach wyjątków, jeśli nie jest to zablokowane. Działanie stałoprzecinkowe może spowodować aktualizację w rejestrze XER bitu przeniesienia CA lub bitu nadmiaru OV. Bit nadmiaru skumulowanego SO po ustawieniu może być skasowany tylko w wyniku wykonania rozkazu sterującego. Wyjątki dla działań zmiennoprzecinkowych są notowane przez ustawienie bitów w rejestrze FPSCR, który jednocześnie jest rejestrem stanu jednostki FPU. Notowane są takie wyjątki jak: OX (nadmiar), UX (niedomiar), ZX (dzielenie przez zero), XX (błąd zaokrąglenia) oraz VX (błąd działania). Wyjątki te mogą być blokowane bitami masek (OE, UE, ZE, XE, VE). Bit VX jest sumą logiczną bitów wskazujących jedno z błędnych działań: VXSNAN (SNaN), VXISI (∞ – ∞),VXIDI (∞ / ∞),VXZDZ (0 / 0), VXIMZ (∞ ⋅ 0), VXVC (porównanie z NaN), VXCVI (błąd konwersji) oraz niedostępne w PowerPC 601 VXSOFT (inne błędne działanie) i VXSQRT (błąd liczenia pierwiastka kwadratowego). Porównanie Podstawowym sposobem wytwarzania warunku dla rozkazów warunkowych (rozgałęzień, pułapek) jest porównanie. Wariant rozkazu porównania jest dobierany odpowiednio do typu porównywanych argumentów. Porównanie arytmetyczne cmp odnosi się do liczb całkowitych, porównanie logiczne cmpl dotyczy liczb naturalnych (unsigned). Porównanie liczb zmiennoprzecinkowych może być standardowe fcmp lub rozszerzone fcmpu z wymuszaną sygnalizacją niedozwolonego działania. Wynik porównania jest zapisywany w polu rejestru kodów warunkowych CR w postaci bitów wskazujących wystąpienie relacji „>”, „=” lub „<”. Czwarty bit pola w porównaniu stałoprzecinkowym oznacza wystąpienie nadmiaru sumarycznego, a w porównaniu zmiennoprzecinkowym wskazuje niewykonalność operacji (jeden z argumentów jest nie-liczbą). Warunek może być też wytworzony automatycznie w polu CR0 jako efekt porównania wyniku stałoprzecinkowego działania arytmetycznego do zera. Działanie zmiennoprzecinkowe, inne niż porównanie, wytwarza w polu CR1 kody wyjątków. A.1.1. Działania stałoprzecinkowe Argumenty działań stałoprzecinkowych i zmienne składowe adresu efektywnego są umieszczane w rejestrach ogólnego przeznaczenia GPR0–GPR31. Jedna składowa adresu lub jeden z argumentów działania może być stałą natychmiastową. © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–d Architektura PowerPC Ponieważ wszystkie stałe są kodowane w formie skróconej, więc potrzebne są też rozkazy rozszerzania kodu na pełny rozmiar słowa. Są dwa sposoby rozszerzania: znakowe (odpowiada interpretacji kodu stałej jako dwójkowego uzupełnieniowego) oraz zerami (odpowiada naturalnej interpretacji kodu). W architekturze pomostowej PowerPC 601, oprócz rozkazów realizujących cztery podstawowe działania arytmetyczne, lista zawiera też usunięte ze specyfikacji rozkazy obliczania wartości bezwzględnej i odejmowania z nasycaniem (difference or zero). Dodawanie i odejmowanie W architekturze PowerPC jest wiele sposobów wykonania podstawowych działań arytmetycznych. Wariant wykonania jest zapisany w polu rozszerzenia kodu (rys. 3.5) i znajduje wyraz w mnemonice rozkazu. Podstawowy mnemonik rozkazu dodaj (add) lub odejmij (subf) jest uzupełniony symbolami wskazującymi sposób wykonania: …• – (aktualizuj CR0 – najniższy bit kodu b31(=Rc)=1, Rc – record), …o – (aktualizuj bitów OV, SO w rejestrze XER), …c – (aktualizuj bitu CA rejestrze XER), …co – (aktualizuj bitów CA, OV, SO w rejestrze XER), …i – (użyj stałej natychmiastowej immediate), …is – (dodaj stałą i sumę wpisz do górnej części rejestru (×216) immediate and shift), …e – (uwzględnij jako argument bit CA z rejestru XER i ustaw CA), …me – (użyj jako argumenty „−1” oraz CA z rejestru XER i ustaw CA), …ze – (użyj jako argumenty „0” oraz CA z rejestru XER i ustaw CA). Wariant rozkazu jest dobierany stosownie do typu danych. Jeśli argumenty są liczbami dodatnimi, to odpowiednie są rozkazy aktualizujące bit CA (…c), jeśli są liczbami ze znakiem, to odpowiednie są rozkazy aktualizujące bity OV i SO (…o). Jeśli realizowana jest arytmetyka rozszerzonej precyzji, właściwe są rozkazy używające jako dodatkowy argument zapamietany bit przeniesienia CA (…e). Rozkazy odejmowania od zera subfze umożliwiają zmianę znaku (uzupełnianie) argumentów całkowitych dowolnego rozmiaru, a rozkazy dodawania do zera addze ułatwiają korektę wyniku częściowego przeniesieniem z poprzedniej pozycji. Rozkazy używające argumentu „–1” są użyteczne w realizacji arytmetyki resztowej. Mno enie i dzielenie Dostępne są dwa sposoby tworzenia iloczynu: mullw – zapis do rejestru dolnej części iloczynu i mulhw – zapis do rejestru górnej części iloczynu. Jakkolwiek wynik dolnego mnożenia argumentów całkowitych (signed) i naturalnych (unsigned) jest taki sam, © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–e Architektura PowerPC to sygnalizowany jest nadmiar, jeśli ignorowane górne bity pełnego iloczynu nie są bitami rozszerzenia arytmetycznego. Typ mnożenia górnego musi być dostosowany do typu argumentów (odpowiada mnożeniu ułamków). Standardowe dzielenie jest dzieleniem krótkim (divs), gdzie rozmiary dzielnej, dzielnika i ilorazu są jednakowe (wszystkie argumenty są w rejestrach stałoprzecinkowych GPR#). W architekturze pomostowej PPC 601 (tak jak w POWER) w mnożeniu całkowitym pełnym (liczby znakowane) górna część iloczynu jest wpisana do specjalnego rejestru MQ. Jeśli rejestr MQ nie zawiera tylko bitów rozszerzenia znakowego, następuje sygnalizacja przekroczenia zakresu (ustawienie bitu OV w rejestrze XER). Dzielenie może być też wykonane z użyciem MQ – zawiera on wtedy górne bity dzielnej. A.1.2. Działania zmiennoprzecinkowe Podstawowym formatem zmiennoprzecinkowym w architekturze PowerPC jest format podwójnej precyzji (double – IEEE 754). Implementowane są proste działania arytmetyczne, w wersji podstawowej (dodawanie, odejmowanie, mnożenie, mnożenie akumulacyjne z dodawaniem/odejmowaniem, porównanie, dzielenie) lub rozszerzonej (obliczanie odwrotności liczby, obliczanie pierwiastka kwadratowego, oszacowanie odwrotności pierwiastka) z użyciem sprzętowej wersji metody Newtona-Raphsona. Inne działania są emulowane programowo. Ograniczenie zakresu argumentów do pojedynczej precyzji nie daje przyśpieszenia wykonania, bo argumenty są rozszerzane do podwójnej precyzji (rys. 3.12). Sposób zaokrąglania wyniku zmiennoprzecinkowego jest zgodny ze standardem IEEE 754 i może być wybrany przez wpisanie kodu w polu RN rejestru FPSCR. Tryb domniemany to zaokrąglanie do najbliższej (kod 00). Kod 01 wymusza obcinanie, zaś kody 1X są używane w realizacji arytmetyki przedziałowej. Jednostki zmiennoprzecinkowe mogą też wykonywać działania w innym trybie niż ustalony w standardzie IEEE 754, jeśli zostanie ustawiony bit NI w rejestrze FPSCR. A.1.3. Rozgałęzienia i pułapki Podstawą decyzji o rozgałęzieniu jest warunek zapisany we wskazanym polu rejestru CR. Ponieważ użycie warunku może być w ten sposób odsunięte w czasie od jego wytworzenia, więc dzięki temu znacznie spada ryzyko przestoju potoku wskutek błędnej prognozy rozgałęzień. Prognozy wymagają tylko rozgałęzienia odnoszące się do pól aktualizowanych bezpośrednio przed ich użyciem. Rozgałęzienie warunkowe może też być odniesione do rejestru licznikowego CTR. © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–f Architektura PowerPC Dostępne są też rozkazy rozgałęzień bezwarunkowych, zwykłych oraz ze śladem (odpowiadające wywołaniu procedury). Śladem jest adres powrotu umieszczany w rejestrze powiązań (LR, link register). Jego zawartość jest argumentem specjalnego rozkazu rozgałęzienia (odpowiadającego powrotowi z procedury). Specyficzną formą rozgałęzień są pułapki programowe. Jeśli podany warunek nie jest spełniony, to rozkaz taki jest ignorowany („nic nie wykonuj”), w przeciwnym razie następuje rozgałęzienie ze śladem. Procedura obsługi powinna dokładnie opisywać rozpoznane przyczyny wystąpienia sytuacji nadzwyczajnej, która w przetestowanych programach jest traktowana jako błąd wykonania. A.1.4. Działania logiczne i transformacje kodu Repertuar działań logicznych, oprócz zwykle implementowanych funkcji AND, OR i XOR, obejmuje też funkcje NAND, NOR i EQV oraz iloczyn i sumę logiczną z drugim argumentem zanegowanym ANDC oraz ORC. Bardzo rozbudowany jest zbiór rozkazów przesunięć. Przesunięcia cykliczne mogą być powiązane z maskowaniem bitów – maska jest uporządkowanym (0…01…1) lub bitonicznym (0…01…10…0) ciągiem bitów, a jej ustawienie jest argumentem rozkazu. Przesunięcia zwykłe, arytmetyczne (liczby ze znakiem) i logiczne (liczby bez znaku), odpowiadają skalowaniu przez potęgę dwójki. W architekturze pomostowej PowerPC 601 są implementowane także, usunięte ze standardowej specyfikacji PowerPC, tzw. przesunięcia długie (long), których argument jest złożeniem rejestru MQ i dowolnego rejestru stałoprzecinkowego GPR#. A.1.5. Kopiowanie do i z pamięci Repertuar rozkazów kopiowania do pamięci (store) oraz kopiowania z pamięci do rejestru (load) jest bardzo rozbudowany i obejmuje nie tylko transfery danych pełnego rozmiaru (32 lub 64 bity), lecz także kopiowanie argumentów skróconych. Podczas kopiowania argumentu niepełnego rozmiaru (bajtu, dwubajtu/ półsłowa) do pamięci zawartość wyższych bitów rejestru jest pomijana. Podczas kopiowania do rejestru, po skopiowaniu każdy bit rejestru musi mieć ustaloną wartość. Jest więc konieczne rozszerzanie argumentu: znakowe (odpowiadające liczbom całkowitym) lub zerami (odpowiadające liczbom dodatnie). Dostępne są także rozkazy kopiowania łańcucha słów z pamięci do bloku rejestrów (zestaw rejestrów o kolejnych numerach) lub z bloku rejestrów do pamięci oraz rozkazy kopiowania słów ze zmianą konwencji kolejności bajtów w słowie (BE na LE). Podczas kopiowania zmiennoprzecinkowego do rejestru argumenty pojedynczej precyzji są rozszerzane do podwójnej precyzji. Podczas kopiowania z rejestru, jeśli ma być wykonana konwersja na format pojedynczej precyzji, może wystąpić nadmiar lub niedomiar niesygnalizowany. © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–g Architektura PowerPC AltiVec Lista rozkazów nowszych generacji architektury PowerPC została rozbudowana o działania wektorowe, analogiczne do rozszerzeń MMX/SSE w architekturze Pentium. Działania te wykonuje jednostka AltiVec. Aby nie blokować potoku, jednostka ta nie generuje wyjątków, a obsługa problemów zmiennoprzecinkowych jest domniemana. Struktura kodu rozkazów jednostki AltiVec jest taka sama jak w architekturze podstawowej, a argumenty rozkazów, oprócz komunikacji z pamięcią, są umieszczone w rejestrach 128-bitowych v0...v31. Łańcuch 128 bitów umieszczonych w rejestrze, zależnie od potrzeb, jest interpretowany jako: • argument 128-bitowy nieokre lonego typu (działania logiczne, kopiowanie) • 4 argumenty zmiennoprzecinkowe pojedynczej precyzji (32-bitowe) • zestaw niezale nych argumentów stałoprzecinkowych: 2 dwusłowa 64bitowe, 4 słowa 32-bitowe, 8 półsłów 16-bitowych lub 16 bajtów. Repertuar podstawowych arytmetycznych działań stałoprzecinkowych jest nieco bogatszy niż w MMX/SSE (Pentium) i obejmuje: • • • • dodawanie i odejmowanie mno enie górne i dolne mno enie rekordów (pól) o numerach nieparzystych albo parzystych mno enie akumulacyjne górne i dolne Wyniki powyższych działań, z małymi wyjątkami, mogą być tworzone • z odcinaniem wy szych bitów (modulo 2k, k=8,16,32) • z nasycaniem bez znaku (jednokierunkowym) (obci cie do (0,28–1)) • z nasycaniem ze znakiem (dwukierunkowym) (obci cie do (–2k–1,2k–1–1)). Oprócz wymienionych wyżej, dostępne są też działania specyficzne, takie jak: © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–h Architektura PowerPC • • • • wyznaczanie przeniesie z sum lub ró nic wyznaczanie warto ci minimalnych i maksymalnych obliczanie redniej z zaokr gleniem w gór . akumulowana suma iloczynów. Dostępne są też rozkazy porównania, testujące relację większości dla argumentów bez znaku i ze znakiem oraz relację równości. Lista AltiVec obejmuje też taki sam zestaw działań logicznych jak architektura podstawowa oraz rozkazy rotacji i przesunięć. Dostępne są też instrukcje specyficzne wewnątrzelementowe (interelement), takie jak splatanie i permutacja rekordów oraz spakowanie i rozpakowanie argumentu. Działania zmiennoprzecinkowe obejmują dodawanie, odejmowanie i mnożenie i szacowanie pierwszych przybliżeń dla iteracyjnych algorytmów dzielenia, obliczania pierwiastka kwadratowego i obliczania wartości funkcji elementarnych. Oszacowania odwrotności dzielnika i odwrotności pierwiastka są wystarczające, aby w jednym kroku iteracji metodą Newtona-Raphsona uzyskać przybliżenie faktycznej wartości z dokładnością do najniższego bitu reprezentacji zmiennoprzecinkowej. Wspomaganie współbie no ci obejmuje rozkazy synchronizacji potoku, dostępu do współdzielonego obszaru pamięci i wywołanie systemowe © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–i Architektura PowerPC Adresowanie pami ci Adresowanie danych w pamięci może nastąpić tylko podczas wykonania rozkazów load lub store. Adres logiczny określa jeden lub dwa wskaźniki. Jeden z nich powinien być zawartością rejestru ogólnego przeznaczenia (GPR0 … GPR31), drugi może być albo stałą (zapisaną w formie skróconej) albo zawartością rejestru GPR# (z ewentualną automatyczną modyfikacją). Jeśli jako pierwszy argument jest specyfikowany rejestr GPR0, jego zawartość jest ignorowana (traktowana jak 0). Jeśli oba argumenty są w rejestrach, to obliczony adres wynikowy (suma zawartości rejestrów) jest zapisany w pierwszym rejestrze (adresowanie z automatyczną aktualizacją). Adresowanie kodu jest względne, z użyciem stałej przemieszczenia, określającej odległość lokalizacji kodu docelowego od bieżącej wartości licznika rozkazów. Można też wymusić interpretację przemieszczenia jako adresu bezwzględnego ze znakiem (przemieszczenie ujemne jest traktowane jako adres w górnym obszarze przestrzeni adresowej). Rozmiar i zakres stałej zależy od typu rozgałęzienia. Tryby adresowania We wszystkich rozkazach, oprócz rozkazów komunikacji z pamięcią (ld… – load oraz st… – store), występuje adresowanie rejestrowe bezpośrednie, gdzie numery rejestrów argumentów są specyfikowane w kodzie rozkazu, lub adresowanie zwarte, w którym argument jest domniemany (rozkazy sterujące). W rozkazach load i store adres logiczny danej jest wytwarzany przy użyciu najwyżej dwóch argumentów. W najprostszym trybie adres logiczny argumentu jest pobierany z rejestru ogólnego przeznaczenia GPR#. W adresowaniu dwuelementowym adres może być obliczany przez zsumowanie zawartości wskazanego rejestru adresującego i przemieszczenia, zapisanego w kodzie rozkazu jako liczba całkowita (rozszerzana znakowo podczas obliczania adresu) lub przez dodanie zawartości dwóch rejestrów adresujących GPR# (adresowanie bazowo-indeksowe). Jeśli jako pierwszy wskazany jest rejestr numer zero, jego zawartość jest traktowana jako wartość 0. Adresowanie dwuelementowe może być zrealizowane z aktualizacją i wtedy obliczony wynikowy adres logiczny jest zapisywany w rejestrze bazowym (pierwszy wyspecyfikowany na liście wskaźników). W jednostce AltiVec do adresowania należy zawsze wskazać dwa rejestry ogólnego przeznaczenia. Podstawowym trybem adresowania kodu jest adresowanie względem bieżącej zawartości licznika rozkazów. W niewielkim zakresie adresowanie kodu może być też bezwzględne – zakres jest wyznaczony rozmiarem stałej. W 32-bitowej wersji PowerPC w rozgałęzieniach bezwarunkowych stała jest liczbą całkowitą 26-bitową (odpowiada to adresom z zakresu 0…225–1 albo 232–225…232– 1), w rozgałęzieniach warunkowych stała jest 16-bitowa (adresy 0…215–1 albo 232–215…232–1). W wersji 64-bitowej zakres adresów jest taki sam, z uwagi na ustalony 32-bitowy rozmiar kodu rozkazu. © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–j Architektura PowerPC Adresowanie wirtualne W trybie 64-bitowym najwyższe 32+4 bity adresu stanowią efektywny identyfikator segmentu (ESID). Pięć najniższych bitów identyfikatora a w razie chybienia negacja tych bitów, wskazuje 8-elementową grupę segmentów STEG# (rys. B.2) w tablicy opisów segmentów (ST). Element każdej grupy (STE#) jest deskryptorem, którego pierwsze dwusłowo (8B) zawiera 36-bitowy wzorzec identyfikatora segmentu (ESID), bit 56 (V) jest wskaźnikiem ważności odwzorowania, bit 57 (T) wskazuje typ transferu (pamięć lub we/wy), bity 58 (ks – system) i 59 (ku – użytkownik) kodują uprawnienia dostępu. Drugie podwójne słowo zawiera 52-bitowy wirtualny identyfikator segmentu (VSID), który złożony z 28 niższymi bitami adresu logicznego (PI|BO) tworzy 80-bitowy adres wirtualny. Jeśli we wskazanej grupie brak potrzebnego odwzorowania, poszukiwane jest odwzorowanie pod adresem zanegowanym. Najniższe 12 bitów (BO) jest adresem wewnętrznym na stronie (logicznej, wirtualnej i rzeczywistej)(rys. B.2). Tablica segmentów ST STEG00 STE0 STE1 STE2 STEG01 STE0 STE1 STE2 STEG02 STE0 STE1 STEG30 STE0 STE1 STE2 STE7 STEG31 STE0 STE1 STE2 STE7 0 35 36 ESID STE7 00...00 55 56 63 V T ks ku 000 VSID 00...00 0 5 51 52 0 35 36 ESID 63 51 52 PI 63 BO chybienie 16 Bufor TLB segmentów 0 trafienie 51 52 VSID 12 67 68 PI 79 BO wirtualny adres strony © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–k Architektura PowerPC Adresowanie wirtualne 32b W trybie 32-bitowym najwyższe 4 bity adresu logicznego wskazują jeden spośród 16 rejestrów segmentów (analog tablicy segmentów w trybie 64-bitowym). Rejestr segmentu zawiera 32-bitowy deskryptor, którego najniższe 24 bity stanowią wirtualny numer segmentu VSID. Najwyższe bity to T, ks, ku, których znaczenie jest takie jak w trybie 64-bitowym. Wirtualny 24-bitowy numer segmentu po złożeniu z 28 niższymi bitami adresu logicznego (PI|BO) tworzy 52-bitowy adres wirtualny. Najniższe 12 bitów adresu logicznego (i wirtualnego) jest adresem wewnętrznym na stronie (wirtualnej i rzeczywistej). Pozostałe, po przekształceniu funkcją haszującą, stanowią wskaźnik deskryptora strony w tablicy stron. Sposób przekształcenia jest podobny w obu trybach. Funkcją skrótu (haszującą) jest bitowa suma wykluczająca (XOR) rozszerzonego lewostronnie zerami numeru strony wirtualnej (PI) i niższych (19 lub 40) bitów wirtualnego numeru segmentu (VSID). Tak wyznaczone n niższych bitów kodu (10 ≤ n ≤ 19 w trybie 32-bitowym, 11 ≤ n ≤ 39 w trybie 64-bitowym) jest wskaźnikiem do tablicy stron zawierającej 2n+3 deskryptorów stron PTE# (rys. B.3). Tablica stron PT VSID 51 52 56 57 61 63 API 00..00 H V RPN 000 RC WMIG 00 PP 0 PTEG..00 PTE0 PTE1 PTE2 PTEG..01 PTE0 PTE1 PTE2 PTEG..02 PTE0 PTE1 PTEG.2n–2 PTE0 PTE1 PTE2 PTE7 PTEG.2n–1 PTE0 PTE1 PTE2 PTE7 PTE7 0 51 55 1 chybienie trafienie Bufor TLB stron RPN n 24 V VSID RPN n API 0 © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 0...0 VSIDL 26 31 H API 000 RC WMIG 00 PP 19 #ID VSIDH 63 23 31 PI PI BO PPC–l Architektura PowerPC Stronicowanie cd W trybie 32-bitowym wynikiem funkcji skrótu jest kod 19-bitowy (VSID5:23⊕000|PI) zaś n = 10…19. W trybie 64-bitowym kod wynikowy jest 39-bitowy (VSID13:51⊕0..00|PI) zaś n = 11…39. Z uwagi na rozmiar deskryptora (64 lub 128-bitowy) adres w tablicy stron jest tworzony przez prawostronne rozszerzenie p zerami liczby n a tablica stron musi być umieszczona począwszy od adresu 2n+p (w trybie 32-bitowym p=6, w trybie 64-bitowym p=7). Zaleca się, aby liczba grup wejść w tablicy PT była nie mniejsza od połowy liczby stron rzeczywistych (4 razy więcej stron wirtualnych niż rzeczywistych). Do identyfikacji deskryptora PTE# w grupie PTEG# (adresem grupy w tablicy jest n2p) wystarczy kilka najwyższych bitów (API) wirtualnego numeru strony (6 w trybie 32-bitowym lub 5 w 64-bitowym), bo kody identyfikatorów w jednym segmencie mogą się różnić najwyżej na 16–n pozycjach (16–n ≤ rozmiar API). Przeszukiwane są jednocześnie dwie grupy deskryptorów, odpowiadające prostej i inwersyjnej wartości funkcji haszującej. Bit H w deskryptorze wskazuje, czy opis jest związany z funkcją prostą (H=0 i wtedy następuje porównanie z bitami API), czy też inwersyjną (H=1 i wtedy następuje porównanie z zanegowanymi bitami API). Dzięki temu opis strony może być umieszczony w jednej z dwóch lokacji w tablicy stron. A.1.6. Translacja blokowa Adresowanie w trybie translacji blokowej umożliwia spójne odwzorowanie dużych bloków pamięci bez stronicowania. Blok musi zawierać 2B bajtów (17 ≤ B ≤ 28) a jego rozmiar określa monotoniczna maska bitowa (0…01…1) w deskryptorze bloku. Fizyczny adres bajtu w bloku jest złożeniem 17+p niższych bitów adresu logicznego z bitami numeru bloku rzeczywistego oprócz p niższych (które są zerami, bo blok musi być wpasowany od adresu m⋅217+p), gdzie p jest liczbą jedynek w masce. Opis translacji blokowej jest zapisany w deskryptorach umieszczonych w zestawie rejestrów specjalnego przeznaczenia. Deskryptor translacji zawiera numer bloku logicznego (BEPI), numer bloku rzeczywistego (BRPN), 11-bitową maskę rozmiaru (BLS), bity poziomu uprzywilejowania vu i vs, oraz analogiczne jak w stronicowaniu: bity ochrony PP i sterowania buforem cache (WIMG). Opis obejmuje 4 bloki (rys. B.4). © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–m Architektura PowerPC adres wirtualny VSID PI BO BEPI #ID +32 0 15 BEPI 0..0 BRPN 3 vs vu 0..0 0…00 WIMG 0 PP BEPI 0..0 BRPN 11 BLS BLS vs vu TLB chybienie 0..0 0…00 WIMG 0 PP maska 0..00 PI BRPN 0..0 BO OR BRPN adres rzeczywisty PI BO RPN BO Rys. B.1. Translacja adresu wirtualnego w rzeczywisty Deskryptor dla trybu 64-bitowego różni się od deskryptora trybu 32-bitowego tylko rozmiarem pól BEPI i BRPN (dłuższe o 32 bity). Translacja blokowa jest priorytetowa wobec stronicowania. Przekształcony przez funkcję skrótu adres logiczny (bez 17 najniższych bitów) jest porównany z 4 opisami translacji blokowej. W razie trafienia translacji blokowej (rys. B.4) zostaje zaniechane stronicowanie. © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–n Architektura PowerPC A.1.7. Ochrona danych Ochrona danych jest opisana na poziomie segmentu i bloku albo strony. Obejmuje prawa zapisu i odczytu. Poziom ochrony jest określany na podstawie bitu generalnego uprzywilejowania PR (0 – system, 1 – użytkownik) w rejestrze stanu procesora MSR, kluczy ochrony ks i ku zapisanych w rejestrze lub deskryptorze segmentu oraz dwóch bitów ochrony bloku lub strony PP. Jeśli bity PP mają wartość 11, to możliwy jest tylko odczyt strony albo bloku. Jeśli PP=00, to w razie gdy kuPR+ks(1–PR)=1 dostęp jest zakazany, w przeciwnym razie możliwy jest tylko odczyt. Gdy PP=10, to dozwolony jest odczyt i zapis, zaś przy PP=01 zapis jest dozwolony tylko wtedy, gdy kuPR+ks(1–PR)=0. Podczas translacji blokowej sprawdzana jest dodatkowo ważność opisu bloku dla pracy (vs i vu) w trybie użytkownika lub nadzoru. Jeśli zachodzi zgodność, czyli wtedy, gdy vuPR+vs(1–PR)=1, opis translacji blokowej jest ważny i następuje adresowanie blokowe. W przeciwnym razie jest realizowane stronicowanie. Dodatkowym elementem ochrony jest niespecyfikowany w podstawowej definicji architektury PowerPC bit N w rejestrze lub deskryptorze segmentu. Jego domniemaną wartością jest 0; wartość 1 uniemożliwia wykonanie kodu z danego segmentu. A.1.8. Przestrzeń we/wy Zalecanym sposobem komunikacji z urządzeniami we/wy jest komunikacja przez pamięć (odwzorowanie przestrzeni we/wy jako części przestrzeni pamięci). Takie odwzorowanie musi być jednak odpowiednio opisane w deskryptorze bloku lub strony za pomocą bitów WMIG. Należy zablokować kopiowanie do bufora pamięci podręcznej (I=1) i nakazać kontrolę transferu (G=1). Stan bitów WM nie jest krytyczny przy blokadzie bufora cache, lecz zaleca się ustalić zapis skrośny (W=1) oraz pomijanie testu spójności pamięci (M=0). W celu utrzymania kompatybilności z architekturą POWER możliwe jest jednak bezpośrednie odwzorowanie przestrzeni we/wy. Jest ono ustalone przez ustawienie bitu T=1 w rejestrze (lub deskryptorze) segmentu. W takim przypadku 9 bitów rejestru segmentu BUID (w trybie 32-bitowym) lub 7 bitów deskryptora segmentu (zgodne z BUID2:8) jest identyfikatorem urządzenia, zaś inne 20 bitów rejestru lub deskryptora segmentu zawiera informacje dla sterownika urządzenia we/wy. © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–o Architektura PowerPC Przerwania W architekturze PowerPC każda sytuacja wymagająca specjalnej obsługi, w tym także żądania obsługi urządzeń peryferyjnych nazywa się wyjątkiem (exception). Wyjątki sygnalizowane są przez przerwania (interrupt). W konsekwencji pojęcia te są używane zamiennie – w specyfikacji architektury jest zwykle mowa o przerwaniach a w podręcznikach programistów o wyjątkach. Ze względu na moment zgłoszenia wyróżnia się przerwania synchroniczne, związane z jakąś fazą wykonania instrukcji oraz asynchroniczne, których zgłoszenie jest skutkiem zdarzenia zewnętrznego. Ze względu na sposób obsługi wyróżnia się dwa rodzaje przerwań: precyzyjne (żądanie obsługi zdarzeń z otoczenia procesora lub błędów przetwarzania) i nieprecyzyjne, które są żądaniem obsługi zdarzeń grożących utratą spójności systemu. Spośród przerwań asynchronicznych dwa są nieprecyzyjne: błąd kontroli maszyny (machine check error) i żądanie wznowienia (reset). Pozostałe przerwania asynchroniczne są precyzyjne. Są to żądania obsługi urządzeń peryferyjnych lub sygnalizacja upływu czasu (decrementer). Przerwania wewnętrzne są synchroniczne. Niektóre z nich (błędy jednostki zmiennoprzecinkowej) można blokować programowo. Blokada polega na zerowaniu bitów w rejestrze stanu procesora MSR. Obsługa wszystkich przerwań jest realizowana w trybie nadzoru (supervisor mode). Wszystkie przerwania są wektoryzowane. Przekazany do procesora numer przerwania jest zamieniany na adres w tablicy przerwań. Istnieje możliwość obsługi 212 przerwań, na obsługę każdego przeznacza się nominalnie 256 bajtów pamięci (64 rozkazy), co wymaga zarezerwowania na ten cel 1MB pamięci. Faktyczne procedury obsługi mogą być oczywiście dłuższe niż 64 rozkazy. Lokalizacja tablicy przerwań zależy od stanu bitu IP w rejestrze MSR – jeśli IP=0, to adresem bazowym jest 0x0, jeśli zaś IP=1, to adresem bazowym jest 0xFFF00000. Zwykle podczas inicjalizacji systemu IP=1, później następuje przełączenie. Pierwsze 32 numery przerwań są zarezerwowane w specyfikacji architektury. W tej grupie mieszczą się oba przerwania nieprecyzyjne (żądanie wznowienia i błąd kontroli procesora), wewnętrzne przerwania precyzyjne takie jak: błąd dostępu do danych, błąd dostępu do kodu, błąd wpasowania kodu, wywołanie systemowe i przerwania zewnętrzne: sygnalizacja upływu czasu i błąd sprzęgu we/wy. Po rozpoznaniu przerwania następuje zapamiętanie stanu procesora i zależnie od przyczyny zapamiętanie adresu następnej instrukcji (przerwanie zewnętrzne) lub instrukcji, która spowodowała przerwanie (przerwanie wewnętrzne). Podczas obsługi przerwań adresy logiczne nie podlegają translacji i są traktowane jak adresy fizyczne. Pozwala to uniezależnić obsługę przerwań od struktury zadań w systemie. © Janusz Biernat, AKII-Pentium-PowerPC (red), 16 czerwca 2010 PPC–p