WYKŁAD nr 6 - MIKROPROCESOR
Wstęp
CPU - Central Processing Unit
Realizuje instrukcje wykonywania programu
Cechy odróżniające procesory pomiędzy sobą:
Architektura
RISC - architektura procesora o uproszczonej liście rozkazów. Umożliwia stosowanie wysokich częst. taktowania.
CISC - architektura wykorzystująca złożoną listę rozkazów
Liczba bitów przetwarzania w jednym takcie
Częstotliwość taktowania [MHz]
Budowa mikroprocesora
Składowe mikroprocesora:
Jednostka arytmetyczno-logiczna (ALU) - odpowiedzialna za wykonywania obliczeń, których wyniki końcowe i pośrednie przechowywane są w rejestrach
Układ sterownika - pobiera rozkazy z pamięci i je dekoduje
Bloki rejestrów
Budowa procesora (2)
Rodzaje rejestrów:
Danych - przechowywanie argumentów i wyników operacji arytmetyczno-logicznych
Adresowe - przechowywanie adresów do operacji arytmetycznych na adresach
Ogólne - mogą pełnić funkcję rej. danych jak i adresowych
Specjalizowane - pełnią ściśle określoną funkcję np.. akumulator, wskaźnik stosu
Stanu, znaczników
Licznik programu - przechowuje adres bieżącej instrukcji do wykonania
Zmiennopozycyjne - przechowują liczby w formacie zmiennopozycyjnym
Wektorowe - przechowują wektor
Segmentowe - wykorzystywane przy implementacji segmentowego modelu pamięci
Rodzaje architektur ze względu na rodzaj rejestrów
Architektura bezrejestrowa - przechowywane są wyłączenie adresy. Wymagany jest bezpośredni dostęp do pamięci
Podstawowy zestaw rejestrów: akumulator, wskaźnik stosu, licznik programu, rejestr adresowy. W trakcie obliczeń jeden argument jest w pamięci, a drugi jest zapamiętywany wraz z wynikiem. (architektura IAS-Princeton Institute of Advanced Studies zaproponowana przez von Neumana)
Architektura z podstawowym zestawem rejestrów specjalizowanych. Przykład: architektura 16 bitowa x86
Mały zestaw rejestrów uniwersalnych, które mogą pełnić dowolną funkcję
Duży zestaw rejestrów uniwersalnych. Np. architektura Cray X1E
Architektura z buforem wierzchołka stosu umożliwiająca przechowanie kilku ramek stosu w rejestrze bez konieczności odwoływania się do pamięci
Kod maszynowy i asembler
Kod maszynowy - binarny sposób opisu rozkazów procesora charakterystyczny dla konkretnego typu procesora
Asembler - jest to nakładka, język umożliwiający niskopoziomowe programowanie. Jedna instrukcja odpowiada jednemu rozkazowi. Asembler jest specyficzny dla danej architektury.
Lista instrukcji
Typy instrukcji
Systemowe - uprzywilejowane
Aplikacyjne - mogą być wykonywane zawsze
Instrukcje aplikacyjne
Instrukcje przesyłania danych
Instrukcje arytmetyczne
Operacje bitowe
Operacje na napisach
Instrukcje sterujące wykonaniem programu: instrukcje skoku, warunkowego przypisania, warunkowego wykonania operacji (if-else)
Realizacja instrukcji warunkowych
Model ze znacznikami:
operacja warunkowa realizowana dwufazowo: modyfikacja znacznika/znaczników jednobitowego oraz skok warunkowy w zależności od wartości znaczników
Model bez znaczników:
Instrukcja sprawdza warunek i wykonuje skok. Model popularny w arch. RISC
Z predykatami:
Predykat - uogólniony znacznik umożliwiający przechowywanie wartości logicznej wcześniej obliczonego warunku. Instrukcje określają numer predykatu. Model w arch. IA-64
Sposoby realizacja operacji arytmetycznych dwuargumentowych
Argument źródłowy jest jednocześnie argumentem wynikowym:
add r1, r2 r1:=r1+r2 lub r2:=r1+r2
Argument wynikowy różny od argumentów początkowych:
add r1, r2, r3 r1:=r2+r3 lub r3:=r1+r2
Typy adresowania
Adresowanie to sposób sięgania po dane do rozkazów
Konstrukcja programu zależna od sposobu umieszczania argumentów w pamięci
Adres komórki, gdzie jest zawarty kod rozkazu przechowywany jest w liczniku rozkazów
Tryb adresowania określa miejsce, gdzie jest umieszczony adres argumentu lub sposób w jaki jest obliczany
Adresowanie poprzez rejestr
Najprostszy typ adresowania
Argumentami rozkazu są dwa rejestry. Kopiowanie jednego rejestru do drugiego
Adresowanie natychmiastowe
Stała jako argument źródłowy jest zawarta w rozkazie, a nie rejestrze
Adresowane bezpośrednie
Dana zawarta w rozkazie, adres wyznacza położenie argumentu od początku segmentu
Argumentem adresowania jest etykieta
MOV AX, TAB - ładowanie tablicy TAB do rejestru AX
Adresowanie pośrednie rejestrowe
Adres efektywny argumentu znajduje się w rejestrze bazowym lub we wskaźniku bazy albo w rejestrze indeksowym
Rejestry będące argumentami pośrednimi zapisywane w programie przy pomocy „[ ]”
MOV ax, [bx] - do ax ładuje zawartość komórki, której adres wskazuje rejestr bazowy bx.
Tryby adresowania
Każdy procesor zawiera tryb adresowania:
adresowanie natychmiastowe
rejestr bezpośredni
rejestr pośredni
Aktualnie procesory zawierają:
Wariant trybu indeksowego
Cykl pracy mikroprocesora
Cyfrowy układ synchroniczny, taktowany sygnałem zegarowym
Z punktu widzenia programisty mikroprocesor wykonuje instrukcje sekwencyjnie
Podstawowy sposób wykonywania programu na procesorze:
Cykl rozkazowy (instruction cycle): okres czasu potrzebny do pobrania i wykonania jeden instrukcji zajmuje od 1 do kilku cykli procesora (machine cycle). Zapis/odczyt wymaga jednego cyklu. Cykl składa się z kilku taktów zegara.
Wykonanie instrukcji wykonywane jest w dodatkowym cyklu procesora
W nowych procesorach rozdzielono fazę komunikacji z pamięcią od fazy wykonania instrukcji. Umożliwia to pobieranie kolejnych instrukcji przed zakończeniem poprzednich
Cykl współpracy z pamięcią - od 1 do kilku taktów zegara
Cykl wykonania instrukcji - od 1 do kilkuset taktów zegara
UWAGA częstotliwości taktów zegara mogą być różne
Pomiar wydajności
Wydajność procesorów mierzy się za pomocą
IPS (Instructions per seconds). Wielokrotność MIPS = 10^6*IPS
FLOPS (floating point operations per second). Wielokrotność MFLOPS, GFLOPS, TFLOPS
Sposoby zwiększania wydajności
Zwiększanie częstotliwości taktowania procesora. Ograniczone przez właściwości fizyczne: wydzielanie ciepła, czas propagacji sygnałów w układach cyfrowych
Inne sposoby zwiększania wydajności:
Wcześniejsze pobieranie instrukcji
Kolejkowanie instrukcji
Przetwarzanie potokowe
Zrównoleglenie wykonywania instrukcji
Problemy ze zwiększaniem wydajności
Różnica w częstotliwości taktowania pamięci oraz częstotliwości taktowania procesora. Rozwiązanie:
Użycie wielopoziomowych pamięci podręcznych (cache)
Zwiększenie szerokości szyny danych
Pamięć pozwalająca na pobieranie danych co jeden cykl zegara lub dwa razy w jednym cyklu
Przetwarzanie potokowe
Rozłożenie wykonywania instrukcji na ciąg etapów wykonywanych w jednym cyklu zegara
Instrukcje przemieszczane są jedna za drugą (porównanie do taśmy produkcyjnej).
Zaleta: wykonanie instrukcji w jednym cyklu zegara pomimo, że źródłowa instrukcja może zająć znacznie więcej cykli zegarowych. Oszczędność na średnim czasie dla cyklu, natomiast pojedynczy cykl może być znacznie dłuższy.
Rzeczywistość: brak możliwości realizacji takiego modelu. Występowanie zależności między danymi, a sterowaniem i zasobami. Konieczne rozkazy skoku wymagające wyczyszczenia całego potoku i rozpoczęcie wypełniania potoku od początku.
Przetwarzanie potokowe
Zależności między danymi:
RAW (odczyt po zapisie)
WAR (zapis po odczycie)
WAW (zapis po zapisie)
Architektura superskalarna i wektorowa
Możliwość zrównoleglenia wykonywanych instrukcji poprzez zwiększenie liczby potoków i jednostek wykonawczych:
ALU - Arithmetic Logic Unit
AGU - Address Generator Unit
FPU - Floating Point Unit
LSU - Load Store Unit
Architektury wykorzystujące wielopotokowość:
Architektura superskalarna - zrównoleglenie na poziomie wykonania - układy wewnątrz procesora decydują o zrównolegleniu (hyper threading)
Architektura wektorowa - zrównoleglenie na poziomie algorytmu do postaci wektora
Architektura z procesorem o długim słowie instrukcji (VLIW - Very Long Instruction Word) - zrównoleglenie na poziomie kompilatora - opisanie co mają robić poszczególne jednostki wykonawcze
Architektura RISC i CISC
Przerwania
Żądanie Przerwania IRQ (Interrupt ReQuest) - sygnał powodujący zmianę przepływu sterowania niezależnie od aktualnie wykonywanego programu
Procesor zatrzymuje wykonanie programu i realizuje kod procedury obsługi przerwania (interrupt handler)
Rodzaje przerwań
Sprzętowe
Zewnętrzne - sygnał przerwania pochodzi z zewnętrznego układu do obsługi przerwań sprzętowych. Wykorzystywane do komunikacji z urządzeniami końcowymi.
Wewnętrzne, tzw. wyjątki (exceptions). Procesor sygnalizuje sytuację wyjątkową (dzielnie przez zero)
Niepowodzenie (faults) - wykonywana instrukcja powoduje błąd i procesor woła kolejną.
Pułapki (traps) - sytuacja nie jest błędem, a wystąpienie jej ma na celu wykonanie określonego kodu. Wykorzystywany w debugerach
Błędy (aborts) - błędy, których nie można naprawić
Programowe - wywoływanie procedury przerwania z kodu programu. Używane do komunikacji z systemem operacyjnym. W kodzie przerwania wywoływana jest funkcja systemowa.
Rodzina procesorów x86 (1)
Tryb rzeczywisty
Adres procedury obsługi przerwania zapisany w tablicy wektorów przerwań
Przerwania identyfikowane przez numer (wektor). Możliwych 256 przerwań
Tablica przerwań znajduje się w pierwszych 1024 komórkach pamięci operacyjnej
PC obsługie 16 IRQ. Pod numerem przerwania należy rozumieć zasób udostępniony przez procesor. Ograniczona liczba przerwań może powodować konfilkt.
Rodzina procesorów x86 (2)
Tryb chroniony
Tablica deskryptorów przerwań (IDT) asocjuje wektor wyjątku lub przerwania z deskryptorem bramy dla procedury lub zadania
Deskryptor bramy pozwalający na kontrolowany dostęp do segmentów kodu o różnych stopniach uprzywilejowania
IDT zawiera 256 wpisów. Rozmiar to 256*8
Rodzaje deskryptorów:
deskryptor bramy zadania (Task-Gate Descriptor)
deskryptor bramy przerwania (Interrupt-Gate Descriptor)
deskryptor bramy pułapki (Trap-Gate Descriptor)