WYKAAD 0:
Kody binarne: NKB Naturalny kod binarny, U2.
Podstawowe elementy logiki cyfrowej: bramki, przerzutniki, rejestry, liczniki, multipleksery, pamięci.
WYKAAD 1: TROCH TEORII.
Komputer urządzenie do przetwarzania danych, wyposażone w możliwość wprowadzania,
przechowywania i wyprowadzania danych (wprowadzanie i wyprowadzanie danych może być
realizowane w postaci odpowiedniej dla człowieka np. klawiatura, ekran lub właściwej współpracy
z jakimś obiektem np. czujnik temperatury, grzejnik.
Taksonomie systemów komputerowych służą do klasyfikacji architektur komputerowych (podział
na kategorie i określanie własności).
Taksonomia Flynna 1968 prosta; ma znaczenie historyczne. Zakłada, że komputer jest
urządzeniem przetwarzającym strumienie danych na podstawie strumieni instrukcji; klasyfikuje
komputery wg liczby strumieni instrukcji i danych; liczba strumieni może wynosić 1 lub n (więcej
niż 1). Cztery klasy: SISD, SIMD, MISD, MIMD, NISD, NIMD (S-pojedynczy, M-wiele, I-Instrukcje, D-
Dane, N-Zero). Bez strumienia danych urządzenie nie jest komputerem, a bez strumienia instrukcji
to wieloprocesory Dataflow.
Dataflow Nie ma jawnych instrukcji. Jednostką przetwarzaną jest token (zawiera dane oraz tag
(metka) opisujący zawartość (jest odpowiednikiem instrukcji). Procesor za pomocą metki
przekształca cały token i dane i metkę, tworząc nowy token.
Taksonomia Skillicorna 1988 ilustruje strukturę komputera; stosunkowo mało znana. Każda
architektura stanowi połączenie pewnej liczby składników. Składniki: 1. Procesory instrukcji (IP)
pobierają i analizują dane; 2. Procesory danych (DP) wykonują operacje na danych; 3. Hierarchie
pamięci instrukcji (IM) przechowują instrukcje; 4. Hierarchie pamięci danych (DM) przechowują
dane. Liczba hierarchii pamięci jest równa liczbie procesorów. Komputer musi zawierać przynajmniej
jeden procesor danych. Spośród 30 możliwych modeli tylko 6 modeli ma sensowne znaczenie (takie
same jak w taksonomii Flynna).
Hierarchia pamięci od góry - 1. Rejestry; 2. Kieszenie (L1-L3); 3. Pamięć operacyjna; 4. Pamięć
masowa (rozsz. p. oper.); 5. Pamięć masowa (system plików); 6. Nośniki wymienne, zasoby
sieciowe.
Maszyna von Neumanna Instrukcje tworzące program są przechowywane w pamięci w taki sam
sposób, jak dane. Dostęp do pamięci poprzez adres. Występuje rejestr licznika instrukcji.
Warianty organizacji hierarchii pamięci w realizacjach maszyny von Neumanna 1. Harvard
oddzielne hierarchie pamięci programu i danych. Wysoka wydajność dzięki możliwości
równoczesnego pobierania instrukcji i operacji na hierarchi pamięci danych. Brak możliwości zapisu
instrukcji i operacji na hierarchii pamięci danych. 2. Princeton wspólna hierarchia pamięci
programu i danych. Nie można równocześnie pobierać instrukcji i operować na danych.
Nieograniczone możliwości modyfikacji programu. 3. Harvard-Princeton Aączy zalety Harvard i
Princeton. Oddzielne górne warstwy hierarchii pamięci i wspólne warstwy dolne. Wszystkie
produkowane współcześnie procesory do komputerów mają architekturę Harvard-Princeton z
rozdzielonymi kieszeniami kodu i danych.
WYKAAD 2: DANE.
Typy danych 1. Wartości logiczne (prawda/fałsz). 2. Znaki pisarskie. 3. Liczby (całkowite
nieujemnie i ze znakiem oraz niecałkowite stałopozycyjne i zmiennopozycyjne). 4. Dzwięki i inne
sygnały jednowymiarowe. 5. Obrazy rastrowe.
Binarna reprezentacja danych wszystkie komputery działają w systemie binarnym. Wszystkie
dane, na których operuje komputer, są zapisane w postaci ciągów cyfr binarnych bitów,
interpretowanych najczęściej jako liczby binarne. Wszelkie dane o charakterze nie liczbowym muszą
być zapisane (zakodowane) w postaci liczb lub grup liczb.
Dane w pamięci komputera Alfanumeryczne są one reprezentowane przez liczby, określające
pozycję danego symbolu w tablicy kodowej. Standardy kodowania znaków pisarskich:
ASCII cyfry, znaki przestankowe, podstawowe symbole matematyczne oraz małe i wielkie litery
alfabetu łacińskiego, mieszczące się na 128 pozycjach kodowych. Na jego bazie zaprojektowano
wiele kodów rozszerzonych, zawierających 256 pozycji kodowych. Pierwsze 128 są identyczne, a
następne 128 zawiera: litery akcentowane, rozszerzony zestaw symboli matematycznych, litery
alfabetów narodowych. W Polsce: kody ISO8859-2 oraz Microsoft CP1250.
EBCDIC używane w systemach firmy IBM.
UNICODE reprezentacja wszystkich znaków używanych na świecie.
Jednostki informacji 1. Bit najmniejsza jednostka informacji; 2. Bajt najmniejsza jednostka
informacji adresowana przez procesor (8 bitów); 3. Słowo; 4. Słowo procesora obecnie 32 lub 64
bity; 5. Słowo pamięci obecnie 64 bity, czasem 128.
Zapis danych do zapisu danej logicznej wystarcza jeden bit. Zapis liczb całkowitych nieujemnych
Naturalny kod binarny (NKB); Kod BCD używany do liczb dziesiętnych stałopozycyjnych. Zapis
liczb całkowitych ze znakiem: Kod uzupełnieniowy do dwóch (U2) najbardziej znaczący bit ma
wagę ujemną; Kod uzupełnieniowy do jedności (U1) wartość bezwzględna najbardziej znaczącego
bitu jest o jeden mniejsza niż w U2; Znak-moduł; Zapis spolaryzowany. Liczby ułamkowe i
mieszane: Zapis stałopozycyjny powstaje przez przesunięcie wag w zapisie całkowitoliczbowym.
Używany zwykle w U2. Liczby całkowite i ułamkowe o bardzo dużym zakresie dynamiki wartości
bezwzględnych: Zapis zmiennopozycyjny - elementy: Znak liczby; część znacząca; wykładnik. Postać
znormalizowana jedna z możliwych postaci jako preferowana. Binarny zapis zmiennopozycyjny
niemal wszystkie komputery posługują się tym zapisem zgodnym ze standardem IEEE754. Bazą jest
liczba 2. Podstawowym formatem jest format double 64-bitowy.
Konwencje adresowania danych wielobajtowych 1. Little Endian najmniej znaczący bajt pod
najmniejszym adresem. Numeracja bajtów zgodna z wagami bitów. Naturalna dla komputera ale nie
dla człowieka. 2. Big Endian najbardziej znaczący bajt pod najmniejszym adresem. Kolejność
bajtów naturalna dla człowieka. Możliwe szybkie porównywanie łańcuchów znakowych. Rzutowanie
typów związane ze zmianą długości zmienia wartość adresu.
Dane wektorowe współczesne procesory mogą operować na długich słowach danych. Dzwięki i
obrazy są zapisane przy użyciu liczb o małej precyzji. Algorytmy przetwarzania dzwięków i obrazów
wykonują takie same operacje na wszystkich próbkach. Umożliwia lepsze wykorzystanie możliwości
procesora.
WYKAAD 3: SYNTEZA UŻYTKOWEGO MODELU PROGRAMOWEGO
KOMPUTERA NA PODSTAWIE WYMAGAC JZYKÓW WYSOKIEGO POZIOMU.
Języki wysokiego poziomu 60te: Fortran, Algol; 80te: Pascal, C.
Wymagania języka wysokiego poziomu 1. Klasy pamięci (sekcje): odpowiadają różnym klasom
obiektów niezbędnych do działania programu. Składa się z: kod (statyczny, obecny w pamięci przez cały
czas życia programu; stały rozmiar; tylko do odczytu; może zawierać instrukcje, stałe); dane statyczne
(czas życia równy czasowi życia programu; stały rozmiar; mogą być podzielone na obszary: stałe,
zmienne zainicjowane, zmienne niezainicjowane); dane dynamiczne automatyczne (argumenty i zmienne
lokalne procedur; tworzone i usuwane w czasie działania programu; kolejność usuwania zawsze
odwrotna do kolejności tworzenia; tworzą stos); dane dynamiczne kontrolowane (tworzone i usuwane
jawnie przez programistę; czas życia nie związany z czasem życia i zagłębianiem procedur, nie wynika ze
struktury wywołań; kolejność tworzenia i usuwania dowolna; tworzą stertę); kod współdzielony i dane
współdzielone we współczesnych syst. operacyjnych 2. Przekazywanie sterowania: wywołanie procedur
i powroty; przekazywanie parametrów; zmienne lokalne procedur.
Mapa przestrzeni adresowej procesu użytkowego kod, dane statyczne, stos i sterta. Sterta rośnie w
górę, stos w dół. Adresy bliskie zera nie są używane. Duże puste obszary w przestrzeni użytkowej.
Licznik instrukcji rejestr przechowujący adres kolejnej instrukcji, która ma zostać wykonana.
Inkrementowany w czasie pobrania instrukcji. Przy wykonaniu instrukcji skoku, ładowany nową
wartością. Niezbędny w maszynie von Neumanna.
Procedury (wywołanie i powrót) wywołanie następuje poprzez instrukcję skoku ze śladem. Powrót
instrukcja powrotu według śladu.
Stos struktura danych używana do przekazywania sterowania pomiędzy procedurami programu
(parametry wywołania; ślad powrotu; zmienne lokalne).
Model procesora I rejestr licznika instrukcji; rejestr przechowujący wyniki obliczeń (akumulator); stos o
bliżej nieokreślonej realizacji; dostęp do danych przez nazwy lub wartości (stałe). SLAJD 16.
Kompilacja - argumenty wywoływanej procedury są wkładane na stos w kolejności od ostatniego do
pierwszego. Dzięki temu tuż przed wywołaniem na wierzchołku stosu jest położony pierwszy argument, a
głębiej na stosie znajdują się kolejne argumenty wywołania. Po przygotowaniu argumentów następuje
skok ze śladem.
Procedura: alokacja zmiennych lokalnych; dostęp do danych przez nazwy; każda instrukcja języka
wysokiego poziomu kompilowana niezależnie od wcześniejszych; wartość funkcji zwracana w rejestrze A;
dealokacja zmiennych lokalnych; powrót przy użyciu instrukcji skoku według śladu.
Operacje na stosie: PUSH umieszczenie danej na stosie; POP zdjęcie danej ze stosu i inkrementacja
SP (rejestr wskaznika stosu).
Model procesora II bardziej realistyczna wersja modelu I; stos w pamięci; rejestr wskaznika stosu;
jawnie zdefiniowane operacje stosowe; alokacja i dealokacja zmiana wartości wskaznika stosu bez
przesłania danej; dostęp do parametrów i zmiennych lokalnych bez nazwy. SLAJD 24.
Ramka stosu fragment stosu używany przez procedurę. Część ramki, która jest obecna na stosie w
chwili przekazania sterowania do procedury, nazywa się rekordem aktywacji. Adresy obiektów w ramce
można tworzyć zsumowanie wartości wskaznika stosu i stałej, jednak wartość wskaznika stosu może się
zmieniać podczas wykonywania procedury.
Rejestr wskaznika ramki służy do adresowania ramki stosu. Zawartość nie zmienia się. Wskazuje ramkę
bieżącej procedury. Każda procedura ustanawia własną wartość wskaznika ramki. Procedura musi przed
powrotem odtworzyć wskaznik ramki procedura wołającej.
Operacje na wskazniku ramki zapamiętanie wskaznika ramki na stosie i ustanowienie nowej wartości;
dane ramki stosu są stosowane względem wskaznika ramki; przed powrotem należy odtworzyć starą
wartość wskaznika ramki.
Procesory x86 akumulator/rejestr wartości; wskaznik stosu; wskaznik ramki; licznik instrukcji;
instrukcje w większości dwuargumentowe; dostępne adresowanie rejestrowe pośrednie z
przemieszczeniem. SLAJD 30.
Tabela zawiera opis instrukcji pierwszego modelu procesora.
Procesor wykonuje pięć instrukcji dotyczących stosu. PUSH umieszcza wartość na stosie. Instrukcja
skoku ze śladem przekazuje sterowanie do procedury po uprzednim zapamiętaniu śladu na stosie.
Instrukcja powrotu według śladu odtwarza ślad ze stosu jednocześnie usuwając go. Instrukcja
alokacji danej CREATE przypomina instrukcję PUSH, lecz nie nadaje danej na wierzchołku stosu
żadnej wartości. Instrukcja DESTROY usuwa daną z wierzchołka stosu.
Tablica przedstawia definicję instrukcji modelu, w tym symboliczny opis działania instrukcji
operujących na stosie.
Ponieważ model II różni się od modelu I tylko jawną definicją instrukcji, translacja programu dla
modelu II jest identyczna, jak dla modelu I.
Tabela zawiera zestawienie instrukcji modelu II i ich odpowiedników w x86. instrukcje LOAD i
STOR są zastąpione pojedynczą, dwuargumentową instrukcją przesłania MOV.
Operacje CREATE i DESTROY są realizowane jako odjęcie i dodanie stałej określającej rozmiar
obiektów do wskaznika stosu.
Wykład 6. Jednostka wykonawcza procesora
Procesor jednocyklowy
- układ sekwencyjny
- model programowy RISC ( z uproszczeniami MIPS)
- architektura HARWARD (program w ROM)
- instrukcje 32- bitowe
- max. częstotliwość 12 MHz
IM - pamięć instrukcji
PC_inc inkrementuje o 4 licznik instrukcji
nextPC ścieżka zawierająca następną zawartość PC (licznika rozkazów/instrukcji)
Wady: nie wykonuje instrukcji skoku ze śladem
Problemy: niska wydajność, oddzielne pamięci brak programowalności, nadmiarowość bloków
Procesor wielocyklowy
- model programowy CISC
- zminimalizowana liczba bloków funkcjonalnych (np. sumatorów), wielokrotne wykorzystanie ich
w jednej instrukcji
- instrukcja rozbita na cykle (w każdej fazie każdy blok wykonuje jedną czynność)
- różne instrukcje wykonują się w różnym czasie (CISC)
- skomplikowany układ sterujący
- zwiększona liczba multiplekserów (z powodu komplikacji dróg przesyłu danych)
- architektura PRINCETON
- wspólna pamięć programu i danych
- programowalność
- 2-3 odwołania do pamięci podczas wykonywania instrukcji
- konieczność zapamiętania pobranej instrukcji (rejestr IR)
- instrukcja wykonuje się w kilku cyklach zegara (średnio 3)
- max. częstotliwość 30 MHz
- wolniejszy od jednocyklowego
- niższe koszty wykonania
- fazy wykonywania instrukcji:
- pobranie instrukcji
- zdekodowanie instrukcji
- pobranie argumentów
- wykonanie operacji
- zapis wyniku
- pamięć poza procesorem, połączona z nim szyną
- jednostka interfejsu szyny do współpracy procesora z pamięcią
- bloki procesora:
- jednostka sterująca
- zestaw rejestrów
- ALU
- jednostka interfejsu szyny
Działanie:
- przez większość czasu większość bloków procesora jest bezczynna
- aktywność poszczególnych bloków w różnych fazach wykonania instrukcji
- pobranie instrukcji (interfejs szyny)
- dekodowanie instrukcji (jednostka sterująca)
- odczyt argumentów (rejestr lub interfejs szyny)
- wykonanie operacji (ALU)
- zapis wyników (rejestry lub interfejs szyny)
Optymalizacja:
- zwiększenie liczby ścieżek danych wewnątrz procesora szybkie wykonanie złożonych instrukcji
z wieloma argumentami
- pobranie instrukcji z wyprzedzeniem PREFETCH
- dodatkowy rejestr scanPC w jednostce interfejsu szyny
- rejestr instrukcji pobierającej na zapas prefetch register -w jednostce interfejsu szyny
- pominięcie fazy pobierania instrukcji, pobranie następnej instrukcji o adresie z scanPC do rejestru
prefetch na zapas w czasie bezczynności
Problemy:
- różna długość instrukcji (CISC) mechanizm prefetch pobiera 1 słowo z pamięci
- skok unieważnia zawartość rejestru prefetch niezgodność nextPC z scanPC
- częsta bezczynność interfejsu szyny (rozwiązanie: kolejka instrukcji, bufor FIFO zamiast
pojedynczego rejestru prefetch
-skok unieważnia kolejkę (trzeba skopiować nextPC do scanPC)
- opóznienie skoków (branch penalty) wynika z konieczności przeładowania kolejki instrukcji
- skoki wykonują się dłużej niż inne instrukcje
- statystycznie 7-14% instrukcji to skoki
rozwiązanie: redukcja liczby skoków przez odpowiednie techniki programowania i użycie
instrukcji itercyjnych, wykrywanie krótkich pętli kolejka zmienia się w bufor cykliczny
wykonanie pętli bez pobierania instrukcji z pamięci
Procesor potokowy
- wykonanie pojedynczej instrukcji zajmuje 5 cykli zegarowych
- w każdym cyklu procesor rozpoczyna nową instrukcję i kończy inną
- wydajność 1 sekunda na 1 cykl (widziana z zewnątrz)
- częstotliwość ok. 33 MHz
- od połowy lat 80 XX w. potoki to prawie wszystkie wyprodukowane procesory
- równoległe wykonanie instrukcji zwiększa wydajność ale tworzy problemy z synchronizacją
Stopnie potoku:
IF pobranie instrukcji
RD dekodowanie i odczyt argumentów z rejestrów
ALU obliczanie wyniku w jednostce arytmetyczno-logicznej
MEM wymiana danych z pamięcią
WB zwrotny zapis wyniku do rejestrów
WYKAAD 7 Działanie potokowej jednostki wykonawczej
Potokowa jednostka wykonawcza MIPS 3000
- jeden z pierwszych mikroprocesorów RISC
- 5 stopni potoku: IF, RD, ALU, MEM, WB
- czas wykonania instrukcji 4 cykle (IF i WB po pół cyklu)
- architektura HARWARD-PRINCETON (rozdzielone górne warstwy hierarchii pamięci, wspólna
pamięć operacyjna
Potok R3000 składa się z pięciu stopni.
Stopień IF pobiera instrukcje z hierarchii
pamięci instrukcji (zewnętrznej w stosunku
do procesora).
Stopień RD odczytuje zawartości rejestrów
zródłowych z zestawu rejestrów procesora.
Stopień ALU wykonuje operację
arytmetyczną i ew. skok.
Stopień MEM dokonuje wymiany danych z
hierarchią pamięci danych.
Stopień WB zapisuje wynik operacji
arytmetycznej lub daną odczytaną z pamięci
do rejestru.
- aktualizacja PC i rejestrów uniwersalnych w połowie cyklu zegara
Problem: kolejna instrukcja może potrzebować jako argument wyniku poprzedniej instrukcji,
jeszcze nie zakończonej co spowoduje pobranie złej wartości
- hazadr RA-W (read-after-write) niemożliwość przewidzenia wartości jaką pobierze druga
instrukcja
- usuwanie hazardu RA-W
-metoda administracyjna programista sam musi unikać sekwencji instrukcji,
konieczność wstawienia między instrukcje instrukcji pustych lub innych nie
powiązanych
-wstrzymanie potoku po wykryciu hazardu instrukcja druga wstrzymana w RD ( IF i RD
stoją), do ALU wstrzyknięta instrukcja pusta, wznowienie instrukcji drugiej gdy instrukcja
pierwsza dojdzie do WB
- obejścia szyny poprowadzone z ALU i MEM do RD, wynik operacji arytmetycznej jest
dostępny już w ALU, w razie potrzeby pobranie instrukcji obejścia ALU, MEM, dopiero w
ostateczności z rejestru fizycznego procesora. Obejścia eliminują hazard bez opóznień.
Instrukcja skoku w potoku
- skok realizowany w ALU
- kolejna instrukcja jest w tym czasie w RD
- w przypadku skoku jest ona anulowana (powoduje opóznienie) 1 cykl
wniosek: skoki powodują opóznienie
Redukcja opóznienia skoków:
- wprowadzenie skoku opóznionego (delayed branch) wykonuje przed skokiem niezależną
instrukcję, która miała być wykonana po skoku, 90% szans na znalezienie niepowiązanej ze
skokiem instrukcji
Wydajność potoku
- teoretycznie 1 cykl w sekundę, rzeczywista 1.2 cyklu w sekundę
- czynniki opózniające wewnątrz potoku:
- hazardy inne niż przez obejścia,
- ładowanie danych z pamięci
- skoki
-czynniki na zewnątrz potoku:
- dostęp do hierarchii pamięci > 1 cykl
Przyspieszenie potoku może spowodować zmniejszenie wydajności (np. dostęp do hierarchii
pamięci niemożliwy w 1 cyklu. Rozwiązanie: wydłużenie potoku, wprowadzenie superpotoku
(powyżej 6 stopni)
IF- Instruction First początek pobrania
instrukcji
IS Instruction Second zakończenie
pobierania instrukcji
RD- read odczyt argumentów
EX execute odpowiednik ALU w R3000
DF data first początek odwołania do
danych
DS data second koniec transakcji z
pamięcią danych
DTC- data tag check finalizacja odwołania
WB write back zapis wyniku do rejestru
Współpraca z pamięcią
- odwołania do pamięci rozbite na dwie fazy
- pamięć ma budowę potokową, dostęp w dwóch cyklach zegara, dwa dostępy do pamięci naraz
Opóznienie i synchronizacja superpotoku
- problemy synchronizacyjne (hazard) i opóznienia takie jak w zwykłym potoku
- konieczna większa liczba obejść i większe opóznienia (ładowania danych i skoków)
Opóznienie danych w superpotoku
- przy zastosowaniu obejść opóznienie 3 cykle
- odwołania do pamięci szczególnie do struktur danych
- wyższa częstotliwość powoduje opóznienia zewnętrzne
Opóznienia skoków w superpotokach
- niemożliwość użycia skoku opózniającego 20% szans na znalezienie dwóch instrukcji
niezależnych od skoku
- przewidywanie skoków rozwiązaniem problemu
Wydajność superpotoków
- 1.5 cyklu na sekundę (rekompensowane przez wyższą częstotliwość)
- przyrost wydajności z wydłużeniem potoku 50%
Potokowa realizacja procesora CISC
- CISC nie pasuje do koncepcji potoku, rozwiązania:
- konstrukcja potoku wykonującego instrukcje CISC skomplikowany
- transkodowanie instrukcji CISC na pseudoRISC,
jednostka wykonawcza wykonuje instrukcje RISC
WYKAAD 8 Procesory wielopotokowe (superskalary)
Budowa i działanie superskalara
- pierwsze stopnie pobierają i dekodują naraz kilka instrukcji
- instrukcje są kierowane każda do innego potoku ( nie zawsze da się skierować instrukcje do
każdego potoku)
- stopień porządkujący decyduje o zatwierdzeniu wykonania instrukcji i modyfikuje PC (licznik
instrukcji)
- stopień zapisu ostatecznie modyfikuje rejestry i pamięci
Rodzaje superskalarów
- pseudosuperskalar
-procesor nie decyduje o równoczesnym wykonaniu instrukcji, decyduje programista lub
kompilator
- przykład: Intel 860
-dwa potoki wykonawcze (stało- i zmiennopozycyjny)
- instrukcje 32 bitowe pobierane parami
- równoczesne wykonanie obu instrukcji gdy pierwsza stało a druga
zmiennopozycyjna oraz w kodzie zmiennopozycyjny bit zezwolenia
- superskalar z kolejnym wykonaniem instrukcji
- procesor decyduje o równoległym wykonaniu instrukcji, równoległe wykonanie możliwe
gdy brak zależności między instrukcjami do wykonania w tym samym cyklu
-rodzaje potoków:
- 1 potok wszystkie, 2 tylko proste instrukcje
- 1 potok stało, 2 zmiennopozycyjne instrukcje
- potoki pracują sekwencyjnie wstrzymanie jednego zatrzymuje pozostałe
- instrukcje pobierane po kilka w grupie (2,4), kierowane do wykonania pobierana następna
grupa instrukcji
- okno instrukcji stopień szeregujący dobiera instrukcje aby w każdym cyklu rozpocząć tą
samą ilość instrukcji większa wydajność i komplikacja stopnia szeregującego
- superskalar z kolejnym rozpoczynaniem i niekolejnym kończeniem
- pobieranie i dekodowanie instrukcji po kilka sztuk w kolejności programu
- wstrzymanie jednego potoku nie wstrzymuje pozostałych
- kolejność kończenia instrukcji może być inna niż kolejność rozpoczęcia
- większa wydajność, wykorzystanie potoków
- problemy synchronizacyjne
- superskalar z niekolejnym wykonywaniem instrukcji
- zdekodoawne instrukcje trzymane w stopniu szeregującym, kierowane do wykonania gdy gotowe
argumenty zródłowe
- dowolna kolejność wykonania instrukcji
-rodzaje szeregowania: centralny bufor przed rozdziałem na potoki (równe obciążenie przy
identycznych potokach, drogie rozwiązanie np. Intel P6, AMD K6), bufory w pierwszych stopniach
potoków (stacje rezerwacyjne algorytm Tomasulo, proste w realizacji np. AMD K5)
- PC musi być zawsze aktualny
- instrukcja wykonana gdy poprzednie też wykonane
-stopnień RETIRE za potokami miejsce oczekiwania instrukcji na wykonanie poprzednich
- niemożliwość modyfikacji pamięci i kontekstu procesora przed ostatecznym zakończeniem
instrukcji
- 2 ostatnie stopnie RETIRE, ostateczny zapis
- tego typu są prawie wszystkie dzisiejsze procesory (Intel Pentium 4, Intel Core, AMD K8)
Problemy synchronizacyjne
- hazard WAR (zapis po odczycie)
- hazard WAW (zapis po zapisie
- zródła hazardów:
Ograniczona liczba rejestrów
Oszczędne korzystanie ze zmiennych i rejestrów przez programistów
Pętlowa struktura programów
Rozwiązanie: więcej rejestrów niż w modelu programowym
Przemianowywanie rejestrów dynamiczne przypisanie rejestrów fizycznych do tych z modelu
programowego
WYKAAD 10 Redukcja opóznień w procesorach superskalarnych
Opóznienia w superpotokach i superskalarach
-superpotok stracone cykle=stracone instrukcje
- superskalar stracone cykle*potoki=stracone instrukcje
Opóznienia skoków (superpotok, superskalar)
-10% instrukcji to skoki
-duże opóznienia skoków (nawet kilkanaście cykli)
Spekulatywne wykonanie instrukcji procesor próbuje przewidzieć następną instrukcję po skoku,
wykonuje ją, a gdy błędnie przewidzi to anuluje tą instrukcję
Terminologia:
- wykonanie skoku wykonanie instrukcji skoku która może (nie musi) zmienić PC
- realizacja skoku zmiana wartości PC
Przewidywanie skoków:
- próba przewidzenia czy skok się odbędzie
- spekulatywne wykonanie instrukcji po skoku (zrealizowanym bądz nie)
- wykonanie instrukcji skoku jest sprawdzeniem przewidywania
- jeśli przewidywanie było poprawne skok wykonany bez, lub z mniejszym opóznieniem,
instrukcje spekulatywne mogą być zatwierdzone
- gdy przewidywanie błędne - instrukcje wykonane spekulatywnie są anulowane (czas ich
wykonania to opóznienie), wykonanie właściwych instrukcji
- przewidzieć można wystąpienie instrukcji skoku, czy skok się wykona oraz adres
docelowy skoku
-skok bez spekulacji
statyczny bezwarunkowy, statyczny warunkowy, dynamiczny
Przewidywanie skoków
- statyczne niepotrzebna historia wykonania programu, po zdekodowaniu instrukcji skoku
- dynamiczne na podstawie historii programu, przed pobraniem instrukji
Statyczne przewidywanie realizacji skoku
- przez kompilator, programistę oznacza skoki jako prawdopodobne lub
nieprawdopodobne
- przez procesor 60% skoków w tył jest realizowanych a w przód niezrealizowanych
(statystycznie) procesor korzysta z tej własności
Dynamiczne przewidywanie wystąpienia skoku
- bufor docelowy skoków BTB (Branch Target Buffor) zawiera informacje o wykonanych
skokach
- BTB pamięta adres instrukcji skoku i adres docelowy skoku
- Jeśli adres instrukcji skoku = scanPC ładowanie instrukcji do której prowadzi skok (co
scanPC)
Ograniczenia BTB: nie przewiduje skoków warunkowych i dynamicznych
Sprzętowy stos powrotów: niewielki niewidoczny stos, efektywny dla zgłębienia procedur <
pojemność stosu
Dynamiczne przewidywanie realizacji skoku: BTB przewiduje skoki warunkowe jako
bezwarunkowe, predyktor decyduje czy skok się wykona
Skróty: T (Taken) skok zrealizowany, NT (Not Taken) niezrealizowany, PT (Predikt Taken)
przewidywany jako zrealizowany, PNT (Predikt Not Taken) przewidywany jako niezrealizowany.
Ograniczenia: błędne przewidywanie ostatniego skoku w pętli, nie przewidują skoków cyklicznych
Predyktory dwupoziomowe:
- przechowują informację o prawdopodobieństwie warunkowym: jak wykona się skok jeśli był 1
raz zrealizowany i 3 razy zrealizowany
- wybór predyktora na podstawie adresu instrukcji skoku i historii wykonań
Predyktor gLocal określa prawdopodobieństwo skoku na bazie poprzednich wykonań wszystkich
ostatnio wykonanych skoków
Predyktor gShare określa prawdopodobieństwo skoku na bazie poprzednich wykonań wszystkich
ostatnio wykonanych skoków
Własności: - powolne uczenie się predyktorów, trafność przewidywań ok 95%, gLocal lepiej
przewiduje krótkie pętle, gShare lepiej przewiduje przejścia zależne od wartości
Predyktory trójpoziomowe
- hybryda dwóch predyktorów np. gLocal i gShare
- dwa schematy przewidywania skoku, w przypadku błędu zmiana realizowanego schematu
- trafność powyżej 96%
Redukcja opóznień pobierania danych z pamięci
- w superskalarach niezbędne pobieranie danych z pamięci do buforów na zapas (data prefetch)
- pobieranie przez procesor (spekulatywne) bądz przez oprogramowanie
WYKAAD 9 Kieszenie jako warstwa hierarchii pamięci
Kieszenie:
- warstwa pamięci między rejestrami i RAM
- niewidoczna dla programisty (bądz ograniczony
dostęp)
- jest buforem RAM
Działanie:
- sprawdzenie obecności danej w kieszeni przy każdym odwołaniu CPU do RAM
- brak danej w kieszeni ładowanie danej z pamięci do CPU, po drodze zapis danej z adresem do
kieszeni
- dana w kieszeni odczyt danej z kieszeni (szybsze)
- zasada lokalności odwołań w ograniczonym czasie odwołania procesora na niewielkiej
przestrzeni adresowej duże prawdopodobieństwo odwołania do danych sąsiednich.
Kieszeń pełnoasocjacyjna
- trudna, nieefektowna, małe pojemności niestosowana, brak adresów,
- działa jak książka telefoniczna: szukamy nazwiska, odczytujemy nr tel, nie przejmujemy się
położeniem nazwiska w książce
charakterystyka:
- w każdej komórce może być dana z dowolnym adresem
- komparator w każdej komórce
konstrukcja:
- dane w kieszeni przechowywane jako bloki (słowo*4)
-element kieszeni z danymi + znaczniki (adresu)=linia
-najmniej znacząca część adresu używana do wyboru bajtu/słowa z linii
Kieszeń nezpośrenio adresowana
- na bazie szybkiego RAM i komparatora
- prosta, szybka, wydajna, duża pojemność
-najmniej ważny bit wybór bajtu z linii
- środkowa część - adres RAM wybór linii
Działanie
- w każdym cyklu wybór jednej linii zaadresowanej przez mniej znaczącą część adresu
- trafione dane transmitowane do procesora
- chybienia wymiana linii
Kieszeń zbiorowo- asocjacyjna
- połączenie kieszeni bezpośrednio adresowanych (bloków)
- dana spod określonego adresu może być w każdym bloku
- zestaw linii w cyklu zbiór (mała kieszeń pełnoasocjacyjna)
-stopień asocjacywności liczba bloków
- złożenie kieszeni pełnoasocjacyjnych
Działanie:
- podobna do bezpośrednio adresowanej
- chybienie wyznaczenie 1 linii do zastąpienia
- mała wrażliwość na powtarzanie się adresów
Rodzaje kieszeni
- najczęstsze zbiorowo asocjacyjne
- gdy duże zapotrzebowanie na szybkość- kieszeń bezpośrednio adresowana
Współczynniki trafień
- stosunek trafień do liczby odwołań w przedziale czasu
- zależy od: pojemności, organizacji wykonywanego programu
- 0-0,9 zależy od pojemności
- 0,9-1 zależy od organizacji i alegoryzmu wymiany
- wyższa asocjacyjność => hit ratio
- wysoki hit ratio nie zapewnia do końca wyrównania wydajności między czasem dostępu do RAM
a czasem cyklu procesora
Kieszenie wielopoziomowe L1, L2, L3
- L1 bardzo szybka, mała pojemność
- L2 wolniejsza (np. 5x) znacząco większa
- L3 wolna, duża
Kieszenie inkluzywne:
- przepływ danych: L2=>L1=>CPU
- każdy obiekt w wyższej warstwie jest też w niższej
- całkowita pojemność = pojemność największej warstwy
- L2>>L1 (znacznie większa)
Kieszenie wyłączne
- L2 zawiera obiekty usunięte z L1 (victim cache)
- przepływ danych: RAM=>L1=>CPU=>L1=>L2
-całkowita pojemność suma pojemności wszystkich warstw
- L2>=L1
WYKAAD 12 Zarządzanie pamięcią
Funkcje systemu zarządzania pamięcią:
- sprzętowa relokacja każdy proces widzi
przestrzeń adresową tak samo
- ochrona przed ingerencją w kod i dane innego
procesu
- dynamiczna alokacja i dealokacja
powiększanie, zmniejszanie pamięci
przydzielonej procesowi
- wirtualizacja niezależność dostępności
pamięci od jej zajętości
Jednostka zarządzania pamięcią
- pomiędzy CPU i RAM
- zamienia adres logiczny z procesora na adres
fizyczny
Prosta relokacja
- pierwsza metoda
- system operuje na adresach fizycznych
Translacja adresu w jednostce relokacji
- sprawdzenie czy adres logiczny znajduje się w obszarze przydzielonym procesowi (między
DATUM, LIMIT)
- DATUM to baza
- jeśli tak adres fizyczny = adres logiczny + baza
- jeśli nie zwrócony błąd
alokacja pamięci
- rozszerzenie obszaru pamięci procesu
- gdy brak miejsca bezpośrednio za procesem przemieszczenie dalszych procesów
Wada: fragmentacja pamięci (zbyt małe puste obszary aby zaalokować nowy proces fragmentacja
zewnętrzna)
Jednostka relokacji:
- 3 z 4 funkcji zarządzania pamięcią: relokacja, ochrona, dynamiczna alokacja
- brak wirtualizacji
Segmentacja:
- uogólniona relokacja
- jednostka segmentacji
- przestrzeń adresowa procesu podzielona na segmenty o różnych długościach:
-kod, dane statyczne (stałe, zmienne), stos, sterta
Adresy logiczne w segmentacji
- dwuwymiarowa logiczna przestrzeń adresowa
- adres logiczny dwuczęściowy: id segmentu, offset
- jednostka segmentacji translatuje adresy w przestrzeni dwuwymiarowej na adresy w przestrzeni
pełnowymiarowej - liniowej
Deskryptor segmentu zawiera informacje o segmencie ( znacznik ważności, odmowa dostępu,
rozmiar, liniowy adres bazowy)
Translacja adresu w jednostce segmentacji
- jednostka segmentacji odbiera adres logiczny (id segmentu, offset)
- dzięki id segmentu odnajduje deskryptor
- błąd gdy nieprawidłowości deskryptora
- brak błędu adres liniowy (fizyczny) = liniowy adres bazowy (z deskryptora) + offset
Alokacja pamięci
- rozszerzenie segmentu sterty
- alokacja nowego segmentu
Pamięć wirtualna na bazie segmentacji
- podział programu na wiele segmentów sterty i kodu (niepodzielny segment stosu)
- fragmentacja pamięci masowej
Segmentacja występuje tylko w architekturze x86
Stronicowanie
- podział logiczny i fizyczny przestrzeni adresowej na bloki (dł. 2'')
- bloki przestrzeni logicznej to strony
- bloki przestrzeni fizycznej to strony fizyczne lub ramki stron
Jednostka stronicowania
- translacja adresu przyporządkowanie stronie logicznej strony wirtualnej
- jednostka stronicowania dzieli adres na strony wirtualnej VPN i adres wewnątrz stronicowy
(offset)
- translacja zamienia VPN na PPN (physical page number)
TLB bufor translacji przechowuje kilka ostatnio użytych deskryptorów (ważnych)
Pamięć wirtualna na bazie stronicowania
- niepotrzebne strony zrzucane na dysk
- brak fragmentacji stały rozmiar stron
- deskryptory przechowywane w pamięci w strukturach tablicowo drzewiastych
- deskryptor nieważny cały fragment przestrzeni adresowej nieważny
- każdy proces ma własną tablicę deskryptorów
WYKAAD 11 Zarządzanie zasobami komputera
- procesy nie mogą sobie przeszkadzać ani się szpiegować oraz mieć dostępu do pamięci innego
procesu bez jego zezwolenia
Zasoby podlegające ochronie:
- procesor proces nie może przejąć całego czasu procesora (systemy wieloprocesowe)
- pamięć powinien mieć dostęp tylko do wyznaczonego mu obszaru pamięci, ewentualnie do
danych współdzielonych ( za zgodą innego procesu), dostęp procesu do jego pamięci tylko we
właściwy sposób)
- wejście/wyjście procesy nie mogą sobie przeszkadzać podczas dostępu do urządzeń
zewnętrznych
- zakaz bezpośrednich odwołań do urządzeń
Użytkownik i system
- minimum 2 poziomy zaufania:
- poziom użytkownika programy użytkowe, mogą mieć błędy
- poziom systemowy system operacyjny, powinien działać bezbłędnie
Poziomy zaufania:
- 0 poziom jądra systemu pełny dostęp do wszystkich zasobów
- 1,2 poziom usług systemu (opcjonalny) ograniczony dostęp, lecz o znaczących uprawnieniach
- 3 poziom użytkownika najbardziej ograniczony, dostęp do zasobów przydzielonych przez
system, na zasadach określonych przez system
Ochrona procesora:
- dostęp do zasobów zależy od poziomu zaufania
- procesor w każdej chwili pracuje z określonym poziomem zaufania
- poziom zaufania przechowywany w rejestrze stanu procesora (1 lub 2 bity)
- dostęp do rejestru z informacjami sterującymi tylko na poziomie systemowym
- rejestry systemowe podlegają ochronie
Egzekwowanie zasad ochrony
- każde naruszenie zasad ochrony musi być wykryte, udaremnione i zgłoszone do OS jako wyjątek
- system może usunąć szkodliwy proces
Ochrona czasu procesora
- wymuszenie przełączania procesów w czasie (syst. wieloprocesowe)
- przełączanie procesów na podstawie algorytmu, zgłoszenie wyjątku przez system
- po przejęciu sterowania system może usunąć proces
Ochrona urządzeń wejścia/wyjścia
- procesy użytkowe całkowicie odizolowane od fizycznych urządzeń
- urządzenia fizyczne obsługuje system
- wyjątek: wyłączny dostęp procesu do urządzenia np. DirectX w Windows
Ochrona pamięci: proces ma mieć dostęp tylko do przydzielonej mu pamięci
Maszyny wirtualne
- hypervisor oprogramowanie nadrzędne do systemów
- system uruchomiony pod innym systemem musi mieć mniejszy poziom zaufania niż gospodarz
Obecnie: hypervisior, tzw host (gospodarz) pod którym działa gość (inny OS), dostęp do niektórych
zasobów tylko w trybie gospodarza
WYKAAD 13 Sytuacje wyjątkowe
Wyjątek zdarzenie w systemie komputerowym wymagające przerwania wykonywania strumienia
instrukcji i przekazania sterowania do systemu operacyjnego
Rodzaje wyjątków:
- przerwania powstają asynchronicznie poza procesorem, niezależnie od wykonania instrukcji,
sygnalizują ważne zdarzenia dla systemu operacyjnego (zmiana stanu urządzeń lub upłynięcie
odcinka czasu)
- pułapki powstają w procesorze, zależne od wykonywanych instrukcji (generowane przez nie),
rodzaje: przerwania programowe, sygnał o błędzie programu do OD, pułapka śledzenia (przy
tworzeniu programu debug)
- błędy generowane przez procesor (np. dzielenie przez 0) przez jednostkę wykonawczą i
zarządzania pamięcią, wyjątek: błąd transmisji (poza procesorem)
Obsługa wyjątków:
- każdy wyjątek musi zostać obsłużony
- na poziomie oprogramowania (reakcja OS na zdarzenie)
- na poziomie procesora (czynności przerywające obsługę bieżącego strumienia instrukcji i
wykonanie procedury OS)
Fazy obsługi wyjątku przez procesor:
- identyfikacja zródła wyjątku w przypadku przerwania (pułapka, błąd zbędna)
- przerwanie wykonywanych instrukcji: (zapamiętanie bieżącego stanu procesora
- załadowanie nowego kontekstu procesora w celu obsługi wyjątku przez OS
- powrót z obsługi wyjątku (nie zawsze możliwy) odtworzenie informacji zapamiętanych przy
obsłudze wyjątku.
W CISC 2 stosy stos użytkownika i stos systemowy
System przerwań
- hierarchia przerwań piorytet przerwań obsługiwanych przez procesor
- podejście jednopoziomowe blokada lub zezwolenie na przerwania
- wielopoziomowy system przerwań 3/16 poziomów, wolniejsze urządzenie ma niższy
piorytet
- maska przerwań aktualny poziom wrażliwości
Zmiany poziomu wrażliwości obsługa przerwania o tym samym bądz niższym piorytecie
- przerwania niemaskowalne nie zależą od poziomu maski przerwań (np. awaria zasilania)
Asynchronicznie przerwanie programowe to nie przerwanie tylko pułapka przerwanie zgłoszone
przez sam procesor
Reset wyjątek o najwyższym priorytecie, natychmiastowe przekazanie sterowania pod określony
adres
Priorytety sytuacji wyjątkowych
- na poziomie systemu wynikają z pilności zdarzenia: przerwania>pułapki>błędy
- na poziomie procesora wynikają z kolejności działań procesora: błędy (stopuje
CPU)>pułapki>przerwania
We współczesnych komputerach sterownik pamięci
umieszczony jest w procesorze. Most północny jest
wyposażony w indywidualne łącza dla sterowników
urządzeń zewnętrznych, zrealizowane w standardzie PCI
express. Most południowy jest zintegrowanym
sterownikiem urządzeń zewnętrznych. Szyna PCI została
zachowana w celu umożliwienia podłączenia starszych
sterowników urządzeń.
17
Wyszukiwarka
Podobne podstrony:
opracowania na egzamin1KJPS opracowanie na egzaminOpracowanie na egzamin z geodezji I, wesja 2(1)pdfOpracowanie na egzamin z fizyki, semestr I(1)Mechanika gruntów opracowanie na egzaminFizyka opracowanie na egzamin, wersja 2Fizyka opracowanie na egzamin 30 06 2015Przykładowe pytania i opracowania na egzamin pytania na egzamin psychologiaPytania z opracowaniem na egzamin z Mechaniki GruntówBD opracowanie na egzamintematy do opracowania na egzamin z PC[ASK] Opracowanie zagadnień na egzamin w trakcie składaniakzu pytania na egzamin opracowanieOpracowanie Zagadnień na egzamin MikroprockiKartografia opracowanie pytań na egzaminwięcej podobnych podstron