Model von Neumanna 0.1 dane i rozkazy AC Jednostka arytmetyczno- -logiczna MBR Urządzenia wejścia- -wyjścia Pamięć główna rozkazy sygnały sterujące adresy IR Programowa jednostka sterująca MAR PC
Procesor 0.2 Rejestry Układ współpracy zszynami Jednostka sterująca połączenia wewnętrzne Jednostka arytmetyczno- -logiczna Jednostka arytmetyczno- -logiczna Jednostka arytmetyczno- -logiczna
Architektura współczesnego komputera(1) 0.3 sygnały sterujące adresy dane M P I/O
Architektura współczesnego komputera(2) 0.4 P P I/O M bridge I/O I/O I/O I/O I/O
Architektury typu Princeton i Harward 0.5 program i dane program dane M M M P P
Klasyfikacja Flynna 0.6 liczba strumieni instrukcji liczba strumieni danych 0 1 >1 0 NISD NIMD 1 automat SISD SIMD >1 automat MISD MIMD NI no instruction SI single instruction MI multiple instruction SD singledata MD multipledata
Pamięć architektur wieloprocesorowych(1) 0.7 Tylko pamięć lokalna M M M M P P P P I/O I/O I/O I/O
Pamięć architektur wieloprocesorowych(2) 0.8 SMP Symmetric Multi-Processing UMA Uniform Memory Access(Architecture) M P P P P
Pamięć architektur wieloprocesorowych(3) 0.9 NUMA Non-Uniform Memory Access(Architecture) M M M M P P P P
Pamięć architektur wieloprocesorowych(4) 0.10 COMA Cache Only Memory Architecture M M M M P P P P
Mieszane modele pamięci 0.11 Typowo2do16procesorówtworzywęzeł(ang.node)SMP. Węzły są połączone w NUMA typowe dla superkomputerów. Każdy węzeł ma bezpośredni dostęp tylko do swojej pamięci lokalnej typowe dla klastrów.
Kod maszynowy a asembler 0.12 kod maszynowy binarny sposób opisu rozkazów procesora Każda architektura ma swój unikalny kod maszynowy. W obrębie tej samej architektury kod maszynowy może być nieco różny dla poszczególnych modeli procesorów. asembler język programowania niskiego poziomu Jedno polecenie odpowiada zwykle jednemu rozkazowi maszynowemu. Każda architektura ma swój unikalny asembler. asembler program tłumaczący asembler na kod maszynowy GNU Assembler nazwa własna konkretnego asemblera
Dlaczego Z80? 0.13 Jeden z najpopularniejszych mikroprocesorów 8-bitowych Nadal produkowany i używany Bezpośredni wpływ na najpopularniejszą obecnie architekturę x86 Wystarczająco prosty
Z80 rejestry 0.14 A F A F B C B C D E D E H L H L PC SP IX IY I IFF R
Z80 przesyłanie danych 8-bitowych(1) 0.15 LDd,s 01 d s d, s argument 000 B 001 C 010 D 011 E 100 H 101 L 110 (HL) 111 A
Z80 przesyłanie danych 8-bitowych(2) 0.16 LDd,n 00 d 110 n d argument 000 B 001 C 010 D 011 E 100 H 101 L 110 (HL) 111 A
Z80 przesyłanie danych 8-bitowych(3) 0.17 LD(p),A LDA,(p) 000pd010 LD(aa),A LDA,(aa) 0011d010 aal aah p para rejestrów 0 BC 1 DE d kierunek 0 z akumulatora do pamięci 1 z pamięci do akumulatora
Z80 rejestry indeksowe(1) 0.18 LDr,(HL) LDr,(i+d) 01 r 110 11 i 11101 01 r 110 d r rejestr 000 B 001 C 010 D 011 E 100 H 101 L 111 A i rejestr indeksowy 0 IX 1 IY
Z80 rejestry indeksowe(2) 0.19 LD(HL),n LD(i+d),n 00110110 11 i 11101 n 00110110 d n i rejestr indeksowy 0 IX 1 IY
Z80 rejestry primowane 0.20 EXAF,AF 00001000 EXX 11011001
Z80 rejestr znaczników 0.21 S Z AC P/V N CY S najstarszy bit wyniku operacji, wynik ujemny Z wynikoperacjizerowy AC pomocnicze przeniesienie z pozycji 3, arytmetyka BCD P/V znacznik parzystości dla operacji logicznych i nadmiaru(ang. overflow) dla operacji arytmetycznych N znacznik zerowany przy wykonywaniu dodawania i ustawiany przy wykonywaniu odejmowania, arytmetyka BCD CY znacznik przeniesienia(pożyczki przy odejmowaniu)
Z80 8-bitowe operacje arytmetyczno-logiczne 0.22 10 op s 11 op 110 n s argument 000 B 001 C 010 D 011 E 100 H 101 L 110 (HL) 111 A op operacja 000 ADDA,y 001 ADCA,y 010 SUBA,y 011 SBCA,y 100 ANDA,y 101 ORA,y 110 XORA,y 111 CPA,y y {s,n}
Z80 rotacje i przesunięcia bitów 0.23 RLx CY x RRx CY x RLCx CY x RRCx CY x SLAx x CY 0 SRL x 0 x CY SRA x x CY x {A,B,C,D,E,H,L,(HL),(IX+d),(IY+d)}
Z80 operacje na adresach(1) 0.24 Ładowanie LDp,nn LDp,(aa) LD(aa),p gdziep {BC,DE,HL,SP,IX,IY} Zamiana EXDE,HL Zwiększenie i zmniejszenie o jeden INCp DECp gdziep {BC,DE,HL,SP,IX,IY}
Arytmetyka 16-bitowa ADDHL,p ADCHL,p SBCHL,p gdziep {BC,DE,HL,SP} Z80 operacje na adresach(2) 0.25 Dodawanie i odejmowanie wartości w rejestrach indeksowych ADDIX,p gdziep {BC,DE,SP,IX} ADDIY,p gdziep {BC,DE,SP,IY}
Z80 stos(1) 0.26 Zajmuje pewien obszar w pamięci. Rejestr SP wskazuje wierzchołek stosu ostatni zajęty bajt. Stosrośniewdół wkierunkumniejszychadresów.
PUSHp Z80 stos(2) 0.27 Odkłada na stos najpierw starszy, potem młodszy bajt argumentu(architektura little-endian). ZmniejszaSPo2. p {AF,BC,DE,HL,IX,IY} POPp Zdejmuje ze stosu najpierw młodszy, potem starszy bajt i umieszcza je w argumencie. ZwiększaSPo2. p {AF,BC,DE,HL,IX,IY}
Inicjowanie wskaźnika stosu LDSP,nn LDSP,(aa) LDSP,p gdziep {HL,IX,IY} Manipulowanie wierzchołkiem stosu INCSP DECSP EX(SP),p gdziep {HL,IX,IY} Z80 stos(3) 0.28
Z80 skoki i podprogramy 0.29 JP aa CALL aa RET 11000011 11001101 11001001 aal aal aah aah JPwykonujeskokpodpodanyadres(wpisujeaadoPC). CALL odkłada na stos adres następnego rozkazu(adres powrotu) i wykonuje skok pod podany adres. RETzdejmujezestosuadrespowrotuiwykonujeskokpodten adres.
Z80 rozkazy warunkowe 0.30 JPw,aa CALLw,aa RETw 11 w 010 11 w 100 11 w 000 aal aah aal aah w skrót warunek skoku 000 NZ Z=0 001 Z Z=1 010 NC CY=0 011 C CY=1 100 PO P/V=0 101 PE P/V=1 110 P S=0 111 M S=1
Z80 skoki względne 0.31 JRd JRv,d 00011000 001 v 000 d d v skrót warunek skoku 00 NZ Z=0 01 Z Z=1 10 NC CY=0 11 C CY=1 SkokwzględnydodajedoPCwartośćdtraktowanąjakoliczbaze znakiem.
Z80 cykl pracy 0.32 cykl rozkazowy cykle procesora cykle zegara ADDA,E pobranie T 1 T 2 T 3 T 4 cykl rozkazowy cykle procesora cykle zegara INC(HL) pobranie odczyt zapis T 1 T 2 T 3 T 4 T 1 T 2 T 3 T 1 T 2 T 3 Istotne są tylko dostępy do pamięci!
Z80 przerwania 0.33 Służą do sygnalizowania procesorowi, że jakieś urządzenie wymaga obsługi, np.: wciśnięto klawisz, odebrano pakiet danych. Niemaskowalne zawsze aktywne Maskowalne włączane rozkazem EI ustawienie przerzutnika przerwań IFF wyłączane rozkazem DI wyzerowanie IFF
Z80 zgłaszanie przerwań 0.34 Urządzenie chcąc zgłosić przerwanie, podaje stan niski na wejście NMIlubINT. Procesor testuje stan tych wejść w ostatnim takcie zegara każdego cyklu rozkazowego. Jeśli wejście NMI ma stan niski, zamiast wykonywać kolejny rozkaz, procesor przechodzi do obsługi przerwania niemaskowalnego. Jeśli wejście INT ma stan niski i przerwanie maskowalne jest włączone, zamiast wykonywać kolejny rozkaz, procesor przechodzi do obsługi przerwania maskowalnego.
Z80 obsługa przerwania niemaskowalnego 0.35 Zapamiętywany jest aktualny stan IFF. Przerwania maskowalne są wyłączane IFF jest zerowany. Wykonywany jest skok do podprogramu obsługi rozpoczynającego sięodadresu(66) 16. Zakończenie obsługi polega na wykonaniu rozkazu RETN. RozkazRETNzdejmujezestosuadrespowrotuiwpisujegodoPC oraz przywraca poprzednią wartość IFF.
Z80 obsługa przerwania maskowalnego(1) 0.36 Procesor generuje zmodyfikowany cykl pobrania rozkazu. W tym cyklu wystawia sygnał potwierdzenia przyjęcia przerwania. Urządzenie zgłaszające przerwanie po rozpoznaniu potwierdzenia wystawia na szynę danych numer przerwania b. Wartość PC jest odkładana na stosie. Przerwanie maskowalne jest wyłączane. Z tablicy przerwań pobierany jest adres obsługi przerwania. Tablica przerwań jest wskazywana przez rejestr przerwań I.
Z80 obsługa przerwania maskowalnego(2) 0.37 Adres początku procedury obługi przerwania numer b znajduje się podadresami28 I+b(młodszybajt),28 I+b+1(starszybajt). Do PC wpisywany jest adres początku procedury obługi przerwania. Przed zakończeniem obsługi zwykle włącza się ponownie przyjmowanie przerwań rozkazem EI. Zakończenie obsługi polega zwykle na wykonaniu rozkazu RETI. RozkazRETIzdejmujezestosuadrespowrotuiwpisujegodoPC. Do manipulowania rejestrem przerwań służą rozkazy LDI,A LDA,I
Komunikacja z urządzeniami, np.: Z80 wejście-wyjście 0.38 odczytanie kodu wciśniętego klawisza, odczytanie odebranego pakietu danych, sterowanie wyświetlaczem. Oddzielna przestrzeń adresowa wejścia-wyjścia Rozkazy INA,(n) OUT(n),A INr,(C) OUT(C),r gdzier {A,B,C,D,E,H,L}
Małe podsumowanie(1) 0.39 Z punku widzenia programisty wszystkie mikroprocesory działają podobnie do opisanego. Poszczególne architektury różnią się m.in.: porządkiem bajtów, liczbą i przeznaczeniem rejestrów, listą oferowanych instrukcji(rozkazów), semantyką operacji dwuargumentowych, sposobem realizacji sterowania programem, trybami adresowania, systemem przerwań.
Dalsze różnice: Małe podsumowanie(2) 0.40 rozdzielne lub wspólne przestrzenie adresowe: danych i programu (architektury typu Princeton lub Harward), wejścia-wyjścia, mechanizmy ochrony pamięci(brak, segmentacja, stronicowanie). Żeby działać szybciej, współczesne mikroprocesory mają zupełnie inną organizację(budowę) niż opisany.
Rejestry(1) 0.41 danych adresowe ogólnego przeznaczenia specjalizowane stanu, znaczników wskaźnik stosu licznik programu zmiennopozycyjne wektorowe segmentowe zarządzania pamięcią debugowania
Tryby adresowania argumentów(1) 0.42 Nazwa Z80 IA-32 natychmiastowy LD B, 7 mov ebx, 7 bezpośredni LD A,(1000) mov eax,[1000] rejestrowy(bezpośredni) ADD A, B add eax, ebx (rejestrowy) pośredni ADD A,(HL) add eax,[ebx] indeksowy LD A,(IX+8) mov eax,[ebx+4*ecx+8] stosowy PUSH AF push eax POP AF pop eax EX(SP), HL xchg[esp+8*ecx], eax względny JR Z, MULEND jz mulend
Tryby adresowania argumentów(2) 0.43 Nazwa Oznaczenia Z80 IA-32 rejestrowy pośredni [+r1](+r1) z preinkrementacją rejestrowy pośredni [r1+](r1+) LDI movs z postinkrementacją @r1+ POP AF pop eax rejestrowy pośredni [-r1](-r1) DJNZ d loop d z predekrementacją PUSH AF push eax rejestrowy pośredni [r1-](r1-) LDD z postdekrementacją @r1- movs
System przerwań 0.44 Przerwania sprzętowe maskowalne niemaskowalne Przerwania programowe Praca krokowa debugowanie Wyjątki ponawianie instrukcji, która spowodowała wyjątek Element tablicy przerwań adres procedury obsługi instrukcja skoku do procedury obsługi deskryptor procedury obsługi
Metody zwiększania wydajności(1) 0.45 Zwiększanie częstotliwości taktowania ograniczenia konstrukcyjne i technologiczne wydzielanie ciepła czas propagacji Inne pomysły pobieranie instrukcji na zakładkę kolejka(bufor) instrukcji przetwarzanie potokowe zrównoleglanie wykonywania instrukcji
Metody zwiększania wydajności(2) 0.46 Nienadążanie szybkość pracy pamięci za wzrostem szybkości pracy procesorów zwiększanie szerokości szyny danych wielopoziomowe pamięci podręczne, początkowo jako zewnętrzne, a obecnie w jednym układzie scalonym z procesorem pamięci umożliwiające pobieranie danych co jeden cykl zegara, anawetdwarazywjednymcykluzegara
Przetwarzanie potokowe 0.47 I 1 I 2 I 3 I 4 T 1 T 2 T 3 T 4 T 1 T 2 T 3 T 1 T 2 T 3 T 1 T 2 T 3 T 4 I 1 I 2 I 3 I 4 F D E MW F D E MW F D E MW F D E MW F D E MW F D E MW F D E MW F D E MW F fetch D decode E execute M memoryaccess W writeback
Potokowanie rozkazów 0.48 Rozkazy procesora takiego jak Z80 źle się potokuje: kodrozkazuzajmujeod1do4bajtów,cowymagado4dostępów do pamięci; rozkaz może wykonywać skomplikowane operacje na argumentach w pamięci, co może wymagać kilku kolejnych odwołań. Listę rozkazów należy przeprojektować tak, aby wszystkie rozkazy: miały kod tego samego rozmiaru, wykonywały podobną liczbę operacji, potrzebowały co najwyżej jednego dodatkowego dostępu do pamięci(oprócz wczytania kodu rozkazu).
Klasy rozkazów 0.49 Ograniczamy repertuar rozkazów do następujących klas. Odczytzpamięcidorejestru(ang.load),np.: r1:=(r2+offset) Zapiszrejestrudopamięci(ang.store),np.: (r2+offset):=r1 Arytmetyczno-logiczne tylko na rejestrach, np.: r1:=r2+r3 Rozgałęzienia jednoetapowe, np.: branchtolabelifr1=r2
Podział rozkazów na etapy 0.50 Rozważamy przykładowy potok piecioetapowy. F pobraniekodurozkazuzpamięci D zdekodowanie rozkazu i pobranie argumentów z rejestrów E wykonanie operacji arytmetyczno-logicznych, obliczenie adresu M odczytaniedanychzpamięcilubzapisaniedanychdopamięci W zapisaniewynikudorejestru
Przykładowe czasy wykonania 0.51 klasa instrukcji F D E M W razem odczytzpam. 4ns 2ns 3ns 4ns 2ns 15ns zapisdopam. 4ns 2ns 3ns 4ns 13ns arytm.-logiczne 4ns 2ns 4ns 2ns 12ns rozgałęzienia 4ns 2ns 3ns 9ns Rozkazmusiprzebywaćwjednymetapiepotoku4ns. Wykonanie jednego rozkazu potokowo trwa 20 ns, czyli dłużej niż wykonanie dowolnego rozkazu niepotokowanego. Wykonanienrozkazówpotokowotrwa4(n+4)ns.
Zależności zasobów, strukturalne 0.52 Potok może zostać wstrzymany, gdy rozkazy będące na różnych etapach wykonania potrzebują dostępu do tego samego sprzętu. Przykładoworozkazchcewykonaćodczytdanychzpamięci,awtym samym czasie trzeba pobrać kod kolejnego rozkazu. F D E MW F D E MW F D E MW F D E MW Zależności strukturalne usuwa się przez dołożenie sprzętu. Dlatego m.in. współczesne mikroprocesory mają oddzielne pamięci podręczne pierwszego poziomu dla kodu i danych.
Zależności danych typu define-use 0.53 Potok może zostać wstrzymany, gdy rozkaz potrzebuje wyniku poprzedniego rozkazu. r1:=r2+r3 r4:=r1-r5 F D E MW F D D D E MW Takie zależności usuwa się przez data forwarding lub data bypassing. Wynik obliczony na etapie E pierwszego rozkazu przesyła się bezpośrednio do etapu E drugiego rozkazu, zanim zostanie zapisany do rejestru wynikowego. r1:=r2+r3 r4:=r1-r5 F D E MW F D E MW
Zależności danych typu load-use 0.54 Potok może zostać wstrzymany, gdy rozkaz potrzebuje danych ładowanych z pamięci przez poprzedni rozkaz. r1:=(r2+4) r4:=r1-r5 F D E MW F D D D E MW Data forwarding nie zawsze jest w stanie usunąć taką zależność. r1:=(r2+4) r4:=r1-r5 F D E MW F D D E MW Dodatkowe opóźnienie wprowadzane przez rozkaz, gdy następny rozkaz potrzebuje jego wyniku, nazywa się latency. Kompilator może usuwać latency, zmieniając kolejność rozkazów.
Zależności sterowania 0.55 Potok musi być opróżniony, gdy rozkaz warunkowy wykona skok. branch F D E MW F D F F D E MW W rozważanym przykładzie dodatkowe opóźnienie(latency) wynosi dwa takty.
Rozwiązywanie zależności sterowania 0.56 Równoległe przetwarzanie obu gałęzi programu Predykcja skoków(przewidywanie rozgałęzień) zawsze następuje skok nigdy nie następuje skok decyduje kod instrukcji(kompilator) jak przy ostatnim wykonaniu tablica historii skoków Opóźnione rozgałęzianie
Przetwarzanie wielopotokowe 0.57 pipeline 1 scheduler pipeline 2 re-order buffer pipeline 3 Wydawanie i wykonywanie rozkazów w zmienionej kolejności(ang. out of order issue and execution)
Architektury RISC i CISC(1) 0.58 RISC Reduced Instruction Set Computer Ograniczony, prosty zbiór instrukcji Duża liczba uniwersalnych rejestrów Instrukcje arytmetyczno- -logiczne wykonywane tylko na rejestrach CISC Complex Instruction Set Computer Skomplikowane instrukcje, instrukcje wspierające języki wysokiego poziomu Mała liczba rejestrów lub rejestry specjalizowane Instrukcje arytmetyczno- -logiczne pobierające argumenty z pamięci lub umieszczające wynik w pamięci
Architektury RISC i CISC(2) 0.59 RISC Reduced Instruction Set Computer Kody instrukcji o stałej długości, typowo 4 bajty Stałe rozmieszczenie pól w kodach instrukcji, ułatwiające dekodowanie CISC Complex Instruction Set Computer Kody instrukcji o zmiennej długości, typowo od jednego do kilkunastu bajtów Prefiksowanie instrukcji, utrudniające dekodowanie Mała liczba trybów adresowania Duża liczba trybów adresowania Dozwolone tylko adresowanie wyrównane Mniejsza gęstość kodu Dozwolone adresowanie niewyrównane Większa gęstość kodu
Architektury RISC i CISC(3) 0.60 CISC rozkazy Translator µops RISC
Sprzętowe wsparcie dla systemów operacyjnych 0.61 Translacja adresów segmentacja stronicowanie, prosta i odwrotna tablica stron Poziomy ochrony wewnętrzny, nadzorcy, uprzywilejowany zewnętrzny, aplikacji Wywoływanie usług systemu operacyjnego przerwania specjalna instrukcja(syscall)
Segmentacja 0.62 pamieć wirtualna procesu 1 pamięć liniowa pamieć wirtualna procesu 2
Stronicowanie 0.63 pamięć fizyczna (ramki) liniowa pamięć wirtualna (strony) dysk
DMA Direct Memory Access 0.64 Odciąża procesor przy przesyłaniu dużych bloków danych. Dane przesyłane są bezpośrednio między sterownikiem urządzenia a pamięcią operacyjną. Przesyłanie obsługuje sterownik DMA specjalizowany układ podłączony do szyny systemowej. Fazy transmisji: rozkazów procesor inicjuje kanał DMA i zapisuje parametry transmisji, danych wykonywane jest przesyłanie, statusu sterownik DMA zgłasza przerwanie, procesor odczytuje status i zwalnia kanał DMA.