You are on page 1of 34

1.

1 Komputer, Pamięć, Proces

1.1.1 Komputer

 ALU + pamięć + magistrala; procesor zapisuje i odczytuje dane z pamięci


 Odczytane dane są interpretowane jako instrukcje lub argumenty funkcji
 Domyślnie wszystko jest sekwencyjnie chyba że skok
 Architektura harwardzka – osobna taśma/instrukcje na dane i instrukcje
 ALU + jednostka sterująca + rejestry \
 Multipleksowana magistrala – raz służy do zapisu adresu a raz do danych, zmniejsza liczbę
linii kosztem szybkości, linii ALE mówi co jest podawane przez magistralę

1.1.2 Pamięć

 Pamięć sekwencyjna/taśmowa SAM – dyski mechaniczne


 RAM – ponumerowane komórki, swobodny dostęp
 Asocjacyjna – Cache, wystawia się część adresu a asocjacyjna zwraca resztę
 DDRx – trzeba mechanicznie najpierw podać stronę, odczyt ze strony jest swobodny
 Pisanie programu to wypełnianie pól pamięci danych

1.1.3 Proces

 Plik obiektowy ma logiczne adresy, pozwala dołączyć się do wielu programów, relokowalny
 System po uruchomieniu pliku: przydziela procesowi pamięć operacyjną; wypełnia tą pamięć
instrukcjami i danymi z pliku; na etapie ładowania ładuje biblioteki (dzielona pamięć);
rozpoczyna wykonywanie z kontrolą stanu i reakcji na błędy
 Każdy rozkaz to: identyfikacja danych (adresowanie); wykonanie działania (kopiowanie,
zmiana formatu, konwersja kodu, działania logiczne i arytmetyczne); sterowanie
rozgałęzieniami
 Algorytm + dane (łańcuchy, umowy ASCII, interpretacje własne)

1.2 Model programowy procesora ISA, adres logiczny, obliczanie


adresu

1.2.1 Model programowy procesora ISA

 Lista rozkazów; tryby adresowania; rejestry; typy danych; sposób reagowania na wyjątki i
przerwania
 Lista rozkazów zewnętrzny język procesora tłumaczony wewnątrz procesora na optymalny
ciąg mikrooperacji
 Tryby adresowania INTEL
o Natychmiastowe – wartość argumentu jest w kodzie instrukcji, opcode+wartość
o Rejestrowe – bezpośrednie i pośrednie, podaje się nazwę rejestru
o Porty we/wy
o Bezpośrednie – liczba będąca adresem operandu (miejscem w pamięci)
o Pośrednie – w kodzie jest zawarta informacja na temat jak obliczyć adres
 Fazy

1.2.2 Adres logiczny

 Adres logiczny – adres używany w kodzie programu, niezwiązany z rzeczywistym procesem,


na etapie pisania i debuggowania; nazwy i adresy używane w kodzie są tłumaczone na adresy
logiczne
o Po napisaniu kodu na etapie pliku obiektowego nadal jest używany adres logiczny i
specyficzne zastąpienia symboli
o Plik obiektowy do binarnego nadal używa adresu logicznego, choć dłuższego, z
identyfikatorem segmentu; bardziej rzetelne zastępywanie etykiet
o Adres logiczny jest tłumaczony na fizyczny dopiero po rozpoczęciu procesu, niektóre
symbole z bibliotek da się przetłumaczyć dopiero teraz
 Adres wirtualny – przetworzony adres logiczny z dodanymi identyfikatorami segmentu,
pośredni między fizycznym; osobne mechanizmy w procesorze tłumaczą adresy logiczne na
wirtualne, a wirtualne na fizyczne RAM lub innych urządzeń

1.2.3 Obliczanie adresu

 Obliczanie lokalizacji w pamięci

https://sourceware.org/binutils/docs/as/i386_002dMemory.html#i386_002dMemory
 Post lub pre -inkrementacja – aktualizowanie adresu bazowego po lub przed odwołaniem do
pamięci; przydatne do operacji na tablicach i przetwarzania sygnałów
 Dane w pamięci mogą mieć różny rozmiar x*8 oraz typ (NB, U2, float, double) oraz ilość na
raz (wektory np. 16*8 na raz)
 BIG Endian – od najbardziej znaczącej do najmniej; Little Endian – najmniejsza część jest
umieszczana najpierw
 Wyrównywanie – gdy najmniej znaczący bajt jest w komórce o numerze podzielnym przez
długość wektora to pobieranie danych jest szybsze

1.3 Instrukcje, procedury, stos

1.3.1 Instrukcje

 Aktualnie procesory nie realizują wprost instrukcji z assemblera, lecz instrukcje te są


tłumaczone na wewnętrzny język procesora
 Assembler – program tłumaczący kod źródłowy w assemblerze na plik wykonywalny lub
obiektowy
 Język asemblera – potocznie asembler, mnemoniczny język zapisujący mapę pamięci którą
należy użyć w procesorze
 W każdej instrukcji jest opcode i argument, ale mogą być też prefiksy (określają atomowość
instrukcji, określają segment, podpowiedzi do przewidywania skoku, prefiks blokady
magistrali)
 CISC rozkazy mogą mieć różną długość od kilku do kilkunastu bajtów
 W procesorach RISC wszystkie rozkazy mają tę samą długość co jest łatwiejsze, szybsze i
tańsze
 Rozgałęzienia zawsze spowalniają program – aby ich unikać można stosować specjalne
instrukcje z porównaniem (cmov) albo specjalne dla każdej sytuacji funkcje logiczne,
procesory graficzne mogą też mieć dodatkowe systemy/sprzęty i instrukcje z prefiksem
korzystające z predykatów mówiących o tym kiedy wykonać daną instrukcję

1.3.2 Procedury

 Loop – zmniejsza %ecx i skacze jeśli nie jest 0; trzeba zmniejszyć %ecx o jeden żeby wykonać
tyle instrukcji ile wartość %ecx; skakać można tylko w niewielkim zakresie +- 128 bajtów
 Switch skacze do etykiety którą oblicza się za pomocą operacji logicznych, wartość
porównywana musi mieć mały zakres przewidywanych wartości

1.3.3 Stos

 W Intelu stos rośnie w dół; zaczyna się od wysokiego adresu, stos jest na końcu programu,
dane dynamiczne (sterta) są alokowane od początku
 Wskaźnik stosu wskazuje na ostatni element (nie na pierwsze wolne miejsce)
 Push zmniejsza wskaźnik stosu po czym zapisuje element
 Dane na stosie muszą być wyrównane do 32 bitów

1.4 Funkcje

 Wydzielone fragmenty kodu, które po wykonaniu skaczą do miejsca, w którym zostały


wykonywane
 Wywołuje się jak skok poprzez instrukcję call, a na końcu funkcji ret
 Argumenty są umieszczane na stosie w odwrotnej kolejności, pierwszy argument zawiera
informację o tym ile argumentów ma funkcja; rejestry edi, esi, ebx muszą być niezmienione

przez funkcję; adres powrotu jest odkładany na szczyt stosu przez call, później na stos jest
wkładana wartość ebp z poprzednią wartością stosu; zmienne lokalne są na kolejnych
miejscach stosu
 Funkcje mogą korzystać z parametrów globalnych, lecz są wtedy jednowejściowe, co
pogarsza wywoływanie równoległe kilku instancji oraz wywoływanie rekurencyjne

1.5 Pamięć operacyjna, DDR4, problem taktowania

1.5.1 Pamięć operacyjna

 W średnich przypadkach często szybkość działania programu nie jest zależna od szybkości
procesora lecz od szybkości magistrali między procesorem a pamięcią główną DDR RAM

 Pamięć o dostępie swobodnym RAM, bardzo szybka i wygodna ale zbyt droga
 SAM – sekwencyjna, zawiera duże opóźnienia
 CAM – skojarzeniowa, wyszukuje za pomocą wzorca
 SRAM – static RAM – korzysta z półprzewodników, 1 bit potrzebuje 6 tranzystorów;
problemem jest skok poboru mocy oraz małe pojemności
 DRAM – dynamic RAM – korzysta z kondensatorów i jednego tranzystora, mały rozmiar
układu, ale ładunek upływa z kondensatora wraz z upływem czasu; wymaga odświeżania co
kilkanaście kilkadziesiąt milisekund (doładować jedynki, rozładować 0); odświeżenie polega
na ponownym zapisaniu tych samych danych

1.5.2 DDR4

 grupy banków, banki są podzielone na wiersze i kolumny, na magistralę podaje się najpierw
wiersz, później kolumnę, zwracane jest zawsze 32 bity, kilka układów scalonych pozwala na
zwracanie 64 bitów
 jeśli zakres żądanych danych jest mniejszy niż 8 kB to można czytać i pisać z jednego wiersza
co przyspiesza działanie gdyż pozwala uniknąć czasu przeładowania; korzystanie z dalszych
zakresów wymaga przeładowania banku;
 występuje zawsze opóźnienie między podaniem kolumny a otrzymaniem danych, ale można
podać kilka numerów kolumn i uzyskać cały wiersz w jednym żądaniu; aktywacja
 Występuje również opóźnienie między podaniem wiersza a podaniem kolumny –
przeładowanie wiersza
 Najdłuższe opóźnienie na ogół ma czas aktywacji nowego wiersza
 Opóźnienia zależą od banków i grupy banków; łącznie osiąga się 80% efektywnej
przepustowości
 Kilka układów na jednej płytce wybiera się za pomocą sygnału Rank, kontroler pamięci
korzysta z jednej magistrali ale wielu sygnałów wyboru rzędu układów, układu itp.
 Macierze komórek (wiersze, kolumny) – banki – grupy banków – aktywuj wiersz i kolumnę a
w kilku cyklach wartości zostaną zwrócone – układ scalony DRAM – rzędy Rank (niezależnie
adresowany) – moduł DIMM (1 lub 2 rzędy Rank) – kontroler/kanał pamięci (może być kilka
kanałów i kontrolerów pamięci)

1.5.3 Problem taktowania

 Bardzo duże taktowanie powoduje powstanie dużych sinusoid o długości okresu 30cm, co
powoduje problem przesunięcia ładunku w zależności od długości drutu, dlatego magistrale
są tak tworzone, żeby wszystkie druty miały taką samą długość
 Opóźnienie l – czas od wydania polecenia do jego wykonania
 Przepustowość t – liczba operacji wykonywanych w jednostce czasu

1.6 Prawo Little, Rodzaje pamięci

1.6.1 Prawo Little

 N = T*L przetwarzanie na raz wielu operacji (poziom równoległości) pozwala osiągać


maksymalną optymalizację dla określonego opóźnienia
 Dla przetwarzania potokowego
Oczywiście dla DDR procesor musiałby przetwarzać 25 transakcji po 8 słów 64 bitowych na
cykl

 Pogoń za wskaźnikiem – sposób odwoływania się do pamięci ma znaczenie dla danych


dużych większych niż megabajty, dla małych danych mechanizmy procesora przyspieszają
cały proces; zmniejszenie odległości między danymi przyspiesza proces odwoływania do
pamięci; układanie sąsiednich danych blisko siebie w kolejności odwoływania przyspiesza
proces
 Równoległość na poziomie instrukcji – procesor może wykonywać kilka kolejnych instrukcji
na raz
 Wykorzystanie wielu rdzeniu wbudowanych w procesor – 1 rdzeń nie potrafi wysycić
magistrali

1.6.2 Rodzaje pamięci

 NVRAM – pamięci nieulotne, RAM z baterią


 EPROM – kasowalne promieniem ultrafioletowym pamięci ROM
 EEPROM – EPROM kasowany elektrycznie, wolny zapis szybki odczyt
 Flash – EEPROM kasowany blokami

 Pamięci wieloportowe - Dwie magistrale danych na dane i adres pozwalają na równoczesny


zapis i dane; ewentualnie wewnętrzna magistrala działa szybciej niż zewnętrzna; ewentualnie
podzielona jest na różne bloki do których dostęp może być realizowany w tej samej chwili
 Pamięć skojarzeniowa - wybrane bity komórek są porównywane ze wzorcem podanym
przez procesor. Pamięć przeszukuje szybko oddzielnym układem wszystkie komórki i zwraca
odpowiednią komórkę
 DMA – układ który przesyła z albo do pamięci bloki danych; wbudowany obok procesora

1.7 Cache

 Na ogół programy korzystają z danych z niewielkiego obszaru, dane są blisko siebie w


komórkach pamięci; im bliżej siebie są dane tym większa szansa, że zostaną użyte;
 Lokalność przestrzenna – np. kody rozkazów, iteracja po tablicy – jest prawdopodobne
użycie rozkazów z sąsiednich lokacji pamięci
 Lokalność tymczasowa – pętle, stałe zmienne robocze – raz użyty kod może być zaraz użyty
ponownie
 Jest niewidoczna dla programisty, jej działanie widać w czasie działania programu; gdy można
nią zarządzać w kodzie to jest wtedy notatnikowa – jawnie pobrać i wysłać z/do notatnikowej
do RAM
 RAM jest duża i nieporęczna dlatego większość operacji wykonuje się z cache
 Bufor zapisów – lista ostatnich odwołań do pamięci
 Trafność pamięci cache

 Linie to bloki danych zawierające uporządkowany zbiór słów z kolejnych lokacji w pamięci,
same bloki są nieuporządkowane, ale w jednej linii dane są uporządkowane; identyfikatorem
słów jest jego adres w pamięci
Każda linia zawiera przestrzeń na dane z pamięci; status potrzebny do zarządzania (kilka
bitów); etykieta linii pozwalająca zidentyfikować do jakiego RAMu się odnosi (identyfikuje
fragment bloku RAM)
Dane powinny być tylko w jednej linii na raz na danym poziomie
Istnieje optymalna wielkość linii, która optymalizuje wykorzystanie linii, czas zastępowania
linii, historię pamięci (lokalność tymczasowa) – kilkadziesiąt bajtów; małe linie dobrze
zapewniają lokalność tymczasową; duże linie słabiej przechowują historię i dłużej się
wymieniają; na ogół optymalne są 64 bajty tak samo jak wyjście DDR
 Migotanie linii – odwoływanie się do danych, które były przed chwilą, ale zostały usunięte z
cache; należy je ponownie załadować do cache. Przy unieważnianiu linii na których był zapis
należy też zaktualizować ich odpowiedniki w RAM
 Całkowicie skojarzeniowe – wolne i kosztowne; linia może zawierać dowolny blok z RAM; dla
każdej linii trzeba sprawdzać czy zawiera szukaną daną – tyle układów porównujących ile linii;
najlepsze wykorzystanie linii ale najdłuższy czas wymieniania linii i najbardziej
skomplikowane przeszukiwanie RAM; nie występuje migotanie; zawsze wymienia się inną
linię niż ostatnia użyta

 Bezpośrednie z przeplotem – zoptymalizowane całkowicie skojarzeniowe; linie są podzielone


na grupy, które odpowiadają blokom w RAM i przyspieszają przeszukiwanie RAM; linia
odpowiada komórkom co którąś komórkę co zwiększa szansę na migotanie, ale wciąż jest
lepsze niż bez przeplotu; indeksy linii wybierają adresy odpowiadające określonym adresom
RAM

 Bezpośrednie bez przeplotu – grupy komórek odpowiadające linii są sąsiednie; częste

chybienia i migotanie
 Wielodrożna z przeplotem – wiele dróg z odwzorowaniem bezpośrednim
zawierają etykietę bloku; zbiór komórek z pamięci głównej pasuje do kilku linii; zazwyczaj 4

drogi
 Wielodrożne bez przeplotu – sąsiednie adresy pasują do jednej drogi

 Przyczyny wypełniania:
o Pierwsze odwołanie do pamięci, po włączeniu lub po załadowaniu ogromną ilością
danych
o Zapełnienie całej pamięci, trzeba coś usunąć żeby móc załadować nowe dane
o Konflikt w grupie/drodze cache, trzeba wymienić linie mimo iż inne linie z innych
grup są niewykorzystywane (tylko dla nie całkowicie skojarzeniowych)
o Spójność – inny rdzeń albo DMA zmienił komórkę w międzyczasie
 Redukcja chybień
o Optymalizacja rozmiaru linii
o Zwiększanie rozmiaru pamięci cache
o Lepszy efekt skojarzeniowości –
zwiększanie liczby dróg, algorytmy
usuwania linii
o Pamięci wilu poziomów
o Priorytet danych do odczytu – mogą być
częściej używane wielokrotnie; specjalne
dodatkowe instrukcje gwarantują
zakończenie wcześniejszych operacji na
pamięci
o Unikanie translacji adresu wirtuaonego
 Opóźnienia pamięci cache wielu poziomów

 Organizacje cache
o Organizacja hierarchiczna inkluzywna – w pamięciach niższego poziomu są te same
dane co w wyższych
o Organizacja równoległa nieinkluzywna – w każdym poziomie są inne dane, np. w
wyższym sa dane usunięte z niższego
 Sposoby zapisu wymuszające spójność; cel jest taki żeby jak najwięcej danych było
pobieranych i zapisywanych w pamięci cache
o Gdy dana jest w pamięci podręcznej:
 Zapis skrośny write through – zapis danych do linii poziomu oraz do
wszystkich wyższych poziomów od razu; możliwe jest zapisywanie do
wyższych tylko od określonego poziomu albo dla określonego poziomu
 Zapis lokalny copy-back – zapisujemy tylko do linii pamięci podręcznej a do
wyższych poziomów dopiero później (gdy linia jest zdejmowana)
o Gdy nie ma w pamięci podręcznej
 Allocate on write – przed zapisaniem danych wypełnia się linię pamięci
cache, po czym wykonywany jest zapis na RAM skrośny albo lokalny; dane
przesyła się wtedy dwukrotnie – przepustowość zapisu 2x wolniejsza
 No allocate on write – wykonuje tylko zapis na RAM, pomija cache; osobne
układy służą tylko do zapisu i do zachowania spójności
 Model Mesi/Moesi dla każdej linii sposób zachowania spójności danych; zmienia statusy
linii; na początku linia jest w stanie nieważnym I, jak procesor chybia podczas odczytu z linii
to w trypie skrośnym linia przechodzi do tryby współdzielonego S – wszystkie poziomy mają
te same dane w tej linii; odczyt danych nie wpływa na stan S, zapis w trybie skrośnym nie
zmienia stanu, bo zawsze w linii na każdych poziomie jest ta sama dana; unieważnienie linii
gdy inne urządzenie zapisuje coś do linii – stan I; stan E oznacza że linia zawiera właściwe
dane, ale pozostałe poziomy niekoniecznie – zapis w trybie lokalnym, odczytywanie ze stanu
E nie zmienia stanu, bo po prostu odczytywane są właściwe dane, zapisywanie zmienia stan
na zmodyfikowany M bo dane są lokalnie zmodyfikowane, ale na zewnątrz na innych
poziomach dane pozostają przestarzałe; gdy ktoś z zewnątrz potrzebuje tych danych trzeba
wstrzymać jego odczyt i przesłać najnowsze dane wyżej co zmienia stan na E; stany lokalne
wymagają uaktualniania wyższych poziomów; modyfikacja z zewnątrz zawsze unieważnia
linię – zachowanie to śledzi sterownik pamięci; zapisywanie stanu M wymaga wysyłania tej
linii na zewnątrz do wyższych poziomów przed unieważnieniem, żeby wszystkie bajty w linii
były najnowsze – zapobieganie false cache sharing – dwa procesy kłócą się o tę samą linię

 Strategia zapisu jednorazowego – pierwszy zapis jest skrośny a kolejne lokalnie – podobno
zwiększa szybkość
Będąc w trybie współdzielonym S pierwszy zapis jest wykonywany w trybie skrośnym i
zmienia stan na zgodny E, odczyt z tego stanu wymaga przesłania danych do wyższych
poziomów i powrotu do stanu współdzielonego, zapis w trybie zgodnym E daje stan M który
oznacza że linię trzeba wysłać wyżej w przypadku odczytu lub zapisu z zewnątrz; kolejne
zapisy w stanie E są wykonywane lokalnie a więc jak ktoś z zewnątrz potrzebuje odczytać
daną to trzeba ją wysłać do wyższych poziomów a więc przechodzi się do stanu S;

 Tryby pracy poziomów cache

 Schematy wymiany linii ze względu na użyteczność


o Losowy wybór – zaskakująco dobry efekt; oczywiście losowość oznacza pewną
sekwencję
o Kolejka FIFO – usuwana jest najdawniej alokowana, nawet jeśli cały czas się z niej
korzysta
o LRU (last recently used) – usuwana jest najdawniej użyta

 Schematy pobierania linii


o Prefetching automatycznie – odwołując się do jednej linii pobierane są też od razu
kolejne linie w pobliżu
o Implikowane – pobieranie następnej linii tylko gdy poprzednia była chybieniem
o Markowane – pobieramy kolejną linię w przypadku odwołania do linii ale na tym
stop i nie pobieramy na razie następnej – zmniejsza to ruch na magistrali
1.8 Przetwarzanie potokowe, Architektura ALU

1.8.1 Przetwarzanie potokowe

 Cykl rozkazowy – pobranie (wystawienie adresu instrukcji i pobranie jej); zdekodowanie


instrukcji; wytworzenie adresu docelowego; pobranie operandów (wystawienie adresu
argumentu i pobranie go); wykonanie; zapisanie wyników (wystawienie adresu i wysłanie
danych)

 Przetwarzanie potokowe polega na wykonywania różnych faz równolegle, układy faz są


rozdzielone od siebie i pozwalają na zapisanie wyników swojego etapu, żeby móc je
dostarczać poprzedniej instrukcji gdy same biorą się za kolejną; czasy wykonywania etapów
należy wyrównać do najdłuższego lub podzielić na więcej etapów
 Pobranie rozkazu – zależy od rozmiaru rozkazu i od wyrównania rozkazu (ilość cykli DDR lub
linii cache) łatwiejsze do zrealizowania w RISC
 Dekodowanie – zmienność długości rozkazu wydłuża dekodowanie, RISC znowu znacznie
przyspiesza
 Wytworzenie adresów – tryby adresowania
 Pobranie operandów – ilość i rozmiar operandów, zależy od czasu dostępu do pamięci, może
zwracać uwagę na wyrównanie operandów
 Wykonanie – zależy od złożoności działania oraz od dostępności argumentów
 Zapis – w zależności do adresu docelowego, do rejestru szybko, do pamięci ograniczone
przez trafienie cache
 RISC + architektura rejestrowa pozwalają drastycznie skrócić fazy
 Przetwarzanie super skalarne – jeden potok/faza może wykonywać kilka instrukcji na raz –
wiele jednostek wykonawczych
 Przetwarzanie superpotokowe – fazy są dzielone na mniejsze fazy żeby zwiększyć
częstotliwość wykonywania faz; zwiększa narzuty oraz traci więcej czasu gdy wystąpi
nieprzewidziany skok
 Do wykonania etapu potrzeba mieć wolną jednostkę wykonawczą oraz danych, które mogą
być dostępne dopiero po wykonaniu poprzedniego cyklu; główny układ kojarzenia zasobów
rozsył aktualne dane do odpowiednich faz
 Konflikty powody:
o Niedostępność operandów / konflikt danych – brakuje operandu
o Konflikt strukturalny / zasobu – brak dostępu do unikatowego zasobu
o Konflikt sterowania – nie wiemy jakie instrukcje są następne, występuje przy
skokach, skok jest wiadomy dopiero po zdekodowaniu, adres skoku jest pobierany
dopiero na etapie wytwarzania adresu, najgorzej w przypadku udanego skoku
warunkowego – adres jest wyznaczany po wykonaniu; najprostsza analiza – skok w
przód zakłada że nie zostanie wykonany, skok w tył zakłada że zostanie wykonany
 Dynamiczna prognoza rozgałęzień – jeśli skok był ostatnio wykonany to zakłada się że
zostanie wykonany ponownie; 4 stany rozróżniają że dwa kolejne skoki dopiero przewidują że
skok zostanie wykonany; jeśli nie ma informacji o historii skoków to prognozuje się go
statycznie i wkłada do buforu

 Bufor prognozy rozgałęzień – pamięć asocjacyjna, przechowuje adresy rozkazów skoku oraz
adresy docelowe, stany automatu prognozy, dodatkowe bity służące do wymiany linii; bufor
wkłada do Program countera następny rozkaz, adres docelowy z bufora lub z rozkazu (za
pierwszym razem); potem aktualizuje stan linii w zależności od jakości prognozy
 Optymalizowanie potoku – opóźnianie rozkazu za skok, żeby mieć pewność że potok będzie
działał, wyrównanie potoku NOPami; umieszczenie instrukcji wyznaczających wartości użyte
w skoku warunkowym kilka instrukcji przed skokiem żeby potok miał czas je wyliczyć

1.8.2 Architektura ALU

 Rejestrowa load store – ALU pobiera i zapisuje dane tylko i wyłącznie z rejestrów

 Akumulatorowa uogólniona – dane są pobierane z rejestru lub specjalnego bufora na dane z


pamięci, wynik może być rejestrze lub w pamięci – jest to dość wolne
 Akumulatorowa rozszerzona – na wejście może być tylko akumulator oraz bufor z pamięci lub
rejestr, wynik zawsze w akumulatorze

 Architektura stosowa – działania są wykonywane wyłącznie na stosie, wejście i wyjście

1.9 Procesor sekwencyjny

1.9.1 Procesor sekwencyjny

 Cała logika jest ukryta w automacie sterującym (sygnały zapisu i odczytu)

1.9.2 Procesor potokowy

 Elementy są oddzielone buforami, równoległe układy wykonują na raz jakąś instrukcję


 Konflikt danych – wynik trzeba zapisać do pamięci i dopiero w kolejnym cyklu może zostać
użyty w poprzednim potoku

 Żeby mieć pewność że procesor nie użyje starej wartości w nowym potoku, stare instrukcje
mogą być dopełniane NOPami
 By walczyć z read after write można też poprzestawiać instrukcje żeby wynik instrukcji nigdy
nie był używany zaraz po swoim wyliczeniu
 Read after write normlanie powoduje powstanie bąbla (procesor zatrzyma potok), który
propaguje się do końca wykonywania programu; by temu zapobiec można zastosować
techniki prorgamowe
 ALU może mieć za wejście bufor układu potoku innej fazy żeby przyspieszyć przetwarzanie
 Konflikty danych – dwuportowy dostęp do rejestru polega na przełączaniu wyjściowej
magistrali rejestru żeby umożliwić dostęp równoległy dostęp samego rejestru

 Konflikty strukturalne – osobne pamięci kodu i danych, rozdzielanie pamięci na bufory


buforów
1.9.3 Potok dynamiczny II rodzaju

 Przemianowanie rejestrów – czasami ten sam rejestr jest używany w wielu operacjach po
kolei, ale operacje te nie są zależne od swoich wyników, wtedy zamiast używać tego samego
rejestru (co spowalnia potok, bo trzeba czekać na zapis poprzedniej instrukcji) można użyć
dodatkowych ukrytych rejestrów do realizacji tych operacji; w sztuczny sposób rejestr jest
zwielokrotniony jeśli wynik nie będzie potrzebny w następnych instrukcjach
 Algorytm Tomasulo – stacja rezerwacyjna to zbiór rejestrów podłączonych na wejście ALU
(zbiór argumentów wejściowych), każde ALU może mieć wiele stacji, każda stacja
przechowuje jeden cały zestaw argumentów; mechanizm pozwala na zwiększenie
wykonywanych egzekucji poprzez posiadanie argumentów wejściowych w stacji przez co nie
musi czekać na wynik poprzedniego etapu; w rejestrze stacji bit zajętości mówi o tym że
instrukcja działa właśnie na danym rejestrze i zwróci jego wynik zaraz; jeśli instrukcja korzysta
z rejestru który jest w stacji, to nie musi go pobierać z potoku lecz szybciej pobierze go ze
stacji;
Do rejestru dołączony jest też tag (identyfikator), który mówi o tym z której stacji i z którego
ALU dana powinna zostać pobrana; następna instrukcja nie musi czekać na wykonanie
poprzedniej instrukcji, może zacząć się wykonywać pamiętając że czeka na dane które
zostaną wytworzone w stacji o numerze zdefiniowanym przez tag
Używana jest wspólna magistrala danych – gdy stacja oblicza wynik to wysyła go wszystkim
innym razem z numerem stacji która go wytworzyła; do samego rejestru wynik jest
kopiowany dopiero kończą się instrukcje które na nim działają
Pozwala na wykonywanie instrukcji kolejnych przed zakończeniem poprzedniej jeśli jest
długa, kolejność jest wymuszona przez zależności między rejestrami; rejestry nie są
zapisywane rzadziej niż na to wskazuje kod; zgłaszanie wyjątków jest wtedy nieprecyzyjne, bo
kilka instrukcji są wykonywane w różnych kolejnościach

1.9.4 Etapy potoku


 Frontend to wierzchnia część jednostki wykonawczej, która tłumaczy instrukcje na
mikroinstrukcje oraz rozsyła je do stacji albo bezpośrednio do układów wykonawczych,
wykonuje fetch i dispatch

 Backend za pomocą algorytmu Tomasulo wykonuje emisję do układów wykonawczych i


oddaje wyniki

1.10 Prawo Amdahla, Gustavvsona

1.10.1 Prawo Amdahla

 Nawet mając nieskończone zasoby nie da się przyspieszyć programu bardziej, niż to wynika z
części nieprzyspieszalnej; 1-p to część programu którego nie da się zrównoleglić; p to część
którą da się zrównoleglić
 1000 procesorów daje 17krotne przyspieszenie dla programu z p=5%
 Dla konkretnej instancji problemu gdzie część szeregowa p=1s, nie da się przyspieszyć
programu bardziej niż do 1s
 Mierzone jest silne skalowanie problemu dla ustalonej liczby procesorów i ustalonego
rozmiaru problemu

1.10.2 Prawo Gustavsona



czas wykonania na jednym procesorze część szeregowa+n∗część równoległa
Opóźnienie= =
czas wyknania na n procesorach część szeregowa+ część równoległa
 p oznacza część procesu równoległą po zrównolegleniu
 Wydajność skaluje się liniową względem liczby procesorów;
 Dla instancji problemu, gdy część równoległa p=coś_tam, zwiększanie liczby procesorów
powoduje liniowe przyspieszenie czasu wykonywania części równoległej
 Skalowanie słabe – mówi jak wzrasta przyspieszenie w porównaniu do jednego procesora gdy
dodajemy procesory; wykresy są prawie liniowe gdy część szeregowa jest niezależna od
rozmiaru problemu; zmienny rozmiar problemu przy stałym obciążeniu dla jednego
procesora

1.10.3 Cechy poprawnego programu

 Własność stopu – czy program na pewno się zatrzyma


 Własność częściowej poprawności – jeśli się zatrzyma to czy zwraca poprawne wyniki
 Błędy w instrukcji zapobiegają poprawności programu, na ogół zgłaszają wyjątki
 Można używać tylko dostępnej pamięci operacyjnej; dostęp poza zakres lub dostęp
niedostępny dla programu powoduje błąd
 Procesory mają instrukcje pozwalające zatrzymać i zresetować procesor, powinna być
wywołana w macrze w celu debuggowania programu gdy działamy poza systemem
operacyjnym

1.10.4 Proces

 Proces to działający program


 Procesy współbieżne oznaczają procesy których czas wykonania się nakłada ale nie są
równoległe
 Procesy współbieżne są poprawne gdy są żywotne – czyli gdy każdy stan zostanie poprawnie
wywołany (proces nie zawiśnie, nie umrze przed zakończeniem); żywotność oznacza też
realną szansę na wykonanie procesu
 Współczesne procesory działają w trybie z wywłaszczaniem. Każdy proces działa przez jakiś
czas (0,01s) po czym jest wywłaszczany
 Zagłodzenie oznacza że jakiś proces nie może uzyskać dostępu do zasobów (np. czasu
procesora); żeby walczyć z zagłodzeniem procesom można przypisywać kwanty czasu a
procesy są wykonywane w kolejce
 Bezpieczeństwo proces ma własną przestrzeń adresową dla operacji odczytu, zapisu,
wykonywania (prywatność); żeby procesy mogły współdziałać możliwa jest komunikacja
między procesami;
 Ochrona zasobów – kontekst procesora w momencie zatrzymywania procesu
(wywłaszczania) musi być taki sam jak w chwili gdy proces jest wznawiany; po wywłaszczeniu
zasoby mogą być oddane temu samemu procesowi bądź innemu
 Ochrona procesu
o Poziom uprzywilejowania – są rozróżniane sprzętowo, przechowywane w rejestrze
procesu; specjalne mechanizmy mogą pozwolić procesom z niskim
uprzywilejowaniem wykonanie instrukcji z wysokim uprzywilejowaniem (furtki –
gates – specjalne procedury wykonujące skok do uprzywilejowanego procesu); łatwo
zmniejszyć poziom uprzywilejowania ale bardzo ciężko go poszerzyć

o Przestrzenie adresowe – pewne rejestry i adresy pamięci są niedostępne dla procesu

1.10.5 Pamięć wirtualna

 Przestrzeń logiczna powiązana z identyfikatorem procesu nazywana jest przestrzenią


wirtualną; operuje się nią na poziomie zarządzania pulą procesów; przestrzeń wirtualna jest
większa od fizycznej – dużo procesów które zajmują dużo miejsca;
Pamięć główna jest podzielona umownie na fragmenty, do tych fragmentów ładowane są
aktualnie wykonywane procesy z pamięci wirtualnej; procesy mogą zgłosić wyjątek braku
strony gdy w pamięci głównej nie ma odpowiedniej strony, wtedy wyszukiwane jest miejsce
w pamięci głównej gdzie dany fragment może zostać przepisany; fragment pamięci wirtualnej
jest przepisywany w odpowiednie miejsce, informacje określające gdzie jakie dane są
przechowywane są aktualizowane; proces ten jest skomplikowany i czasochłonny
 Ochrona pamięci procesu
o Jednolite reguły dostępu – pamięć jednozakresowa - W małych i prostych systemach
można przydzielać procesom własną pamięć do której nie może dostać się żaden inny
proces; zapobiega to komunikacji między procesami
o Alternatywne prawa dostępu – pamięć dwuzakresowa – najszybciej komunikować
procesy przez pamięć, wydziela się ustalony obszar pamięci który jest obszarem
wspólnym kilku procesów i umożliwia ich komunikację
o Selektywne prawa dostępu – pamięć wielozakresowa – cała pamięć jest dzielona na
wiele małych obszarów (od kilku bajtów do GB), dla każdego fragmentu można
ustawiać niezależnie prawa odczytu/zapisy dla różnych procesów; każdy proces ma
prawa do kilku fragmentów
 Schemat życia procesu – proces jest tworzony po czym wchodzi w stan gotowości, wtedy
może być przełączony w stan egzekucji; po upływie przydzielonego czasu proces jest
zatrzymywany i przechodzi w stan gotowy, kolejka procesów określa kiedy proces jest
ponownie włączany; w stanie gotowości proces może wejść w stan oczekiwania gdy wymaga
dostępu do wolnego zasobu (terminal, czytanie z dysku), po zakończeniu działania zwalniane
są zasoby i przyjmuje stan zakończenia; proces rodzic odbiera stan procesu dziecka po czym
zakończa proces; gdy proces rodzic nie zrobi tego dobrze powstają procesy zombie
 Proces może też być przerwany przez zewnętrzne zdarzenia (ze stanu wykonywania do
gotowości); może też wystąpić wyjątek – jak proces radzi obsługuje wyjątek to proces jest
wznawiany a jak nie to proces jest zatrzymywany

 Aktualny stan procesu (rejestry, pamięć itp.) to kontekst procesu. Przy wywłaszczaniu
kontekst procesu musi zostać zapisany.
 Kontekst procesora – stan procesora - W procesorach Intela istnieje segment stanu zadania,
który przechowuje rejestry i różne identyfikatory i sprzętowo aktualizuje wznawiane procesy
 Kontekst pamięci – adresy i rozmiary bloków pamięci procesu, reguły dostępu;
przeładowywanie tego kontekstu jest długie bo zawiera wiele danych

1.10.6 Synchronizacja procesów

 Procesy należy synchronizować gdy procesy komunikują się i wykorzystują swoje dane oraz
gdy współzawodniczą o unikatowy zasób
 Sekcja krytyczna to fragment kodu który może być wykonywany tylko przez jeden proces.
Przed wejściem do niej proces musi zażądać dostępu do sekcji krytycznej i poczekać aż
procesor przydzieli mu ten zasób, gdy proces wychodzący zakończy sekcję krytyczną;
Tylko określona liczba procesów (na ogół 1) może mieć jednocześnie dostęp do sekcji
krytycznej
Trzeba też zagwarantować, że wszystkie procesy wejdą kiedyś do sekcji krytycznej i nie
zostaną zagłodzone
 Problemy współzawodnictwa
o Schemat blokady można rozwiązać przez modyfikację algorytmu tak żeby procesy
żądały danego zasobu w tej samej kolejności
o Instrukcje atomowe gwarantują że instrukcja wykona się w całości albo wcale; gdy
instrukcje nie są atomowe może wystąpić wyścig gdy procesy działają współbieżnie i
operują na tych samych danych; wyścig jest zależny od sprzętu (ilości wątków);
można zwiększyć prawdopodobieństwo wyścigu zatrzymując proces po odczytaniu
wartości ale przed jej aktualizacją, można też uruchomić podejrzany fragment kodu
wielokrotnie
 Wzajemne wykluczanie – uniemożliwia jednoczesny dostęp do dzielonego zasobu, blokuje
pozostałe procesy gdy jeden ma dostęp do sekcji krytycznej; nie broni przed blokadą, gdy
procesy blokują się wzajemnie ani przed zagłodzeniem gdy tylko procesów ma dostęp do
zasobu a pozostałe są zagładzane
 Mechanizmy sprzętowe synchronizacji procesów:
o Atomizowanie instrukcji – wszystkie podoperacje zostaną wykonane po sobie, można
osiągnąć przez dodanie prefiksu w as
o Zablokowanie przerwań w trakcie działania sekcji krytycznej, gdy przerwania
modyfikują dane wykorzystywane przez kod; przerwanie nie może czekać na
zwolnienie sekcji krytycznej żeby nie było ryzyka zatrzymania programu; można
ignorować przerwania lub zakolejkowanie ich; przeważnie wystarczy zmienić flagę
wykonywania przerwań; przerwania można blokować też w procedurze przerwania;
zmienna volatile może być modyfikowana przez wiele źródeł i nie może być
buforowana w rejestrze; kwalifikator restricted mówi że zmienna zajmuje osobny
obszar w pamięci i nie może być aktualizowana przez inne źródła
o Pamięć tymczasowa – prefiksy i odpowiednie instrukcje (Intel i AMD różne)
pozwalają oznaczyć rejestry i komórki pamięci przed sekcją krytyczną, jeśli w trakcie
sekcji krytycznej ktoś inny zmienił te dane to sekcja krytyczna zostanie wykonana
ponownie; wykonanie sekcji krytycznej jest spekulatywnie i zapisy są buforowane
 Mechanizmy programowe synchronizacji procesów:
o Kolejki procesów sekcji krytycznej – dostęp do sekcji zależny od kolejki zapobiega
wyścigom oraz zagłodzeniu (chyba że kolejka jest priorytetowa)
o Blokowanie dostępu do sekcji krytycznej i użycie semaforów, przed wejściem do
sekcji krytycznej proces jest uśpiony i nie zajmuje czasu procesora
o Monitory, muteksy, futeksy – wymagają sprzętowego wspomagania
o Skomplikowane algorytmy nie wymagające sprzętu np. Algorytm Dijkstry dla 2
procesów
o Funkcje usypiające proces wywłaszczają proces

1.11 Zarządzanie pamięcią

1.11.1 Segment

 Segment to ciągły blok pamięci, ma adres początkowy, rozmiar, prawa dostępu; w rejestrze
segmentowym przechowywany jest offset oraz selektor segmentu. Procesowi zawsze
przydzielana jest określona liczba segmentów
 Istnieje globalna tablica deskryptorów segmentów oraz lokalna dla każdego procesu. Istnieje
też tablica deskryptorów przerwań
 W trybie rzeczywistym każdy segment ma 16 bajtów i adres początkowy jest podzielny przez
16 bajtów, adres rzeczywisty oblicza się mnożąc rejestr segmentowy razy 16 + dowolne
przesunięcie; 1 rejestr adresuje 1 MB pamięci
 W trybie chronionym w rejestrze segmentu znajduje się selektor segmentu (selektor
segmentu odnosi się do globalnej tablicy selektorów, żeby znaleźć adres początkowy
segmentu) do znalezionego przez selektor adresu dodaje się offset (adres logiczny)

 Selektor segmentu zawiera indeks w tablicy globalnej, poziom uprzywilejowania


 Selektor wybiera deskryptor; deskryptor zawiera adres początkowy, rozmiar oraz kontrolne
bity segmentu (np.. czy segment jest w pamięci, poziom uprzywilejowania segmentu;
deskryptor jest zapisywany w tablicy buforów żeby nie znajdywać deskryptora za każdym
razem na nowo
 Adres liniowy jest tworzony jako suma adresu początkowego i logicznego, sprawdzane jest
czy adres nie wychodzi poza zakres oraz czy jest odpowiedni poziom uprzywilejowania
 Systemy operacyjne tworzą segmenty dla procesu, które mogą na siebie nachodzić

1.11.2 Stronicowanie

 Stronicowanie jest opcjonalnym procesem. Daje większą kontrolę i granulację. Nie można
odwoływać się do cudzych stron
 Strony dzielą pamięć procesu na strony o ustalonym rozmiarze (przez jądro, ale użytkownik
może zwiększyć rozmiar strony) i adresach początkowych podzielnych przez rozmiar; wymaga
to znacznie więcej struktur danych, ale pozwala na różne zarządzanie uprzywilejowaniem
 Segment wymaga ciągłego obszaru pamięci, strony mogą być wpisywane w dowolne miejsce
w pamięci
 Strony są zawartością ramek, struktury opisujące strony muszą przechowywać informację o
ramce i stronie
 Adres liniowy po segmentacji jest dzielony na offset, adres tablicy strony oraz adres zakresu
stron z katalogu stron

 Katalog stron zawiera informację o tablicy stron, tablica stron zawiera informację o stronie,
dodatkowe bity w tablicy stron zawierają informację o tym czy strona się zmieniła, czy strona
jest w pamięci głównej ( jak nie ma to trzeba zgłosić wyjątek i ją wymienić), bity sterowania
pamięcią podręczną
 W nowych procesorach może być obecne wiele tablic stron z których za każdym razem trzeba
sekwencyjnie odczytywać i interpretować zawartość. Żeby przyspieszyć ten proces
wprowadzono dodatkową pamięć podręczną stron – bufor TLB. Pamięć podręczna wyłącznie
na opisy stron, do adresu liniowego jest przypisywany adres strony który może zostać użyty
do wyznaczenia adresu fizycznego. Właściwe wykorzystanie TLB ma ogromny wpływ na czas
wykonywania programu
 TLB zawiera informację pozwalające przekodować adres liniowy na fizyczny, adres fizyczny to
adres początkowy ramki oraz przesunięcia na stronie
 Identyfikator procesu jest dedukowany z deskyptora segmentu i strony
 TLB jest przeładowywany po wywłaszczeniu procesu za wyjątkiem tych wpisów które mają
ustawioną flagę G – są to procesy współdzielone
 Wpisy w TLB można unieważnić jawnie z poziomem uprzywilejowania systemu
 Odpowiednie wpisy w tablicy stron pozwalają na zmapowanie różnych adresów logicznych na
te same adresy fizyczne co ułatwia współbieżność lecz daje ryzyko wyścigu

1.11.3 Odwrócona tablica stron

 Jedna struktura zapewnia mapę pamięci dla całej pamięci fizycznej. Przechowywane wpisy
zawierają informację o tym co jest aktualnie w pamięci fizycznej (ramki). Adres wirtualny ma
w tablicy funkcję skrótu, która pozwala identyfikować wpisy. Adres wirtualny jest
porównywany z wierszem do którego pasuje w celu znalezienia adresu ramki
 Zawiera informacje o stronach dla różnych procesów dlatego adres wirtualny musi zawierać
informację o procesie

1.11.4 Schematy zarządzania pamięcią

 Pobieranie na żądanie – stronę trzeba załadować gdy nie ma jej w pamięci głównej
 Strategia przydziału – gdzie wstawić daną stronę lub segment. Strony wstawia się w pierwszą
wolną ramkę. Pamięć jest odgórnie podzielona na ramki tych samych długości.
Segmenty mogą mieć różne rozmiary, usuwanie segmentów może powodować powstawanie
dziur
 Strategie wymiany – reguły wymieniania stron gdy cała pamięć jest zajęta. Można stosować
algorytm LRU. Wymiana to długie i kosztowne algorytmy gdyż wymaga odczytu z dysku
 Fragmentacja zewnętrzna – niewykorzystane obszary pamięci za małe do wstawienia
segmentu pojawiają się po usuwaniu segmentów. Niewykorzystane bloki są na zewnątrz
segmentów
 Fragmentacja wewnętrzna – strona jest zawsze przydzielana w całości, choć czasami proces
nie potrzebuje całej strony. Niewykorzystane bloki są wewnątrz strony, do 50% jest
niewykorzystane
 Fałszywe współdzielenie danych – gdy procesy są obok siebie w pamięci może się zdarzyć że
ich zmienne są w tej samej linii pamięci cache co prowadzi do migotania
 Model zbioru roboczego – zbiór roboczy to zapotrzebowanie procesu na pamięć w danym
momencie. Zbiór roboczy zmienia się i pomiędzy wywłaszczeniami proces może mieć
przydzielone różną ilość zasobów. Dobrze jest w kodzie w zakresie kodu nie odwoływać się
do dalekich miejsc w pamięci

Szamotanie występuje gdy nie ma przestrzeni fizycznej oraz gdy wymieniamy stronę, która
będzie zaraz potrzebna
 Przeszukiwanie pustych bloków między segmentami

1.11.5 Partycje

 Partycje to segmenty, którymi zarządza się programowo. Można je implementować na bear


metalu, ale łatwiej po prostu kupić więcej pamięci RAM.
 Anomalia Belady – liczba błędów braku stron zmniejsza się jak zwiększamy ilość ramek, ale
nie liniowo

1.12 Przerwania, wyjątki, komunikacja

1.12.1 Przerwanie

 Przerwanie to wydarzenie niezwiązane z procesorem, osobne urządzenia zgłaszają


przerwanie ustawiając odpowiedni sygnał
o Przerwanie precyzyjne – pozwalają całkowicie odtworzyć kontekst uruchomienia
o Nieprecyzyjne – bez możliwości odtworzenia stanu po zakończeniu obsługi
przerwania, np. reset.
 Wyjątek to zdarzenie wewnątrz procesora gdy jakaś instrukcja nie może zostać zrealizowana
 Obsługa polega na zawieszeniu aktualnego stanu programu, instrukcja może być najpierw
dokończona albo unieważniona; skok ze śladem do procedury przerwania; procedura
przerwania powinna zakończyć się szybko i poprawnie; powrót do miejsca sprzed przerwania
za pomocą specjalnej instrukcji IRET
 Priorytet obsługi – przerwania o najwyższym priorytecie często kończą proces lub resetują
procesor; priorytety służą optymalizacji przetwarzania danych od zewnętrznych urządzeń

 Można ignorować przerwania o niższym priorytecie niż aktualne; urządzenia mogą zachować
sygnał o przerwaniu by być obsłużonym później
 Wektor przerwania – każde przerwanie obsługuje się w inny sposób; wektor przerwania to
indeks procedury przerwania w tabeli deskryptorów przerwania, w których są informację o
tym gdzie jest kod obsługujący przerwanie; tablica wektorów jest umieszczana na początku
pamięci; źle obsłużone wyjątki resetują procesor
 Przerwania zewnętrzne są w Intelu obsługiwane przez zewnętrzny kontroler przerwań, który
priorytetyzuje i kolejkuje przerwania; kontroler ma z procesorem osobną magistralę;
wprowadza to opóźnienia
 Przerwania mogą być zgłaszane przez urządzenia I/O, dyski, układy do komunikacji (myszki,
klawiatury, monitory), czujniki, konwertery A/C C/A, sterowniki
 Wiele urządzeń może być podłączonych do jednego przerwania; identyfikacja przerwania
komplikuje i wydłuża obsługę

1.12.2 Urządzenia wejścia wyjścia


 Opóźnienia urządzeń zewnętrznych

 Sposoby operowania
o Ciągłe odpytywanie w pętli czy urządzenie ma coś do powiedzenia – bardzo
nieefektywne
o Uchwyty przerwań / obsługa w trybie przerwań – gdy urządzenie ma jakieś dane do
przesłania to zgłasza przerwanie, sterownik urządzenia odpowiada na przerwanie;
procesor musi mieć zapisane odpowiednie kody odpowiednich przerwań; w trakcie
oczekiwania na przerwanie procesor może być uśpiony
o Autonomiczne DMA – dodatkowe układy przesyłają dane pomiędzy urządzeniem a
pamięcią; po całym przesłaniu urządzenie zgłasza przerwanie
 Rodzaje pracy DMA
o Blokowy – jak dostanie magistralę to korzysta z niej do końca dopóki ma coś do
przesłania. Cały blok danych jest wysyłany za jednym razem
o Z wykradaniem taktów – procesor daje magistralę DMA jak akurat z niej nie korzysta.
Procesor ma bez przeszkód dostęp do magistrali
o Zgodnie z zapotrzebowaniem – DMA przekazuje tyle ile dostał w transmisji
wejściowej

1.13 Magistrale

 Magistrala zazwyczaj zawiera szynę danych, adresu oraz kontrolne sygnały; można przesyłać
wszystko równolegle lub szeregowo
 Im dłuższa magistrala tym trudniej uzyskać wysokie częstotliwości przez przesłuch i czas
propagacji
 Do jednej magistrali można podłączyć wiele urządzeń równocześnie, by zapobiec konfliktom
mogących uszkodzić magistralę (wspólna próba wysłania) stosowane są min. Bramki
trójstanowe, logika na kablu – wymuszanie stanu niskiego w bezpieczny sposób; używanie
multiplekserów
 Magistrale niemltipleksowane – osobne linie na adres, dane i kontrolę
 Magistrale multileksowane – na tych samych liniach są przesyłane dane i adresy w osobnym
czasie
 Etapu używania magistrali
 Arbitraż – przydzielanie dostępu do magistrali odpowiednim urządzeniom, może być
zarządzane przez nadrzędny układ lub protokół; najprostszy sposób to przydzielanie
odpowiednich kwantów czasu dla każdego urządzenia – spowalnia to znacznie
przepustowość
Lepszym sposobem jest przydzielanie w zależności od potrzeb, urządzenia i zdarzenia są
odpowiednio priorytetowane, ale odpowiednio kolejkowane żeby każde urządzenie miało
dostęp; algorytmy te są realizowane sprzętowo
 Magistrala musi jawnie wybrać urządzenie źródłowe i docelowe (adresowanie),
identyfikatory mogą być przypisywane przez system przy włączaniu urządzenia
 Przyczyny błędów – mogą to być błędy zewnętrzne mechaniczne
 Magistrala może być oddawana gdy urządzenie zakończy transmisję, inne urządzenie o
wyższym priorytecie zarząda magistrali, arbiter magistrali zakończy transmisję

1.13.1 Protokoły dostępu do magistral

 W magistralach synchronicznych jest sygnał zegarowy, który identyfikuje momentu w których


sygnał jest właściwy, gdy czas transakcji jest zmienny to transmisja jest półsynchrniczna
 W magistralach asynchronicznych należy wykryć początek transmisji poprzez dodatkowe
sygnały wystawiania sygnału i odebrania sygnału

 Sposoby przesyłania na magistralach asynchronicznych


o Przesłanie niepowiązane – urządzenie wystawia dane, potem sygnał gotowości,
odbiornik pobiera po czym wystawia sygnał gotowości; sygnał jest zdejmowany
Problem może wystąpić gdy odbiornik wyśle sygnał zakończenia odbierania zanim
zakończy się sygnał gotowości nadajnika, stany linii mogą być niespójne

o Częściowo powiązane – po wystawieniu przez odbiornik sygnału odebrania, nadajnik


najpierw zdejmuje sygnał gotowości nadawania a później zdejmuje dane
Kolejny transfer może zacząć się w trakcie trwania poprzedniego sygnału odebrania

o Przesłanie z potwierdzeniem – najpierw nadajnik wystawia dane po czym wystawia


sygnał gotowości, odbiornik odbiera dane i wystawia sygnał zakończenia odbioru w
odpowiedzi na zakończenie sygnału gotowości nadajnika

o Z potwierdzeniem dla wielu urządzeń


 Problemy arbitrażu

 Błędy pojawiają się przez uszkodzenie lub przez chwilowe zmiany w otoczeniu, błąd w
protokole magistrali; transmisję z błędem można unieważnić lub poprawić

1.14 Niezawodność

1.14.1 Pojęcia

 Poufność security – zapewnienie tajemnicy informacji, nikt niepowołany nie może dostać się
ani odczytać danych
 Bezpieczeństwo safety – zapewnienie odporności na zagrożenia
 Spolegliwość rzetelność dependability – zapewnienie poprawnego wykonania zadania
 Gotowość availability – dostępność do środków które są w stanie dobrze wykonać zadanie
 Niezawodność reliability – zapewnienie satysfakcjonującej obsługi błędów, zmniejszanie
szansy na wystąpienie uszkodzenia, takich jak uszkodzenia fizyczna, promieniowanie
kosmiczne itp., ale też błędy użytkownika np. błędny adres

1.14.2 Techniki niezawodności

 Techniki nadmiarowe:
o Nadmiar informacji – pozwalających sprawdzić poprawność danych
o Nadmiar czasu – zapas czasu potrzebny do wykonania czynności kontrolnych
o Nadmiar sprzętu – dodatkowe urządzenia do równoległego wykonywania tych
samych obliczeń czy sprawdzania poprawności
o Na ogół wszystkie techniki łączą się
o Przykładem jest bit parzystości
 Celem jest zapobieganie błędom oraz radzenie sobie z błędami gdy zostaną wykryte
 Ryzyko powstania błędów zmniejsza się tworząc lepsze systemy
 Kontynuowanie pomimo błędów np. rezerwa zimna lub gorąca
 Można też szybko wykryć i poprawić dane

1.14.3 Kody

 Błędy można wykryć (kody detekcyjne – nity parzystości, CRC) albo korygować (kody
Hamminga, BCH, Reeda Solomona)
 Po zidentyfikowaniu błędu można poprosić o powtórzenie transmisji
 Każda pamięć masowa stosuje kody korekcyjne
 Odległość Hamminga – liczba pozycji na których różnią się dwa słowa
 Kody blokowe – dzielimy informację na bloki i do każdego bloku dodawane są odpowiednie
informacje, bloki są niezależne od siebie
 Kody splotowe – nieustannie przetwarzają szeregowo podawany strumień informacji na inny
strumień informacji
 Syndrom błędu – wyliczony element liczba określająca czy błąd wystąpił oraz jaki błąd
wystąpił; zapewnia że po wykryciu danych można łatwo zidentyfikować błąd i poprawić go
 Ograniczenie Hamminga – żeby można było poprawić t błędów w n-bitowym słowie, to słów
kodowych powinno być tyle ile możliwych słów może zostać wysłanych (każda ilość błędów
to inne słowo)
 Zasada maksymalnej wiarygodności – zakładamy że w danym modelu błędów częściej
występują jedne rodzaje błędów niż inne np. częściej przekłamany jest 1 bit niż 2 bity
 Kody liniowe – słowa kodowe są kombinacjami liniowymi innych słów kodowych
 Kody cykliczne – powstają w wyniku cyklicznych przesunięć słów kodowych według jakiejś
ustalonej zasady z użyciem rejestru przesuwnego
Przykładem jest kod CRC (detekcyjny) – dla słowa obliczana jest reszta z dzielenia przez inny
wielomian – suma kontrolna; szybkie metody obliczania sum zmniejszają narzut czasowy
 Intel posiada specjalne instrukcje przyspieszające liczenie sum kontrolnych

1.14.4 Techniki detekcji błędów na dysku

 Średni czas pomiędzy błędami MTBF – dla urządzenia stabilnego parametr ten określa ile
średnio należy czekać na jeden błąd, jest niezależny od czasu działania; czas MTTF to czas do
wystąpienia błędu nienaprawialnego; z puli urządzeń wystąpienie uszkodzenia ma rozkład
wykładniczy lub Weibula; średni czas do uszkodzenia to MTBF, ale 1/3 uszkodzeń występuje
znacznie wcześniej; AFR to MTBF w skali roku czyli szansa na zepsucie się w ciągu roku
 Błędy najczęściej występują na początku działania i po dłuższym działaniu

 W rzeczywistości stopa błędu to 1/10^13 czyli co 1/10^13 bitów jest przekłamany, ale dysk
nadal działa poprawnie, można sobie z tym radzić rozpraszając dane
 RAID 0 – macierzowanie 0 – rozpraszanie informacji pomiędzy różne dyski lub różne sektory
dysku, zwiększa przepustowość gdyż kontroler zrównolegla operacje odczytu; gdy
którykolwiek z dysków ulegnie uszkodzeniu to cały blok danych ma błąd
 RAID 1 – macierzowanie 1 – Polega na podwajaniu danych na dyskach, gdy jeden się uszkodzi
to można odczytać z innego; zapis występuje na kilku dyskach równocześnie, odczyt
następuje z 1 lub wielu dysków
 RAID 3 – Połączenie raid 0 z dodatkowym dyskiem na dane korekcyjne – z wszystkich dysków
czyta się równocześnie a dodatkowe dane z dysku korekcyjnego mogą służyć do korygowania
danych; jest wolniejszy niż 1 dysk gdyż trzeba zawsze czytać z dysku na dane korekcyjne
 RAID 5 – Używa wielu dysków na których rozproszone są dane korekcyjne, większość operacji
można więc zrównoleglić, gdyż dane korekcyjne na pewno są na innym dysku niż dane; na
podstawie sumy i kilku bloków danych można odtworzyć błędne dane; w przypadku awarii
macierz może być nieodtwarzalna
 RAID 6 – działa jak Raid 5 ale sumy kontrolne są podwojone co ułatwia odtwarzanie danych z
poprawnych danych
 Sumy kontrolne mogą być wynikiem operacji XOR, co od razu pozwala na korekcję, to który
bit jest uszkodzony wynika w trakcie odczytu
 RAID 1.0 – 4 dyski wewnętrzne są dzielone na pół i przechowują zdublowane dane do których
dostęp jest przez dyski logiczne zewnętrzne za pomocą RAID 1
 RADI 5.0 – powielanie danych do których dostęp jest za pomocą RAID 5

1.15 Koncepcje przetwarzania

1.15.1 Koncepcja równoległego przetwarzania

 Bardzo długie słowa kodowe, które pozwalają w 1 instrukcji zaprząc do pracy jak najwięcej
jednostek wykonawczych; na etapie kompilacji kilka kolejnych operacji koduje się wspólnie
 Przetwarzanie superskalarne
 Przetwarzanie data flow
 Wiele procesorów

1.15.2 Rozwój technologii

 Liczba tranzystorów rośnie wykładniczo, pobierana moc i częstotliwość stoi w miejscu;


aktualny kierunek rozwoju zwiększa liczbę rdzeni
 Do przełączania stanu jest potrzebna minimalna energia, co ogranicza zmniejszanie
tranzystorów
 Nie można umieszczać układów zbyt blisko siebie gdyż mogą ulec przegrzaniu

1.15.3 Taksonomia – klasa przetwarzania

 SISD – jedna instrucja jeden strumień danych


 SIMD – wiele danych jedna instrukcja; SSE AVX
 MISD – jedna dana idzie do wielu jednostek wykonawczych, które mogą razem wykonać
działanie a później porównać wynik
 MIMD – wiele danych i wiele jednostek wykonawczych; niezależne dane i instrukcje; różne
wątki są przetwarzane na raz; zrównoleglanie procesu poprzez wieloprocesory i pamięć
współdzieloną
 Wszystkie procesory muszą dzielić pamięć główną, procesory mogą mieć własne pamięci,
które mogą się z sobą komunikować

 Przetwarzanie wektorowe – to np. przetwarzanie potokowe, zrównoleglanie jednostek


wykonawczych (data-flow)

 Przetwarzanie wątkowe – przełącza się wątki co jakąś liczbę operacji gdy wątek i tak musi
czekać na jakieś dane; podobne operacje wykonuje wiele wątków na raz, wątki są grupowane
w sploty wątków, grupowane w bloki, grupowane w siatki
 Drobnoziarnista równoległość na poziomie instrukcji
 Gruboziarnista równoległość na poziomie wątków
 Symetryczna wieloprocesorowość SMP – wiele procesorów jest podłączone do pamięci
głównej, dlatego jeden rdzeń nie jest w stanie wykorzystać całą przepustowość pamięci
 NUMA niejednorodny dostęp do pamięci – każdy procesor ma swoją pamięć fizyczną, ale
wspólną pamięć wirtualną, komunikacja jest kosztowna i wymaga dodatkowych operacji;
żeby przyspieszyć wywłaszczanie procesy są przypisywane do jednego procesora

You might also like