(Instruction Unit)dekoder Kod programu –rozkazy Prefetch (oczekiwanie) ROM słownik IU (Instruction Unit)dekoder AU adres BU Bus Unit EU – execution unit MMU dane PaO ALU ALU ALU ALU ALU FPU Kontrola i sterowanie CU Control Unit dane AU – Addresing Unit MMU – Memory Management Unit (np.. stronicowanie)
Realizacja programu przez taki układ przebiega następująco: Kod rozkazów jest odczytywany z pamięci RAM i umieszczany w kolejce rozkazów. Poszczególne instrukcje (słowa binarne) trafiają z kolejki do dekodera IU, który rozkodowuje rozkazy przeznaczone do wykonania - sposób kodowania rozkazów zawarty w pamięci stałej ROM (w strukturze procesora). Wydzielenie z kodu instrukcji argumentów operacji adresów danych Są one przesyłane odpowiednio do bloku wykonującego instrukcje EU i bloku adresowego AU.
Blok adresowy AU i zarządzania pamięcią MMU wytwarzaodpowiednie sygnały dane przekazywane do bloku zarządzania magistralami BU adres na magistrali adresowej - odczyt danych z pamięci - układ pamięci wystawia dane na magistrali danych. Dane przekazywane do bloku wykonawczego lub do kolejki rozkazów. Blok wykonujący instrukcje EU (zawierający jednostkę arytmetyczno-logiczną ALU) dokonuje porównań lub działań matematycznych na argumentach stałoprzecinkowych (argumenty zmiennoprzecinkowe są przetwarzane w FPU) Wyniki przetwarzania blok wykonujący instrukcje przekazuje do bloku zarządzania pamięcią i bloku sterującego magistralami - zapisw pamięci pod określonym adresem
Wszystko odpowiednio synchronizowane w czasie Układ wykonujący instrukcje EU wytwarza sygnały sterujące, przez które ma możliwość wpływu na pracę innych bloków. Układ wykonawczy EU często też przechowuje wyniki pośrednie przetwarzania danych we własnych rejestrach.
Rejestry procesora Na przykładzie 16 bitowych rejestrów procesorów 8086 i 8088 - prostsze
Czym są rejestry ? Rejestry są to bardzo szybkie elementy elektroniczne posiadające zdolność zapamiętywania informacji Rozciągają się na obszarze 28 bajtów i są one w stanie czasowo przechowywać dane, adresy pamięci, wskaźniki rozkazów i stanów oraz znaczniki sterujące
Podział rejestrów rejestry powszechnego stosowania rejestry segmentowe w tym rejestry wskaźnikowe i indeksowe rejestry segmentowe rejestr znaczników - FLAGS i wskaźnik rozkazów SR– rejestr statusu (znaczników) IR – rejestr rozkazów MAR – rejestr adresów pamięci SPR – rejestry indeksowe GPR – rejestry robocze PC – licznik rozkazów
Rejestry powszechnego stosowania Rejestry segmentowe Rejestry powszechnego stosowania DL DH CL CH BL BH AL AH SI DI BP SP AX BX CX DX 7 15 Rejestry wskaźnikowe i indeksowe CS DS ES SS 15 15 FLAGS IP Rejestry stanu/kontrolne
Rejestry statusu- kontrolne
Rejestry stanu/kontrolne 15 FLAGS IP Rejestry stanu/kontrolne Bity rejestru flagowego 15 OF DF IF TF SF ZF AF PF CF
Rejestr znaczników (flagowy) SR (status registry) lub FLAGS rejestr przeznaczony do przechowywania dodatkowych cech wyniku operacji (np. znak, przekroczenie zakresu, znak parzystości wyniku operacji w postaci tzw. flagi (znacznika). Każdy znacznik jest bitem w rejestrze, który wskazuje czy określony stan wystąpił. Znaczniki mogą być wykorzystywane przez procesor lub programistę na dwa sposoby: ustawienie znacznika dla zapamiętania określonego stanu po wykonaniu rozkazu • testowanie znacznika celem umożliwienia decyzji o sposobie dalszego postępowania (przetwarzania danych)
Najważniejsze znaczniki statusu: – CF - flaga przeniesienia lub pożyczki, ustawiana przy przekroczeniu zakresu długości słowa, w którym zapisywany jest wynik (1 wystąpiło przeniesienie) – SF - flaga znaku, ustawiana gdy najstarszy bit wyniku jest równy 1 (operacje liczb ze znakiem - kod U2) – ZF - flaga zera - sygnalizująca, że wynikiem ostatnio wykonywanej operacji jest zero – OF - flaga przepełnienia, sygnalizująca przekroczenie zakresu dla operacji arytmetycznych (operacje liczb ze znakiem - kod U2) – PF - flaga parzystości (1) wskazuje na parzystą lub nieparzystą liczbę bitów o wartości jedynki – PF - flaga przeniesienia pomocniczego jest wykorzystywana przy działaniach na liczbach w kodzie BCD. Ustawiana jest gdy następuje przeniesienie lub pożyczka z najstarszego bitu pierwszej tetrady wyniku
Dodatkowe znaczniki kontrolne: – TF- znacznik pracy krokowej - ustawienie 1 pozwala na wykonanie przez procesor po wykonaniu każdego rozkazu przerwania i przejście do specjalnych procedur obsługi – IF- znacznik zezwolenia na przerwanie - ustawienie 1 powoduje odblokowanie systemu przerwań w procesorze (0 - procesor ignoruje przerwania) – DF - znacznik kierunku - umożliwia realizacje przetwarzania łańcuchów (ciągu słów) przy rosnących adresach (1) lub malejących adresach (0)
Rejestry ogólnego przeznaczenia rejestry przeznaczone do przechowywania dowolnych danych i wykonywania operacji (arytmetycznych i logicznych), ale jednocześnie spełniające pewne funkcje specjalne. Szczególną funkcję pełni akumulator: Akumulator - rejestr przeznaczony do przechowywania jednego z operandów (argumentów) wykonywanej operacji oraz wyniku wykonywanej operacji (czasami wynik może być umieszczany w innym rejestrze)
Rejestry segmentowe - są rejestrami wykorzystywanymi do adresowania pamięci operacyjnej. Rejestry te zawierają adresy początkowe segmentów: – CS rejestr segmentowy programu - wskazuje segment programu, z którego aktualnie są pobierane kolejne rozkazy do wykonania, – DS rejestr segmentowy stosu - wskazuje segment, w którym zapamiętane są zmienne używane w programie, – ES rejestr segmentowy dodatkowy - wskazuje dodatkowy segment danych, – SS rejestr segmentowy stosu wskazuje segment pamięci, w którym z definiowany jest stos.
Rejestry wskaźnikowe i indeksowe - posiadają dwa rejestry wskaźnikowe i dwa rejestry indeksowe. Rejestry wskaźnikowe (SP, BP) są stosowane do adresowania danych w obrębie wydzielonego obszaru pamięci (stosu). Rejestry indeksowe (SI, DI) służą do adresowania danych w obszarze pamięci zwanym segmentem danych. Wszystkie rejestry mogą być wykorzystywane jako argumenty większości rozkazów arytmetycznych i logicznych.
Wskaźnik rozkazów IP (wskaźnik instrukcji) - łącznie z rejestrem segmentowym CS adresuje kolejne rozkazy przeznaczone do wykonania. Wskazuje adres względem początku segmentu programu
Stos Stos jest to taka struktura danych, która stosuje metodę FILO (first-in-last-out). Stos służy do chwilowego przechowywania informacji. Podstawową cechą stosu jest to, że mamy dostęp jedynie do elementu leżącego na jego szczycie, czyli element odłożony jako ostatni będziemy zdejmować jako pierwszy. Stos jest nieodłącznie związany z rejestrami SS (segmentowy) i SP (wskaźnikowy)
Architektura stosu - STACK Procesor ma wskaźnik stosu i operacje są wykonywane na szczycie. STOS to specjalne rejestry: np.. A[1], A[2] do A[n]. Na początku żadne dane nie są związane ze stosem i specjalny rejestr wskaźnika stosu SP ma wartość 0 Odczyt - kopiowana wartość z pamięci do A[SP]. 1: if SP = n, stack overflow 2: else SP = SP + 1 3: A[SP] = dane Zapis - najpierw sprawdza czy rejestr zawiera użyteczną informację (jeżeli SP > 0). Jeśli nie to stack underflow, jeśli tak A[SP] jest kopiowany do pamięci i SP zmniejszane o 1.
Operacje arytmetyczne są wykonywane na dwóch rejestrach (A[SP] i A[SP-1]) i rezultat zapisywany do A[SP-1]. Gdy obie wartości są usunięte SP jest pomniejszane o 1.
LOAD 51 MUL LOAD 52 LOAD 53 MUL ADD Przykład operacji E = A * B + C * D Założenie: A=3, B=4, C=5, D=2 są zapisane w pamięci pod adresami od $50 do $53 Program: LOAD 50 LOAD 51 MUL LOAD 52 LOAD 53 MUL ADD
Instrukcja LOAD 50 A[1] = 3 SP = 1 Instrukcja LOAD 51 A[1] = 3 A[2] = 4 SP = 2 Instrukcja MUL A[1] = 12 SP = 1 Instrukcja LOAD 52 A[1] = 12 A[2] = 5 SP = 2
Instrukcja LOAD 53 A[1] = 12 A[2] = 5 A[3] = 2 SP = 3 Instrukcja MUL A[1] = 12 A[2] = 10 SP = 2 Instrukcja ADD A[1] = 22 SP = 1
Instrukcje przesyłania danych między rejestrami MOV rejestr, wartość Przykład: MOV AX,10 – umieść 10 w AX MOV CX, AX – umieść w CX wartość z AX MOV AX, [CX] – umieść w AX wartość z komórki, której adres jest w CX
Instrukcje wprowadzania i odbierania danych ze stosu Do wstawienia wartości na stos służy instrukcja PUSH Przykład : PUSH AX Do zdejmowania danych ze stosu służy instrukcja POP Przykład : POP AX
Przykład zastosowania stosu AX = ? ? 94 BX = ? 96 CX = ? 98 DX = ? 100 SP
? 1 Po wykonaniu instrukcji : MOV AX,1 PUSH AX AX = 1 94 BX = ? 96 CX = ? 98 SP DX = ? 100
? 2 1 Po wykonaniu instrukcji : MOV AX,2 PUSH AX AX = 2 94 BX = ? 96 SP CX = ? 98 DX = ? 100
3 2 1 ? Po wykonaniu instrukcji : MOV AX,3 PUSH AX AX = 3 94 SP BX = ? 96 CX = ? 98 DX = ? 100
? 2 1 Po wykonaniu instrukcji : POP BX AX = 3 94 BX = 3 96 SP CX = ? 98 DX = ? 100
? 1 Po wykonaniu instrukcji : POP CX AX = 3 94 BX = 3 96 CX = 2 98 SP DX = ? 100
? Po wykonaniu instrukcji : POP DX AX = 3 94 BX = 3 96 CX = 2 98 100 SP
Uwagi dotyczące działań na stosie Przykład fragmentu programu zawierającego błąd : ... PUSH AX ;zachowaj ax PUSH BX ;zachowaj bx ADD SP, 1000 ;dodaj 1000 do SP(wskaźnik stosu) POP BX ;zdejmij bx POP AX ;zdejmij cx
CYKL ROZKAZOWY PROCESORA Realizując program, system mikroprocesorowy wykonuje pewne powtarzające czynności, polegające na cyklicznym pobieraniu kodów rozkazów z pamięci i wczytywaniu ich do układu sterowania, a następnie realizacji rozkazu Czas potrzebny na odczytanie kodu rozkazu z pamięci, na pobranie argumentów, na wykonanie rozkazu i przesłanie wyniku operacji nazywa się cyklem rozkazowym (instrukcyjnym) Cykl rozkazowy składa się z faz pobierania (kodu rozkazu, pobierania argumentu) i wykonania rozkazu.
Interpretacja adresu fizycznego • zawartość rejestru segmentowego *16 podaje adres początku segmentu • od tego początku odsuwamy się o liczbę komórek podaną w adresie efektywnym • adres efektywny jest 16 bitowy to pozwala zaadresować 65536B=64kB • pamięć jest widziana przez procesor jako okno O wielkości 64kB • okno to można przesuwać przeładowując rejestry segmentowe
Rejestry Rejestry Rejestry1 Rejestry2 ALU ALU Wspólne ALU Cache Cache Wspólny Cache PaO PaO Dwa procesory logiczne Dwa procesory fizyczne
Już w Pentium I były 2 potoki 3 mikrooperacje / cykl zegara Czyli procesor 3GHz ok. 9 mln mikrooperacji/s Ale nie jest 100 % bo są przestoje (uzależnienia, błędne spekulacje, odwołania do pamięci) Jeśli czegoś nie ma w cache L1 L2 L3 to odwołania do PaO zajmują wiele cykli zegara Poza tym PaO jest kilka razy wolniejsza – obecnie kilka ns
PIPELINE – przetwarzanie potokowe Jak taśma produkcyjna (Ford) – jednocześnie kilka rozkazów
Schemat przetwarzania potokowego 4 podstawowe czynności (niektóre jeszcze rozpisane na mniejsze): Pobranie – PREFECH, PF – zapełnianie kolejki w pamięci podręcznej L1, ewentualnie pośredniej L2 Dekodowanie – DECODE, DE – analiza kodu rozkazu (przedrostki i argumenty), obliczenie efektywnego adresu argumentów Wykonanie – EXECUTE, EX - pobranie argumentów i akcje na nich Zakończenie i zapis wyników – WRITE BACK, WB – wynik do pamięci lub rejestrów
Dostęp do pamięci Adres fizyczny= 16 x Segment +Offset Przykładowy rozkaz: add ax, [bx] Dodaj zawartość AX do komórki, której adres jest w BX, wynik do AX PF pobranie kodu instrukcji DE (16xDX)+BX EX – dostęp do komórki o adresie (16xDX)+BX, operacja dodawania do AX WB – umieszczenie wyniku w AX
Hyper-threading (simultaneous multitherading) ang. THREAD - WĄTEK Równoczesna wielowątkowość Wieloprocesorowość logiczna Wykorzystanie? Internet, MPEG lub MP3 Rozpisanie na wątki – wątek to ciąg operacji mogący być wykonany niezależnie od innych