<h1>
PTM KOLOS
</h1>
```
Opracowanie kluczowych zagadnień ~keks
```
<h2>
1.Klasyfikacja komputerów
</h2>
* **SISD** - Single Instruction Single Data - przetwarzany jest jeden strumień danych przez jeden wykonywany program - komputery skalarne (sekwencyjne).
* **SIMD** - Single Instruction Multiple Data - przetwarzanych jest wiele strumieni danych przez jeden wykonywany program - tzw. komputery wektorowe.
* **MISD** - Multiple Instruction Single Data - wiele równolegle wykonywanych programów przetwarza jednocześnie jeden wspólny strumień danych. W zasadzie jedynym zastosowaniem są systemy wykorzystujące **redundancję** (wielokrotne wykonywanie tych samych obliczeń) do minimalizacji błędów.
* **MIMD** - Multiple Instruction Multiple Data - równolegle wykonywanych jest wiele programów, z których każdy przetwarza własne strumienie danych – przykładem mogą być komputery wieloprocesorowe, a także klastry i gridy.
<h2>
2.Elementy składowe - po co jest procesor, dma, pamięc, układy we-wy
</h2>
* **Jednostka centralna (ALU)** - procesor to jednostki arytmetyczno-logiczne, sterują reprezentacją danych. Posiadają rejestry ogólnego przeznaczenia oraz rejestry specjalne jak np. licznik rozkazów, wskaźnik stosu czy rejestr flag. Ma zintegrowany system przerwań, oferuje pracę wielozadaniową. Możliwa jest do wyboru jedna z dwóch organizacji listy rozkazów - RISC i CISC
* **Zegar** - nadaje jeden rytm pracy dla całej jednostki.
* **Wbudowana pamięć ROM** - tylko do odczytu; przechowuje kod programów.
* **Wbudowana pamięć RAM** - wykorzystywana przez programy.
* **Układy czasowo-licznikowe** - odmierzanie czasu.
* **System przerwań** - pozwala na odbieranie zdarzeń z urządzeń zewnętrznych.
* **Szeregowe I/O** - komunikacja ze światem zewnętrznym.
* **I/O** - komunikacja równoległa z urządzeniami zewnętrznymi.
* **DMA** - Direct memory access - technika, w której sprzęt komputerowy podłączony do płyty głównej może korzystać z pamięci operacyjnej RAM lub portów we-wy, pomijając przy tym CPU. Wymaga to niewielkiej współpracy ze strony procesora.
<h2>
3.Magistrale
</h2>
* Magistrale danych - odpowiedzialna za transmisję właściwych danych
* Magistrale adresowe odwoływanie się do odpowiednich komórek
* Magistrale sterujące (nadzór nad poprawnością przesyłania informacji), read, write, byte enable
<h2>
4.Elementy procesora - rejestry i ALU
</h2>
### rejestry
w których przechowuje się liczby na czas wykonywania operacji oraz wyniki obliczeń
* **Rejestry ogólnego przeznaczenia** – pamiętają dane i adresy potrzebne w trakcie działania programu. Im więcej rejestrów w procesorze, tym szybsza jego praca. Ich długość odpowiada długości słowa procesora.
* **Rejestry specjalne** – mają przypisane odpowiednie zadania, np. rejestry flagowe, licznik rozkazów PC (czuwa nad poprawnością realizacji zadania wykonywanego w danej chwili przez procesor), rejestr instrukcji IR (dekoduje rozkazy, na które wskazuje PC), wskaźnik stosu SP (stos to fragment pamięci operacyjnej, na który
* **flagowe** - niesie informacje o tym, z jakim skutkiem została wykonana poprzednia operacja - zero, 0verflow, przeniesienie itp, opisujący i kontrolujący jego stan. Zawartość tego rejestru może zależeć od ostatnio wykonanej operacji (zmiana pośrednia), bądź trybu pracy procesora, który można ustawiać.
* **statusowe**
### ALU
wykonuje operacje arytmetyczne (dodawanie, odejmowanie, mnożenie, dzielenie) oraz logiczne na liczbach pobieranych z pamięci operacyjnej.
Podstawowymi elementami arytmometru są:
* Sumator, który wykonuje operację dodawania oraz pozostałe operacje arytmetyczne przez sprowadzanie ich do dodawań i prostych operacji pomocniczych, takich jak przesunięcie liczby, przekształcenie z systemu zwykłego w system negacji lub uzupełnień;
* Rejestry, w których przechowuje się liczby na czas wykonywania operacji oraz wyniki obliczeń;
* Układ sterowania , który kieruje pracą sumatora i rejestrów, wymianą danych między rejestrami i innymi elementami procesora.
Arytmometr bezpośrednio współpracuje z rejestrem flagowym i statusowym.
### magistrale wewnętrzne
<h2>
5.Architektura 8051
</h2>
* Jednostka centralna w konwencji CISC; 111 rozkazów; 1-2 cykle dla prostych operacji; 4 cykle dla mnożenia i dzielenia.
* Rezonator kwarcowy 12 MHz.
* Opcjonalna pamięć ROM.
* Wbudowana pamięć RAM od 128.
* Dwa 16 bitowe liczniki.
* 2 poziomowy system przerwań.
* Brak DMA.
<h2>
6.Fazy przetwarzania rozkazu
</h2>
Pobranie rozkazu. **pamięć**
Dekodowanie rozkazu
Wyznaczenie adresu. **pamięć**
Załadowanie argumentów. **pamięć**
Wykonanie rozkazu.
Zapisanie wyników w pamięci. **pamięć**
<h2>
7.Tryby adresowania
</h2>
* Rejestrowy bezpośredni - rejestr zawiera wartość.
* Rejestrowy pośredni - rejestr zawiera adres do pamięci.
* Bezpośredni - adres po rozkazie wskazuje na argumenty.
* Natychmiastowy - Argumenty zostają załadowane razem z rozkazem - S3, S4 nie istnieje, czasem i S6 brak
* Bazowo-indeksowy - może sumować adresy; powolny.
<h2>
8.Przetwarzania potokowe
</h2>
przetworzenie każdego rozkazu dzieli się na kilka etapów, realizowanych przez kilka różnych układów. To trochę jak przekazywanie worka z piachem w szeregu ludzi. Można czekać, aż jeden worek przejdzie przez cały łańcuszek i rozkaz się skończy, albo można przekazywać worek za workiem, żeby każdy miał ciągle coś do roboty.
Jakie z tym problemy? Za każdym razem, gdy w programie jest if, program się rozgałęzia i część pracy musi zostać cofnięta. Są na to 3 sposoby:
* Występuje tu założenie, że program jest wykonywany liniowo (przynajmniej odcinkami), a w rzeczywistości korzystamy też z rozkazów, powodujących skoki do innego miejsca w programie (skoki bezwarunkowe, skoki warunkowe, wywołania funkcji)
* Przy skoku bezwarunkowym: w etapie drugim przy dekodowaniu procesor dowiaduje się, że będzie rozkaz skoku, a etapie trzecim dowiaduje się o nowym miejscu wykonania rozkazu
* Przy skoku warunkowym o tym czy trzeba wykonać skok czy nie procesor dowiaduje się w kroku piąty
#### Radzenie sobie ze skokami
* Przeczekać – opóźnienie 3 jednostki dla skoku bezwarunkowego, 5 dla warunkowego
* Nie martwić się – procesor ciągnie kolejne rozkazy, nie zwracając uwagi na skoki (w większości przypadków rozkaz skoku się nie wykonuje)
* Być czujnym – rozwiązanie drogie, bo wymaga specjalnej konstrukcji procesora. Gdy procesor w kroku drugim dowiaduje się, że będzie skok, wykonuje jednocześnie algorytm potokowy oraz pobiera i buforuje rozkazy z miejsca, gdzie może być skok. Jeśli się okaże, że skok się wykonał procesor dekoduje rozkazy już pobrane
<h2>
9. Stos
</h2>
* Stos to obszar w pamięci wydzielony dla danego wątku, służący do przechowywania adresów powrotu i zmiennych lokalnych. Okna rejestrowe są używane do wspierania wywołań procedur w taki sposób, aby były one widziane jako cache w zawartości stosu.
* Struktura LIFO - Last In First Out.
* Adres szczytu przechowywany w rejestrze SP.
<h2>
10.Sekwencja przerwań
</h2>
<h3>
Sekwencja - wersja krótsza
</h3>
W momencie, gdy procesor przyjmie zgłoszenie przerwania, wykonywane są następujące działania:
1. Identyfikacja linii urządzenia wysyłającego przerwanie – ze względu na różne priorytety przerwań (arbitraż programowy, arbitraż sprzętowy tj. równoległy, szeregowy bądź mieszany).
2. Zapamiętanie stanu systemu – rejestry specjalne i ogólne zapamiętywane są albo na stosie (przełączenie danych) albo w innym banku pamięci (przełączenie kontekstu) w sposób automatyczny.
3. Wykonanie procedury obsługi z adresu uzyskanego podczas identyfikacji źródła
<h3>
Sekwencja - wersja rozbudowana
</h3>
1. Procesor sprawdza stabilność systemu po wykonaniu każdego rozkazu. Przerwanie zgłaszane jest przez urządzenie. Procesory mają odpowiednie linie do zgłaszania przerwań, a także uszkodzenia zgłaszane są w poszczególnych rejestrach. Jeśli nie ma zgłoszeń przerwania, procesor wykonuje następny rozkaz.
2. Jeśli przerwanie zostało zgłoszone, procesor przerywa zadania, które wykonywał i zajmuje się jego obsługą. Na czas obsługi przerwania wyłączany jest system przerwań (opcjonalnie).
3. Zachowanie stanu procesora (zapamiętanie tego, co działo się przed podjęciem obsługi przerwania) może być realizowane jako:
* a. **Przełączenie danych** – istotne dane odkładane będą na stos (zawartości rejestrów, PC), ewentualnie w jakimś fragmencie pamięci
* b. **Przełączanie kontekstu** – jeśli procesor jest zaopatrzony w wolne rejestry do potrzeb obsługi przerwania, korzysta się z nich, nie naruszając zawartości rejestrów z wykonywanym programem Zachowanie stanu może być realizowane automatycznie (procesor zapamiętuje wykonywane operacje) albo programowo (programista opracowuje program tak, aby wymusić na procesorze wykonanie pewnych instrukcji). Automatycznie zapamiętywany jest licznik rozkazów i rejestry specjalne.
5. Identyfikacja przerwania + arbitraż przerwań
Do procesora dostarczany jest numer przerwania magistralą danych. Alternatywnie może być przesłany adres procedury przerwania. Kiedy do procesora dostarczonych zostaje wiele numerów przerwań, dokonywany jest arbitraż przerwań.
Sprzętowy arbitraż przerwań dzieli się na trzy typy:
* a. Równoległy – wszystkie urządzenia przypięte są do dekodera przerwań, który zbiera informację typu IntReq. Generuje on sygnał trafiający do procesora, który linie InterAck kieruje do dekodera. Dekoder ustala, od którego urządzenia przerwania podane będzie do procesora. Numeracja poszczególnych wejść decyduje o priorytecie (0 – najwyższy, n – najniższy).
* b. Szeregowy – nie ma tu dekodera przerwań, poszczególne linie przypięte są do procesora. Procesor wysyła sygnał IntAck do pierwszego urządzenia, ono sprawdza czy zgłosiło przerwanie. Jeśli tak, podaje swój numer przerwania, jeśli nie – przekazuje sygnał do następnego urządzenia.
* c. Równoległo-szeregowy – do procesora szeregowego podłączonych jest wiele dekoderów przerwań, do których przyłączone są urządzenia
5. Skok do procedury obsługi przerwania – procesor realizuje procedury obsługi przerwania
6. Powrót z obsługi przerwania – następuje odtworzenie stanu procesora oraz włączenie systemu przerwań
<h2>
11. System przerwań 8051
</h2>
Układ 8051 obsługuje 6 przerwań o 2 priorytetach.
Priorytety wysokie i niskie; w momencie otrzymania dwóch przerwań wykonywany jest ten z wyższym priorytetem.
Rodzaje przerwań:
Kolejność Żródło
obsługi
0 External 0
1 Timer 0
2 External 1
3 Timer 1
4 Serial
5 Timer 2
czyli:
* Urządzenie zewnętrzne na linii INT0 – znacznik IE0
* Urządzenie zewnętrzne na linii INT1
* Trzy układy czasowo-licznikowe – przepełnienie licznika T0, T1 lub T2 (znaczniki TF0, TF1 i TF2)
* Jedno przerwanie od portu szeregowego – koniec nadawania znaku TI lub koniec odbierania RI
Maskowanie przerwań Przerwania mogą być wyłączone. **W 8051 każde z przerwań może być maskowane i odbywa się to w rejestrze IE. Najstarszy bit – wszystko włączone (1) lub wszystko wyłączone (0), kolejne bity odpowiadają konkretnym przerwaniom.**
Rejestr, który przechowuje informacje o zgłoszonych przerwaniach to **TCON** – każdy bit odpowiada jakiemuś przerwaniu.
## Ustalenie priorytetu przerwania
Ustalenie priorytetu przerwania w 8051 następuje etapowo. W pierwszym stanie procesor patrzy na to, co definiuje użytkownik posługując się odpowiednim rejestrem (IP) – poszczególne bity odpowiadają różnym przerwaniom, użytkownik może ustawiać te bity, ustalając w ten sposób priorytety przerwań. Mamy tu do czynienia z dwoma priorytetami: niższy (0) i wyższy (1).
Jeśli zostaną zgłoszone dwa przerwania, najpierw zostanie obsłużone to o wyższym priorytecie. Jeśli w trakcie obsługi przerwania o niższym priorytecie zostanie zgłoszone przerwanie o wyższym priorytecie, to dotychczasowa obsługa zostanie wstrzymana, aby zająć się tym, co ważniejsze. Jeśli w trakcie obsługi przerwania o wyższym priorytecie zostanie zgłoszone przerwanie o niższym priorytecie, to musi ono poczekać aż procesor skończy obsługiwać to ważniejsze. Jeśli w tym samym czasie przyjdą przerwania o tym samym priorytecie, to o kolejności obsługi decyduje procesor (posiada zdefiniowaną listę kolejności)
Są także momenty działania procesora, kiedy nie będzie obsługiwał przerwań. Dzieje się tak podczas zmian zawartości rejestrów IE i IP (maska przerwań i zmiany priorytetów). Po wykonaniu rozkazu powrotu z procedury rozpatrywania przerwań procesor odtwarza swój stan zachowany przed wykonaniem procedury i wraca do normalnego programu.
<h2>
12. DMA
</h2>
Układ ten służy odciążeniu procesora podczas obsługi układów wejścia/wyjścia. Jego zadaniem jest komunikacja pomiędzy pamięcią a układami we/wy. Pobiera informację od układów wejściowych i kieruje ją do pamięci lub pobiera informację z pamięci i kieruje ją do układu wyjścia.
W bardziej zaawansowanych układach potrafi zapisać fragment pamięci. Układ ten potrzebuje dostępu do magistral (na takim samym poziomie co procesor).
### Tryby
Z punktu widzenia zarządzania magistralami wyróżnia się dwa podstawowe tryby pracy układów DMA:
* **Tryb blokowy** – układ DMA po przejęciu magistrali od procesora prowadzi transmisję, którą ma wykonać od początku do końca. Układ DMA upora się ze swoimi działaniami tak szybko jak to możliwe. Jest to cenne, gdy układ wejściowy przesyła duże informacje, które szybko trzeba odebrać (np. skaner). Procesor w tym czasie nie ma logicznego dostępu do magistral. Nie jest w stanie pobrać rozkazów, nie jest w stanie praktycznie prowadzić działalności.
* **Tryb z wykradaniem taktów** – nadrzędnym elementem jest tu procesor, który udostępnia układowi DMA magistralę wtedy, kiedy nie jest potrzebna do jego pracy. Dane przekazywane są pakietowo, procesor pracuje bez zakłóceń.
Przed wykonaniem działań układ DMA musi zostać zaprogramowany przez procesor. Zapisuje on kilka rejestrów DMA:
* Rejestr adresowy – procesor zapisuje początek obszaru pamięci, który ma być eksploatowany przez DMA. Gdy przenoszone są dane z pamięci do pamięci potrzebne są dwa rejestry adresowe.
* Rejestr licznika – ilość słów, które DMA ma przesłać
* Rejestr sterujący – definiowane są parametry transmisji (tryb, odczyt/zapis, kierunek transmisji itp.)
* Rejestr statusowy – układ DMA podczas wykonywania operacji zapisuje to co robi. Jest to przydatne w trybie z wykradaniem taktów, gdy procesor sprawdza na jakim etapie jest praca układu DMA
Rejestry te są różnych długości, są dopasowane do systemu, w którym układ DMA funkcjonuje. Układ ten jest programowany do bieżąco wykonywanych zadań.
<h2>
13.Pamięć
</h2>
Zadaniem pamięci jest gromadzenie programów lub zadań.
Podstawowe parametry charakteryzujące pamięć to:
* **Pojemność** – ilość informacji cyfrowej, jaka może być w pamięci zgromadzona. Jednostką pojemności jest bit (bajt)
* **Długość (szerokość) pamiętanego słowa** – ilość bitów, które mogą być obsłużone podczas wykonywania jednej operacji (zapis/odczyt)
* **Czas dostępu** – czas upływający od momentu rozpoczęcia wykonywania operacji związanej z działaniem pamięci do momentu zakończenia operacji (najczęściej odczyt z pamięci danych i doprowadzenie ich na magistralę)
Linie RAS i CAS pozwalają odpowiednio na wybór wiersza i kolumny pamięci (row address select i collumn address select).
<h3>
Klasyfikacja pamięci
</h3>
* **ROM** – pamięć tylko do odczytu
* **RAM** – pamięć o dostępie swobodnym
#### Pamięć ROM dzielimy na:
* **ROM** – pamięć tylko do odczytu (informacje o produkcji). Pamięci te potrzebne są tam, gdzie dostęp do systemu potrzebny jest natychmiastowy. Mają krótkie czasy dostępu i umiarkowane pojemności
* **PROM** – programowalna pamięć ROM. Początkowo jest ona czysta. Po zapisaniu na niej danych (jednorazowo) działa jak MASK ROM. Są to układy bardzo szybkie o niewielkich pojemnościach. Wykorzystuje się je to kodowania i transkodowania informacji
* **EPROM** – kasowalna, programowalna pamięć ROM. Programowanie odbywa się na drodze elektrycznej. Kasowanie odbywa się poprzez naświetlanie układu promieniami UV. Przeprogramowanie układu zależy od producenta (zazwyczaj kilkaset/ kilka tysięcy razy). Mogą być układami o dużych pojemnościach, ale nie są zbyt szybkie
* **EEPROM** – elektrycznie kasowalny układ PROM. Układ podlega kasowaniu i programowaniu na drodze elektrycznej. Funkcjonalnie działa tak samo jak EPROM. Charakteryzuje się dużymi pojemnościami i dużym czasem dostępu
* **EAPROM** – wybiórczo można kasować i programować pewne fragmenty pamięci
#### Pamięć RAM dzielimy na:
* **DRAM** (dynamiczna), gdzie elementami pamiętającymi informacje są okładki kondensatora. Wymagane jest tu odświeżanie informacji.
* **SRAM** (statyczna), gdzie elementem pamiętającym informacje jest przerzutnik. Wyłączenie zasilania powoduje tu utratę zapisanych informacji
Odświeżenie polega na wykorzystaniu odpowiednich procedur do utrzymania bez zmian ładunku na kondensatorze.
<h3>
Odczyt/zapis
</h3>
Odczyt dokonujemy z pamięci ROM lub SRAM
1. Ustawienie adresu zaszytego w strukturze pamięci. W tym celu służą linie adresowe.
2. Na podstawie tego adresu uaktywnione zostają linie MEMREQ i CE (logicznego wyboru danego układu pamiętającego). Linie te aktywne są stanem niskim.
3. Ustawienie w stan aktywny linii odczytu
4. Dane z pamięci zostają pobrane, następnie są pobierane z magistrali i następuje zakończenie odczytu
W zapisie do pamięci RAM adres i wybór układu pozostanie bez zmian. Zmieni się linia RD na linię WR. To co ma być zapisane pochodzi z danych z procesora. Procesor musi zadbać o to, aby dane do zapisu dostępne były odpowiednio długo.
Odczyt informacji z pamięci DRAM
1. Na początku w magistrali adresowej wybierany jest adres wiersza. Fakt ustawienia adresu wiersza potwierdzany jest ustawieniem w stan aktywny linii RAS.
2. Następnie dokonywane jest przełączenie adresu, aby na tej samej magistrali adresowej ustawić adres kolumny. Potwierdzenie ustawienia odpowiedniej kolumny polega na ustawieniu linii CAS w stan aktywny.
3. Po zakończeniu adresacji wskazywana jest linia MEMREQ. Linia READ przechodzi w stan aktywny i rozpoczyna się realizacja odczytu.
4. Na magistrali danych powinny się pojawić dane z pamięci.
Czasy dostępu podobnie jak w przypadku pamięci ROM i SRAM mogą być mierzone różnymi sposobami. Podawany jest najniższy czas dostępu mierzony od momentu uaktywnienia linii RAS do momentu, w którym dane pojawiają się na magistrali.
Ostatnim etapem odczytu jest jednoczesne przejście w stan nieaktywny linii RAS i CAS spowodowane przez procesor lub układ DMA.
Procedura zapisu przebiega podobnie do odczytu. Krok 1 i 2 jest taki sam. Następnie procesor lub układ DMA stabilizuje informacje na magistrali danych, a następnie uaktywnia się linie WRITE służące do zapisu danych zgromadzonych na magistrali.
<h3>
Odświeżanie pamięci dynamicznych (DRAM)
</h3>
* **Odświeżanie w trybie skupionym** – fragment, który chcemy odświeżyć będzie niewidoczny dla procesora. Tryb ten jest bardzo prosty logicznie, jego układy io i fragment pamięci jest zawsze nieaktywny. Zadanie odświeżenia jest bardzo obciążające dla systemu. Jest on stosunkowo rzadko stosowany o jest zastępowany odświeżaniem takim, że w normalnej pracy systemu wyrywkowo odnosi się do określonych komórek (?)
* **Odświeżanie sygnałem RAS** – na magistrali pojawia się adres wiersza i linia ras przechodzi w stan aktywny. Druga koordynata podawana jest automatycznie po wyłączeniu linii RAS. Następuje zapis/odczyt jednej komórki. Należy zadbać, aby procesor sensownie wybierał poszczególne adresy wiersza, tak, aby nie zapomnieć o żadnej komórce.
* **Odświeżanie ukryte** – jest odświeżaniem alternatywnym do odświeżania RAS. Adresacja jest taka sama jak adresacja DRAM. Realizowany jest klasyczny dostęp do pewnej komórki pamięci, a właściwe odświeżenie odbywa się, gdy operacje odczyt/zapis zakończy się. Kolumna potrzebna do odczytu lub zapisu jest nieustannie aktywna. Przechodzenie linii RAS nie jest związanie z adresacją linii wiersza na magistrali.
* **Odświeżanie CAS przed RAS** – najpierw w stan aktywny przechodzi linia CAS, a następnie RAS. Linia adresowa nie przesyła na magistralę danych. Odświeżenie to nie musi być jednokrotne.
* **Odświeżanie automatyczne** - układ pamięci odświeża się sam, nie angażując w to ani procesora na DMA
<h3>
Tryby specjalne
</h3>
1. **Odczyt-modyfikacja-zapis** – procesor pobiera dane z pamięci, wykonuje działania i odsyła wynik do pamięci. Nie są mu potrzebne dane sprzed obróbki. Na czas modyfikacji procesor pozostaje w kontakcie z pamięcią i zapisuje nowe dane. Oszczędza się tu czas na adresację.
2. **Tryb stronicowy** – służy także do ograniczania czasu i zaangażowania procesora do adresowania. **Adres wiersza jest wciąż stały, a zmieniają się kolumny** i w ten sposób uzyskuje się dostęp do różnych komórek pamięci.
3. **Tryb półbajtowy** – realizowany jest klasyczny odczyt/zapis. Linia ras jest w stanie aktywnym, zmienia się adres kolumny pozwalający na czytanie danych z kolejnych kolumn. Cztery impulsy CAS mają dostęp do czterech sekwencyjnych lokacji w wierszu
<h3>
Budowa bloków
</h3>
Ma na celu zwiększenie szerokości pamiętanego słowa oraz zwiększenie ilości pamiętanych słów.
Linia CS (chip select) włącza wszystkie układy podłączone do niej. W każdym z układów zostaje wykreślona odpowiednia komórka pamięci. Zapis i odczyt dokonywany jest we wszystkich układach. Poszczególne odcinki magistral połączone są z kolejnymi blokami. W pierwszym bloku zapisze się n bitów, w następnym kolejne n bitów aż do ostatniego, gdzie zostanie zapisana ostatnia część z k bitów.
Zwiększenie ilości słów pamiętanych osiąga się następującymi sposobami: magistrala danych w całości podłączona jest do każdego z bloków. Część magistrali adresowej połączona jest z dekoderem oraz z poszczególnymi blokami. Dekoder wybiera jeden z bloków poprzez przejście jednego z jego wyjść w stan niski. Linie zapis/odczyt podłączone są do wszystkich układów, ale odczyt lub zapis dokonuje się tylko z jednego bloku, wcześniej wybranego poprzez dekoder
Aby zorganizować komórki pamięci w sprawnie funkcjonujący układ, należy je odpowiednio zaadresować. Najprostszym sposobem jest zorganizowanie pamięci liniowo, tj. adresowanie 2D. Do każdej komórki podłączone jest wejście, sygnał wybierania pochodzący z dekodera i wyjście. Nieco innym sposobem jest adresowanie przy pomocy matrycy 3D, gdzie pamięć organizuje się dzieląc dostępne elementy na wiersze i kolumny. Dostęp do pojedynczego elementu pamiętającego można uzyskać po zaadresowaniu odpowiedniego wiersza i kolumny, dlatego też komórka RAM obok wejścia i wyjścia musi dysponować jeszcze dwoma sygnałami wybierania, odpowiednio z dekodera kolumn i wierszy.
<h3>
W 8051
</h3>
Mikrokontroler 8051 ma dwie odrębne przestrzenie adresowe pamięci: 64kB pamięci programu i 64kB pamięci danych. Pamięć programu może być tylko odczytywana, nie może być zapisywana podczas normalnej pracy systemu, pamięć danych może być odczytywana i zapisywana. Mikrokontroler pobiera rozkazy z wewnętrznej pamięci programu gdy na wejściu EA jest jedynka logiczna, a po przekroczeniu adresu 0FFFh (4kB), z zewnętrznej pamięci programu. Gdy na wejściu jest zero, mikrokontroler pobiera wyłącznie z zewnętrznej pamięci programu.
* Akumulator – (0E0H) 8-bitowy podstawowy rejestr mikrokontrolera
* Rejestr B – 8-bitowa pamięć tymczasowa wykorzystywana np. do operacji dzielenia/mnożenia
* Rejestry ogólnego przeznaczenia R0-R7, każdy o rozmiarze 8 bitów. Programista ma dostęp do 4 banków (efektywnie 4×8 rejestrów), określonych bitami RS1:RS0 8-bitowego rejestru znaczników PSW.
* Rejestr DPTR – 16-bitowy wskaźnik danych w zewnętrznej pamięci danych
* Rejestr PC – 16-bitowy licznik rozkazów
* Rejestr SP – 8-bitowy wskaźnik stosu
Mikrokontroler nie ma możliwości zapisu do pamięci programu – w trakcie normalnej pracy systemu zapis możliwy jest tylko do pamięci danych. System uruchomieniowy musi jednak być wyposażony w możliwość zamiany zawartości pamięci programu. Dlatego w konfiguracji magistrali systemowej DSM dla mikrokontrolera 8051 został wprowadzony dodatkowy sygnał PSWR (Program System Memory Write), który jest generowany przez kartę monitora, dzięki cezmu można umieścić w pamięci 6264 (MEM8) program dla mikrokontrolera 8051.
<h3>
Stronicowanie i segmentacja
</h3>
Stronicowanie polega na dopuszczeniu nieciągłości logicznej przestrzeni adresowej procesu. Podstawowa metoda:
* Pamięć fizyczna dzielona na bloki o stałej długości zwane ramkami
* Pamięć logiczna dzielona na bloki o stałej długości zwane stronami
* Rozmiary stron i ramek są identyczne
* Strony z pamięci pomocniczej wprowadzane są w dowolne ramki pamięci operacyjnej
**Segmentacja pamięci** polega na podzieleniu przez procesor pamięci fizycznej na fragmenty o określonym początku, rozmiarze, atrybutach i identyfikatorze. System tworzy takie segmenty na żądanie aplikacji, przekazując jedynie identyfikatory nie pozwalające na odczytanie parametrów segmentów.
<h3>
P0
</h3>
raz na p0 jest młodsza część adresu(młodsza część magistrali adresowej), a następnie dane (jako magistrala danych), linia ALE pokazuje czy służy jako magistrala adresowa i danych
<h2>
14.Cache
</h2>
Cache, czyli pamięć podręczna, służy do tego, aby przechowywać tymczasowo dane dla procesora. Warto zauważyć, że cache jest kompletnie przezroczyste dla procesora - procesor sięga pod dany adres pamięci i nie interesuje się tym, czy dane przyjdą z cache, czy z pamięci. Istnieje coś takiego jak hit ratio i miss ratio. Są to współczynniki, odpowiednio, trafień w cache i chybień w cache. Trafienie w cache następuje wtedy, gdy procesor sięga po coś do pamięci, ale owo „coś” znajduje się już w cache, więc w ostateczności zostaje do procesora wysłane z cache, a nie z samej pamięci. Chybienie - wiadomo, danych nie ma w cache, więc muszą zostać pobrane z pamięci.
<h3>
Budowa i sposoby organizacji
</h3>
* **Direct Mapping Cache** – dla ustawionego rozmiaru „skoku” (s), tj. odległości relatywnej w pamięci głównej, mamy sytuację taką, że linia (i) pamięci Cache może odwoływać się do linii (i), (s+i) oraz (2s+i) w pamięci głównej.
* **Fully Associative Cache** – każda linia pamięci cache może odwoływać się do dowolnej linii pamięci głównej.
* **Set Associative Cache** – dzielimy pamięć cache na zbiory. Jest to schemat podobny do DMC, jeśli chodzi o skoki. Natomiast w każdym secie możemy dowolnie przydzielić linię z pamięci głównej, z ustalonego zakresu, zdeterminowanego numerem setu.
<h3>
Mechanizmy zastępowania danych
</h3>
Zastępowanie danych dzielimy ze względu na fakt uwzględniania informacji z tagów:
* z uwzględnieniem informacji
* **MIN** – co najdłużej potrzebne nie będzie. Stosuje się do tego różne dziwne mechanizmy analizujące kod programu (zwłaszcza, jeśli kod programu też leży w cache) sprawdzające, do jakich miejsc w pamięci będziemy się w najbliższym czasie odwoływać. Oczywiście, można łatwo zmylić takie algorytmy poprzez np. rozgałęzienia w programie.
* **LRU** – co najdłużej potrzebne nie było. Dość oczywiste, problem polega jednak na tym, że jeśli używamy w kółko np. 10 danych, a w cache jest miejsce na 9, to po pewnym czasie cały czas będziemy mieli chybienia.
* bez uwzględnienia informacji
* **FIFO** – pierwsze wlata pierwsze wylata. Problem pojawia się, jeśli np. dużo operujemy na jednej danej z pamięci, a potem obrabiamy inne, korzystając z informacji z tej jednej. Wtedy po chwili zostanie ona wywalona z cache i będzie trzeba ponownie po nią sięgać do pamięci.
* **Random** – wbrew pozorom, nie jest to metoda najgorsza! Tego nie było na wykładzie, ale warto zauważyć, że nie wymaga przechowywania jakichkolwiek informacji o tym, kiedy linia została wrzucona do cache bądź kiedy była ostatnio używana, oraz nie wymaga żadnego systemu przewidującego!
Mamy rozwiązane odczytywanie z pamięci za pośrednictwem cache, ale co z zapisywaniem? Oczywiście, sam procesor nie pisze bezpośrednio do pamięci, ale do cache, a następnie cache synchronizuje się z pamięcią główną. Może to robić na trzy sposoby:
* Zawsze, gdy coś jest zapisane do cache, to jest zapisywane również do pamięci głównej. Plus jest taki, że dane na pewno nie zginą, bo są w obu miejscach jednocześnie. Minusem jest powolność.
* Gdy linia jest usuwana z cache, to jest zapisywana w pamięci głównej.
* Gdy linia jest usuwana z cache, to jest zapisywana w pamięci głównej pod warunkiem, że została zmodyfikowana podczas pobytu w cache. To jest przemyślane - ponieważ jeśli nie została zmodyfikowana, to nadpisywalibyśmy w pamięci głównej te same dane na te same dane.
<h2>
15.I/O
</h2>
### Port równoległy
**Intel 8255** – programowalny układ równoległego I/O z 8-bitowymi portami PA i PB. Nadawanie i odbieranie słowa. Handshake 2 przewodowy
Tryby pracy:
* tryb 0 - niestrobowane
* przeznaczony do realizacji bezwarunkowych operacji I/O.
* dwa porty 8-bitowe i dwa porty 4-bitowe
* możliwość zaprogramowania każdego portu jako I lub O
* wyjścia z rejestrami zatrzaskowymi i bez tych rejestrów
* tryb 1 – strobowane we-wy - przeznaczony do realizacji operacji I/O z przerwaniem, przy jednym kierunku przesyłania danych. Potrzebne do tego celu sygnały są wyprowadzane lub wprowadzane z wykorzystaniem konkretnej linii portu.
* tryb 2 – dwukierunkowy - przeznaczony do realizacji operacji I/O z przerwaniem, tylko poprzez port A, przy dwóch kierunkach przesyłu danych.
### port szeregowy
**Intel 8251** – programowalny układ szeregowego I/O, składający się z:
* rejestru buforowego nadajnika PIPO
* rejestru przesuwnego nadajnika PISO
* rejestru buforowego odbiornika PIPO
* rejestru przesuwnego odbiornika SIPO
* rejestru stanu
* rejestru sterującego
* rejestru służącego do synchronizacji
Informacja przeznaczona do wysłania zapisywana jest do rejestru buforowego nadajnika, stamtąd przepisywana jest do rejestru nadajnika i wysyłana. Informacja odebrana przez układ zapisywana jest do rejestru przesuwnego odbiornika a następnie do rejestru buforowego, skąd może zostać odczytana przez jednostkę centralną.
#### Tryby pracy
* **transmisja asynchroniczna** – częstotliwość zegara k razy większa od częstotliwości nadawania, długość znaku to 5-8 bitów, możliwa jest kontrola poprawności transmisji (bit parzystości). Synchronizacja przy użyciu wykrywania przerwy w nadawaniu.
* **transmisja synchroniczna** – częstotliwość k razy większa od nadawania, ilość znaków synchronizacji to 1 lub 2, synchronizacja na dwa sposoby: zewnętrzny i wewnętrzny. Monosync i Bisync
### Timery
**Intel 8253** – programowalny timer/licznik, oznaczany często jako PIT, zawierający trzy, niezależne od siebie 16-bitowe liczniki (liczące wstecz) wyposażone we własne wejścia - Gate oraz Clock, jak i wyjścia.
#### Tryby pracy:
* Tryb 0 – interrupt on terminal count, odliczanie jednorazowe
* Tryb 1 – programmable one-shot, generowanie jednego impulsu
* Tryb 2 – rate generator, dzielnik częstotliwości
* Tryb 3 – generator z symetrycznym sygnałem wyjścia (jak w trybie 2, ale częstotliwość jest dzielona przez dwa), generator fali prostokątnej
* Tryb 4 – impuls przerzutnika, sterowany programowo
* Tryb 5 – impuls przerzutnika, sterowany sprzętowo
### Współadresowanie i adresowanie izolowane:
#### Współadresowanie:
Rejestry układów I/O są udostępnione jako zwykłe komórki pamięci w przestrzeni adresowej
#### Adresowanie izolowane:
Rejestry urządzenia dostępne są w odrębnej przestrzeni adresowej (przestrzeń adresowa I/O lub przestrzeń portów)
<h2>
16.Magistrala IEC 635
</h2>
Interfejs IEE-488 z 24 wyprowadzeniami. Osiem z nich to wyprowadzenia danych, 3 – linie synchronizacji, 5 – linie sterowania. Robi za kanał komunikacyjny do 16 urządzeń, w logice ujemnej (poziomy TTL). Długość przewodów ok. 20 metrów. Sepruje część urządzeniową od interfejsowej. Hand
Magistrala IEC-625 (IEEE-488):
● 8 przewodów do dwukierunkowej transmisji danych,
● 3-przewodowy handshaking (3 linie potwierdzenia):
● adresy urządzeń kodowane są kodem 1 z 8 (przegląd równoległy - kto?, przegląd szeregowy - gdy więcej niż 1 urządzenie na jednym adresie);
● odrębność części interfejsowej i obliczeniowej urządzenia (osobna część do obsługi magistrali a osobna część do zarządzaniem samym urządzeniem) → sprawniejsza praca
### linie magistrali
* DIO1-DIO8 – dwukierunkowe linie danych
* ATN – kontroler utrzymujący tę linię w stanie niskim podczas transmisji danych
* DAV – stan niski sygnalizuje pojawienie się i ważność informacji na szynie danych
* NDAC – przyjęcie danych wprowadza linię w stan wysoki
* NRFD – stan niski wskazuje, że urządzenie nie jest gotowe do odbioru danych
* EOI – wskazuje koniec transmisji
* REN – powoduje odłączenie lokalnego sterowania urządzeniem
* SRQ – urządzenie, które potrzebuje obsługi wymusza stan niski (żądanie przerwania bieżących zdarzeń)
* IFC – zerowanie interfejsu np. po restarcie
<h2>
17.Architektury SIMD
</h2>
Architektury systoliczne, to architektury specjalizowane do implementacji operacji macierzowych, przetwarzania sygnałów i obrazów w czasie rzeczywistym. Globalnie synchronizowane procesory elementarne są połączone w regularną siatkę. Każdy procesor jest połączony tylko z najbliższymi sąsiadami. Struktura wewnętrzna procesora, w zależności od postawionego zadania, możę być bardzo prosta lub dążyć do stopnia ukomplikowania współczesnych mikroprocesorów. Wyniki przetwarzania są uzyskiwane stopniowo.
#### łatwiejszym językiem
W SIMD wszystkie procesory pracują razem, synchronicznie nad rozwiązaniem jednego problemu, jest jeden strumień rozkazów. Są połączone w regularną siatkę.
Procesory mogą być bardzo proste (sumator + rejestry) lub skomplikowane i nowoczesne. Używane przy przetwarzaniu obrazów, audio. Przykład SIMD - Nvidia CUDA.
Wyniki danych uzyskiwane stopniowo
### Rodzaje, struktury
* **tablica z częściowym rozpowszechnianiem danych** – komunikacja PE punkt-punkt oraz magistrala, komunikacja zewnętrzna przez magistralę, rozbudowane układy sterujące, stopień wykorzystania >50%
* **tablica heksagonalna** – komunikacja między procesorami typu punkt-punkt, komunikacja zewnętrzna tylko za pomocą procesorów brzegowych, prosta konstrukcja, duża liczba PE, niski stopień ich wykorzystania (<50%)
* **tablica przetwarzania potokowego** – komunikacja jak w heksagonalnej, prosta konstrukcja, liczba PE mniejsza niż w tablicy heksagonalnej, stopień ich wykorzystania – co najmniej 50%
* **tablica typu wavefront** – asynchroniczna komunikacja punkt-punkt, na zewnątrz tylko brzegowe, dobra skalowalność, łatwe przeprogramowywanie, dobre parametry FTC, stopień wykorzystania PE to 50%
* **tablica z rozpowszechnianiem danych** – komunikacja tylko przez magistrale, rozbudowane układy sterujące, łatwa implementacja algorytmów, wysoki stopień wykorzystania PE
### Parametry
* Czas wykonania obliczeń – czas od rozpoczęcia pierwszej operacji, aż do ukończenia ostatniej
* Okres przetwarzania potokowego – odstęp między dwoma sukcesywnymi wynikami obliczeń procesora
* Okres bloku – odstęp między inicjacjami dwóch sukcesywnych bloków
* Wskaźnik użycia procesora
* Rozmiar tablicy – tablica nie może być nieograniczona, czasem musi być ona mniejsza od rzeczywistego rozmiaru problemu, czasem możemy też użyć tablicy jednowymiarowej do zasymulowania tablicy 2D
* Pamięć lokalna – używana do rozszerzenia fizycznej tablicy do znacznie większej tablicy wirtualnej
### Transputer
to mikroprocesor w jednym układzie scalonym, zaprojektowany specjalnie do obliczeń równoległych (szybka komunikacja i łatwość połączenia z innymi transputerami). Wraz z nim został opracowany język programowania równoległego OCCAM. W skład transputera wchodzi procesor typu RISC, wewnętrzna pamięć RAM oraz łącze pamięci zewnętrznej, która umożliwia adresowanie w przestrzeni 4 GB. Do komunikacji z innymi transputerami wykorzystywane są cztery kanały DMA.
<h2>
18.Koprocesor arytmetyczny
</h2>
Kiedyś koprocesor był osobnym układem dołączonym np. magistralą. Obecnie jest on zintegrowany z procesorem głównym, choć dwoistość architektury nadal jest widoczna – np. każdy z procesorów ma swoje rejestry. Ponadto, nie jest możliwa praca samego koprocesora, nie obsługuje on urządzeń I/O oraz przerwań. Współpraca polega na tym, że procesor podstawowy pobiera rozkazy zarówno dla siebie, jak i dla koprocesora (mają one specjalną preambułę), dekoduje je i po odcięciu preambuły odsyła rozkaz do koprocesora, przy okazji wyznaczając adresy efektywne argumentów.
#### prostszym językiem:
* wspiera procesor przy bardziej złożonych obliczeniach matematycznych.
* Kiedyś oddzielny układ; dziś zintegrowany w procesorze, jest jednak "wyodręniony" - ma swoje rejestry etc.
* Nie jest w stanie sam pracować, nie obsługuje przerwań.
* Procesor podaje dane, koprocesor przetwarza i oddaje.
### Format danych

### Rozkazy:
* **Rozkazy przesłań** - przeznaczone do ładowania liczb z pamięci lub odsyłania ich do pamięci. Dla różnego rodzaju liczb używa się różnych rozkazów. Rozkazy z przyrostkiem P usuwają wysłaną liczbę ze stosu.
* **Rozkazy arytmetyczne** - pozwalają wykonywać operacje dodawania, odejmowania, mnożenia, dzielenia oraz inne operacje. W przypadku operacji odejmowania i dzielenia, oprócz rozkazów realizujących operacje w zwykłej postaci, istnieją także rozkazy wykonujące te operacje dla argumentów zamienionych miejscami na stosie. Oczywiście mamy rozkazy usuwające argument ze stosu i pozostawiające go.
* **Rozkazy porównań i testowania** - pozwalają dokonać porównania dwóch liczb albo uzyskać charakterystyczną informację o liczbie w celu wykonania skoku warunkowego.
* **Rozkazy realizujące funkcje przestępne**
* **Rozkazy ładowania stałych**
### Rejestry
Rejestr znaczników składa się z ośmiu 2-bitowych pól TAG0-TAG7 zawierających syntetyczne dane o zawartości rejestrów na stosie o znaczeniu:
00 – liczba zwykła, 01 – zero, 10 – zawartość specjalna (nieskończoność), 11 – rejestr pusty
* Rejestr sterujący IC – infinity control – określenie modelu nieskończoności, w dwóch trybach: afinicznym (1, wyróżniamy +∞ i −∞) oraz rzutowym (0, tylko jedno ∞). RC – rounding control – sposób zaokrąglania
00 – do liczby najbliższej
01 – w dół 11
10 – w górę
11 – w kierunku
* 0 PC – precision control – precyzja obliczeń 00 – 24 bity 10 – 53 bity 11 – 64 bity 01 – zarezerwowane
* Rejestr stanu B – 1 oznacza, że rozkaz niezakończony
* TOP – numer rejestru na szczycie stosu
* C3−0 – kod warunku
* IR – zgłoszenie przerwania: PE (utrata dokładności, UE (niedomiar), OE (nadmiar), ZE (dzielenie przez zero), DE (argument w postaci nieunormowanej, IE (operacja błędna)
* Rejestr adresu rozkazu, rejestr kodu rozkazu i rejestr adresu danej
<h2>
19.Achitektury MIMD
</h2>
MIMD - Multiple Instruction Multiple Data.
W MIMD zachodzi przetwarzanie równoległe na poziomie danych i instrukcji. MIMD używa wielu procesorów, zwykle SIMD pracujących niezależnie i asynchronicznie. Każdy procesor może robić co innego w tym samym czasie.Mogą one korzystać ze wspólnej pamięci dzielonej lub używać modelu rozproszonego w którym każdy z nich posiada prywatną przestrzeń adresową.
**Trzy typy MIMD**:
* **MIMD-SM (Shared Memory)** - mają wspólny obszar pamięci, komunikują się przez sieć interconnect.
* **Shared everything** - wszystkie dane we wspólnym obszarze
* **Shared something** - użytkownik określa które dane zostają umieszczone we wspólnym obszarze

* **MIMD-DM** (Distributed Memory) - pamięć nie jest współdzielona między procesorami, każdy procesor ma swój obszar pamięci, komunikują się przez sieć interconnect.

* **MIMD-HDSM** (Hybrid Distributed-Shared Memory) - grupy składające się z pamięci + kilku procesorów

### Topologie MIMD:
Shared bus Ring Tree Mesh
M M M M P--P P P-P-P
| | | | | | / \ | | |
P P P P P P P P P-P-P
| | | | | | / \ / \ | | |
[-bus-] P--P P P P P-P-P
|
M
Do tego takie jak graf pełny lub kostka n wymiarowa (każdy wierzchołek = Procesor)