share:truealiases:- Bez názvu
complete:trueauthor: Petr
Architektura počítače
BI-SPOL.21-29
Architektura
? Harvardská
? Von Neumman
Instrukční cyklus počítače
Instrukční sady (ISA)
Třídy instrukčních souborů
Paměťový subsystém
Hierarchie
Cache paměť
Architektury číslicových systémů
Procesor se skládá z několika částí
Řadič
Ovládá všechny části procesoru
Generuje řídící signály
Přijímá stavové signály
Výkonná část (ALU,FPU,...)
Paměť
Nějaké registry
Harvardská
Odděluje paměť pro instrukce a pro data
Umožňuje číst data a instrukce najednou
Von Neumannova
Propojuje paměť pro data i instrukce
Jednodušší
Nelze číst instrukci a zároveň data (pomalejší)
Instrukční cyklus počítače
Popisuje jak dochází k vykonávání jednotlivých instrukcí
Běží pořád dokola
Dnešní procesory používají Pipeline, tedy najednou je dekódováno víc instrukcí, každý krok vždy dělá jednu instrukci ale dohromady se dekóduje třeba 5 instrukcí v jeden čas.
Obecně má tyto kroky (podle implementace se můžou lehce lišit)
Instruction Fetch
Dochází ke čtení instrukce
Instruction Decode
Dekódování řadič nastaví cestu pro data v procesoru
Fetch Operand
Nahrání operandů do zvolené execution unit
Execute (ALU,FPU)
Provedení samotné operace
Memory Access /Write Back
Zápis výsledků (do registru/paměti)
Kontrola jestli nenastalo přerušení
Instrukční sada
(ISA) Instruction Set Architekture
Určuje jaké operace umí procesor vykonávat
Je to rozhraní mezi SW a HW
Instrukce říká s čím co udělat, kam to uložit, a kde pokračovat
Instrukce nemusí data obsahovat přímo, umožňujeme deviace, různý počet operandů, operandy v paměti.
Instrukce jsou ve strojovém kódu
Pro lepší čitelnost se píší v asembleru, a pak se překládají
Některé instrukce může provádět jen kernel
přístup k filesystému
Bezpečnostní důvody
Implementují ringy
Ring 0 je kernel
Ring 3 je běžně aplikace
Aplikace přistupují k CPU přes
Knihovní API
Systémové volání
Běžné instrukce
Třídy instrukční sady
Akumulátorové
Obsahuje jeden registr nad kterým se provádí operace
Přičti 1 k akumulátoru...
x86 využívá víc akumulačních registrů od 386 GPR
Naráží na práci s pamětí (pomalé)
Jednoduchý HW
Zásobníkové
Registry jsou uložené jako zásobník
Nelze náhodný přistup
Je sekvenční
Registrové
GPR mnoho registrů, které obsahují operandy
Dnes nejpoužívanější
Rychlé registry s náhodným přístupem
Omezený počet registrů
těžší překladač
Typy instrukčních sad
RISC
Redukovaná instrukční sada
Instrukce se stejnou délkou
Kratší a jednodušší instrukce
Rychlé provádění
Je malá(fyzicky menší dekodér)
ARM, RISC-V
CISC
kompletní instrukční sada
má instrukce na všechno
Memory to memory instrukce
Různě dlouhé instrukce (délka i čas)
I složité instrukce
Je velká (velký dekodér)
x86, spíš legacy support
Pořadí zpracování instrukcí
In order
tak jak jdou za sebou
Out of order
Zrychluje vykonávání, ale na venek to není poznat
Přerušení
Jedná se mechanismus, který upozorní CPU na nějaký spouštěč
Dokončení výpočtu GPU, stisk klávesy, příchozí packet
Něco co vyžaduje pozornost CPU
Provádí se takzvaná obsluha přerušení
Procesor přeruší prováděný sled instrukcí
Uloží aktuální stav registrů na zásobník
Procesor načte příslušný vektor přerušení
Provede obsluhu
Načte zpět uložená data a pokračuje ve vykonávání instrukcí
Známe vnější a vnitřní přerušení
Vnitřní jsou od procesoru, třeba dělení nulou
Vnější jsou od periferií.
Paměťový subsystém
Procesor přistupuje k paměti po větších celcích, kvůli vyšší efektivitě (Bajt, 32, 64 bitů)
Každé takové místo v paměti má vlastní adresu
Paměťový prostor počítače dělíme na
RAM (blízko procesoru, rychlé, drahé)
Vnější úložiště (SSD,HDD, DVD,...) Levné velké
Endianita
Definuje, jak je hodnota uložená v paměti int i = 1000 (0x03E8)
Little endian
Intel, od nejmenší po největší
E8 03 00 00
Big endian
Od největších po nejmenší
00 00 03 E8
Hierarchie pamětí
jedná se o řazení dle rychlosti i blízkosti k CPU, zároveň čím blíže k cpu tím dražší
Paměť je pro snížení ceny odstupňovaná
Platí cenový trojúhelník (cena, rychlost, kapacita)
Z programátorského hlediska se jedná o ucelený prostor
Využívá se princip stránkování
Bloky, které se dle potřeby přesouvají mezi RAM a diskem
Programátor pracuje s virtuálním paměťovým prostorem
Registry
Frekvence CPU, nulová latence
1kB
Cache
Bývá rozdělená na datovou a instrukční
uvnitř procesoru
může držet často používaná data, nemusí se na ně čekat z RAM
Z programátorského hlediska neexistuje
SRAM
KB - MB
RAM
Operační paměť, jsou v ní všechna právě zpracovávaná data
DRAM
GB
Trvalá úložiště
Při vypnutí neztrácí obsah
jsou pomalá ale vzhledem k kapacitě levná
Fyzické paměti
DRAM, SRAM
SRAM rychlejší
DRAM levnější
(E*)ROM
Typy permanentních pamětí
Flash
Umožňuje přepisování, elektronická paměť
HDD
Magnetický záznam
Rozšíření čipové paměti
Čipy paralelně -> širší slovo
Pomocí MUX a práce s CS, OE, WE signály paměť "sériově"
Cache paměť
Stojí mezi CPU a RAM
Využívá asociativní přistup ()
Obsahuje nejčastěji používaná data
SRAM
Při hledání dat se spouští proces z cache i z RAM
při Cache HIT se RAM nedokončí
při Cache MISS se data načtou z RAM a uloží do cache
Při zápisu se zapíše do cache pokud tam je
Write Through -> zápis i do RAM
Write Back -> jen do cache, do RAM až při uvolnění (příznak)
Stupně asociativity
Plně asociativní paměť má stupeň asociativity roven její kapacitě (je na hovno)
n-stupňová asociativita -> každá položka se může nacházet na n místech, určuje část adresy položky
n = 1 nemůžu ukládat položky co se liší pouze v TAGu
Realizace cache
Fyzická adresa se rozdělí na části
Adresa řádku v adresáři RAM
Adresa v bloku
T-tag, část, která se asociativně srovná s obsahem adresáře
Data jsou uložena po blocích, část adresy je adresa bloku
Jeden stupeň asociativity (víc to jen dává paralelně)
Víc stupňů asociativity přidává HW, který říká jakou položku přepsat (naposledy použitou)