Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
statnice:bakalar:b0b35apo [2025/06/09 18:01] – [Dynamické prediktory] zapleka3 | statnice:bakalar:b0b35apo [2025/06/09 21:41] (current) – zapleka3 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== Architektura počítače; | + | ====== Architektura počítače; |
[[https:// | [[https:// | ||
Line 422: | Line 422: | ||
* Binární reprezentace má své specifické chování, včetně přetečení, | * Binární reprezentace má své specifické chování, včetně přetečení, | ||
* Na rovnost dvou desetinných čísel nelze spoléhat — i malá aritmetická chyba způsobí rozdíl. | * Na rovnost dvou desetinných čísel nelze spoléhat — i malá aritmetická chyba způsobí rozdíl. | ||
- | |||
- | ===== 2. CPU ===== | ||
- | RISC/CISC architektura, | ||
- | |||
- | ** RISC/CISC ** | ||
- | |||
- | Reduced Instruction Set Computing vs. Complex Instruction Set Computing referuje o přístupu k návrhu procesorů. Jak název napovídá první z přístupů disponuje tzv. redukovanou instrukční sadou a druhý komplexní instrukční sadou. V redukované sadě mají standardně všechny instrukce stejnou délku a jejich sada není příliš početná. V komplexní nemusí mít instrukce konstantní délku, a jejich množství je větší. Redukovaná sada představuje většinou více práce pro programátora, | ||
- | |||
- | ** Registry ** | ||
- | |||
- | |Registr | Popis| | ||
- | |PC | Program counter - dresa právě prováděné (nebo následující) instrukce| | ||
- | |IR | Instruction register - obsahje kód prováděné instrukce načtený zpaměti | | ||
- | |GPR | General purpose registers – obecné uživatelské registry, mohou se dělit na data a adresy do paměti, nebo být univerzální| | ||
- | |SP | Stack Pointer - kazuje na vrchol zásobníku, | ||
- | |PSW | Program Status Word – definuje v jakém stavu je procesor | | ||
- | |IM | Interrupt Mask – kontrola přerušení | | ||
- | |FPR | Floating point registers – rozšíření procesoru pro práci s reálnými čísly, případně i vektorové/ | ||
- | |||
- | ** Formát RISC CPU instrukcí ** | ||
- | |||
- | Obecně – instrukce mají 32bit, kde bity 0-7 (LSb, little endian -> " | ||
- | |||
- | ** Porovnání jednocyklového procesoru a zřetězeného zpracování instrukcí ** | ||
- | |||
- | Jednocyklový procesor funguje asi takto | ||
- | |||
- | - Počáteční nastavení – inicializace PC a PSW | ||
- | - Načtení instrukce z paněti z adresy PC (nastav PC -> Přečti obsah do IR -> uprav PC dle délky instrukce) | ||
- | - Dekóduj instrukci | ||
- | - Proveď instrukci | ||
- | - Kontrola přerušení nebo výjimky | ||
- | - Opakuj od kroku 2 | ||
- | |||
- | |||
- | Zřetězení přináší rozdělení vykonání jednotlivých úkonů instrukce. Tj. mezitím co dochází k faktickému vykonání instrukce, již se připravuje vykonání další, či dalších několika. | ||
- | Tomuto procesu se také jinak říká pipelining. | ||
- | |||
- | {{: | ||
- | |||
- | | ||
- | - Instruction Fetch - přivedení PC na adreosvý vstup paměti, načtení instrukce | ||
- | - Instruction Decode - dokódování opcode (bity 0-7), přímého operandu a načtení registrů | ||
- | - EXecution - provedení požadované operace v ALU | ||
- | - MEMory - zápis/ | ||
- | - Write Back - zpětný zápis výsledků do pole registrů pro meziregistrové instrukce a paměti | ||
- | |||
- | ** Jaké problémy přináší zřetězené zpracování instrukcí a jak je lze řešit – stall/ | ||
- | |||
- | Za předpokladu, | ||
- | |||
- | Další možné hazardy, které mohou vzniknout, jsou tzv. " | ||
Line 689: | Line 637: | ||
Statická predikce je jednoduchá a nezatěžuje hardware, ale neposkytuje dostatečnou flexibilitu při složitějším chování programů. | Statická predikce je jednoduchá a nezatěžuje hardware, ale neposkytuje dostatečnou flexibilitu při složitějším chování programů. | ||
- | ===== Dynamické prediktory | + | ==== Dynamické prediktory ==== |
Dynamické prediktory se snaží zjistit, zda se skoková instrukce provede, a to na základě jejího předchozího chování. Jinými slovy, sledují minulost konkrétní skokové instrukce a podle toho se snaží odhadnout, zda se tentokrát skočí nebo ne. | Dynamické prediktory se snaží zjistit, zda se skoková instrukce provede, a to na základě jejího předchozího chování. Jinými slovy, sledují minulost konkrétní skokové instrukce a podle toho se snaží odhadnout, zda se tentokrát skočí nebo ne. | ||
Line 872: | Line 820: | ||
==== Hiearchie ==== | ==== Hiearchie ==== | ||
Každý moderní počítač má několik úrovní paměti, které se liší svou velikostí, rychlostí, latencí a funkcí. Hiearchie pamětí se může trochu lišit napříč architekturami a konkrétními sestavami. | Každý moderní počítač má několik úrovní paměti, které se liší svou velikostí, rychlostí, latencí a funkcí. Hiearchie pamětí se může trochu lišit napříč architekturami a konkrétními sestavami. | ||
+ | |||
+ | * Paměť v počítači si můžeme představit jako vrstvy – od těch nejrychlejších a nejdražších, | ||
+ | * Tento systém je založen na tzv. **paměťové hierarchii**, | ||
+ | * Základním principem, proč hierarchie funguje efektivně, je **časová a prostorová lokalita přístupu** – programy totiž zpravidla pracují jen s malou částí dat najednou, a často s těmi samými nebo sousedními položkami. | ||
+ | * Paměť je technicky implementovaná jako pole adresovaných buněk (většinou o velikosti jednoho bytu). Každá buňka má přiřazenou **adresu** a obsahuje **hodnotu** – data uložená v paměti. | ||
+ | * Velikost dostupné paměti je omezena šířkou adresy – například 16bitový adresní prostor pojme 64 KiB, zatímco 32bitový až 4 GiB. | ||
+ | |||
+ | * Mezi základní parametry, které paměť charakterizují, | ||
+ | * **Vybavovací doba** – čas od vzniku požadavku po nalezení dat. | ||
+ | * **Doba přístupu** – vybavovací doba + čas nutný k obnovení obsahu nebo zadání dalšího požadavku. | ||
+ | * **Propustnost** – kolik dat zvládne paměť obsloužit za jednotku času. | ||
+ | |||
+ | * Paměti dělíme také podle možnosti zápisu: | ||
+ | * **ROM** – Read Only Memory, nelze přepisovat za běhu. | ||
+ | * **RAM** – Random Access Memory, lze číst i zapisovat v libovolném pořadí. | ||
+ | * **SRAM** – statická RAM, rychlá, ale drahá a s větší spotřebou. | ||
+ | * **DRAM** – dynamická RAM, levnější, | ||
+ | |||
+ | * Podle uchování dat po odpojení napájení rozlišujeme: | ||
+ | * **Permanentní paměti** – data zůstávají zachována i po výpadku proudu. | ||
+ | * **Volatilní paměti** – data jsou ztracena při vypnutí systému. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{/ | ||
+ | |||
+ | * Diagram ukazuje klasickou **paměťovou hierarchii** od nejrychlejších registrů po nejpomalejší diskové úložiště. | ||
+ | * Čím blíže k procesoru, tím je paměť rychlejší, | ||
+ | * Porovnání parametrů různých typů pamětí: | ||
+ | * **L1 SRAM** – 32 kB, velmi rychlá (0.2–2 ns), | ||
+ | * **Sync SRAM** – 1 MB, rychlá (0.5–8 ns/ | ||
+ | * **DDR3 (DRAM)** – 16 GB, střední propustnost (15 GB/ | ||
+ | * **HDD** – 3 TB, velmi pomalé (100 MB/ | ||
+ | * Některá data mohou existovat ve více kopiích (např. L1, L2, RAM). | ||
+ | * Aby nedocházelo k nesrovnalostem, | ||
+ | |||
=== Registers === | === Registers === | ||
- | Nejrychlejší paměť s nejnižší latancí, která je přímo v jádrech procesoru. | + | * Nejrychlejší paměť s nejnižší latancí, která je přímo v jádrech procesoru. |
- | Obsahuje data běžícího programu, ale nikoliv instrukce programu. | + | |
- | Procesor provádí většinu operací nad registery (např. sčítání, | + | |
- | Konkrétní počet registerů závisí na konkrétní architektuře (x86, extensions atd.), většinou v řádu desítek registerů, sčítající na stovky bytů. | + | |
+ | * Registry jsou extrémně rychlé, protože jsou fyzicky integrovány přímo v procesorovém jádru. Přístup do nich trvá jen několik málo taktů. | ||
+ | * Protože jsou velmi omezené kapacitou, používají se pouze pro nejčastěji potřebná data – např. meziproměnné, | ||
- | === Cache === | + | === RAM === |
+ | * Velká volatilní paměť, která fyzicky není v procesoru. | ||
+ | * Technologie DDR, DDR2, DDR3, DDR4. | ||
+ | * Celkový bandwidth záleží na frekvenci pamětí a počtu kanálů. | ||
+ | * Běžné procesory většinou podporují kanály pouze 2, serverové až 12, díky čemuž dosahují velké propustnosti - stovky GB/s. | ||
+ | * Největší problém je spíše latence, která je většinou přes 75ns. | ||
+ | * Někteří výrobci se proto snaží dát paměť co fyzicky nejblíže k procesoru, aby se minimalizovala latence. | ||
+ | |||
+ | * **RAM** (Random Access Memory) umožňuje přístup ke kterékoli buňce ve stejném čase – tedy **náhodný přístup**. To ji odlišuje například od sekvenčních úložišť jako pásky. | ||
+ | * I když má RAM vysokou propustnost, | ||
+ | * Systémy s více paměťovými kanály (dual-channel, | ||
+ | |||
+ | === Disk === | ||
+ | * Velmi pomalé, nevolatilní úložiště. | ||
+ | * Slouží k dlouhodobému ukládání dat. | ||
+ | * Data se z něj načítají do paměti. | ||
+ | * Při nedostatku paměti je možné jej využít jako virtuální paměť - pagefile - může vézt k problémům s výkonem. | ||
+ | * **HDD** - levné, ale pomalejší úložiště (stovky MB/s). | ||
+ | * **SSD** - drahé, ale mnohem rychlejší úložiště (až desítky GB/s). | ||
+ | |||
+ | * Disky tvoří spodní vrstvu paměťové hierarchie. Jsou nejpomalejší, | ||
+ | * Pokud dojde RAM, může operační systém část obsahu paměti „odložit“ na disk – to se nazývá **swapování** nebo použití **virtuální paměti**. Tento mechanismus je funkční, ale výrazně zpomaluje běh programů. | ||
+ | * SSD disky jsou v současnosti mnohem rychlejší než HDD, protože nemají pohyblivé mechanické části – data se čtou elektronicky, | ||
+ | |||
+ | ==== Cache ==== | ||
Cache je rychlá volatilní paměť přímo v procesoru, která se snaží snížit dopad relativně velmi pomalých pamětí RAM. | Cache je rychlá volatilní paměť přímo v procesoru, která se snaží snížit dopad relativně velmi pomalých pamětí RAM. | ||
Historicky rostl výpočetní výkon procesorů mnohem rychleji než rychlost pamětí RAM a proto je cache stále více a více důležitý, | Historicky rostl výpočetní výkon procesorů mnohem rychleji než rychlost pamětí RAM a proto je cache stále více a více důležitý, | ||
Moderní procesory mají několik úrovní cache pro optimální výkon: | Moderní procesory mají několik úrovní cache pro optimální výkon: | ||
- | | + | |
+ | | ||
* Nejrychlejší cache s nejnižší latencí. Rychlost přes 2000 GB/s, latence pod 1ns. | * Nejrychlejší cache s nejnižší latencí. Rychlost přes 2000 GB/s, latence pod 1ns. | ||
* Každé jádro má svůj vlastní L1 cache. U x86 je rozdělen na **L1i** (pro instrukce) a **L1d** (pro data), u ARM záleží na konkrétní architektuře. | * Každé jádro má svůj vlastní L1 cache. U x86 je rozdělen na **L1i** (pro instrukce) a **L1d** (pro data), u ARM záleží na konkrétní architektuře. | ||
* Velmi malý, velikost kolem 40KB na jádro. | * Velmi malý, velikost kolem 40KB na jádro. | ||
* **L2** | * **L2** | ||
- | * Větší ale pomalejší než L2. Rychlost kolem 1000GB/s, latence kolem 2.5ns. | + | * Větší ale pomalejší než L1. Rychlost kolem 1000GB/s, latence kolem 2.5ns. |
- | * U x86 většinou samostatný pro každé jádro, na arm většinou sdílený napříč jádry (unified). | + | * U x86 většinou samostatný pro každé jádro, na ARM většinou sdílený napříč jádry (unified). |
* Velikost v řádu MB na jádro. | * Velikost v řádu MB na jádro. | ||
* **L3** | * **L3** | ||
* Zdaleka největší a taky nejpomalejší. Rychlost kolem 500GB/s, latence kolem 10ns. | * Zdaleka největší a taky nejpomalejší. Rychlost kolem 500GB/s, latence kolem 10ns. | ||
* Většinou pouze u x86. | * Většinou pouze u x86. | ||
- | * Sdílený napříč jádry nebo bloky jáder (např | + | * Sdílený napříč jádry nebo bloky jáder (např. AMD Epyc). |
* Velikost v řádu desítek až stovek MB. | * Velikost v řádu desítek až stovek MB. | ||
- | Toto rozložení samozřejmě neni univerzální, | ||
- | Intel např. dříve experimentoval s velkým L4 cache a nové intel procesory obsahují L0 cache (což je jen debilně pojmenovaný L1 cache - každé jádro má zde vlastní L0d, L0i, L1, L2 a sdílený L3). | ||
- | Optimalizace datových struktur programu tak, aby se vešla dobře do cache, může vést k masivnímu | + | * Toto rozložení samozřejmě není univerzální, |
+ | * Intel např. dříve experimentoval s velkým L4 cache a nové Intel procesory obsahují L0 cache (což je jen jinak pojmenovaný L1 cache – každé jádro má zde vlastní L0d, L0i, L1, L2 a sdílený L3). | ||
+ | |||
+ | * **Cache** slouží jako vyrovnávací paměť mezi procesorem a RAM, urychluje přístup k často používaným datům, a tím snižuje latenci a zvyšuje výkon. | ||
+ | * Optimalizace datových struktur programu tak, aby se vešla dobře do cache, může vést k masivnímu | ||
=== Organizace Cache === | === Organizace Cache === | ||
- | * **Word size (WS)** | + | * **Word size (WS)** |
- | * **Capacity** (C) - kapacita cache v bytech nebo ve slovech | + | * **Capacity (C)** – kapacita cache v bytech nebo ve slovech. |
- | * **Block size (BS)** | + | * **Block size (BS)** |
- | * **Number of sets (SN)** | + | * **Number of sets (SN)** |
- | * **Index** | + | * **Index** |
- | * **TAG** | + | * **TAG** |
- | * **Validity bit** - bit platnosti, indikuje zda jsou data na řádku platná. | + | * **Validity bit** – bit platnosti, indikuje, zda jsou data na řádku platná. |
- | * **Dirty bit** - rošiřující pole v obsahu paměti. Indikuje že v cache je jiná hodnota, než v paměti | + | * **Dirty bit** – rozšiřující pole v obsahu paměti. Indikuje, že v cache je jiná hodnota než v hlavní |
- | * **Degree of associativity (N)** - Počet tabulek | + | * **Degree of associativity (N)** – počet tabulek. |
- | * **Number of blocks (BN)** | + | * **Number of blocks (BN)** |
- | * **Cache hit** (zásah) - pojmenování | + | * **Cache hit** – situace, kdy se požadovaná |
- | * **Cache miss** | + | * **Cache miss** |
- | * **Cache line nebo Cache block** | + | * **Cache line nebo Cache block** |
- | * **Hit rate** | + | * **Hit rate** |
- | * **Miss rate** 1 - Hit rate | + | * **Miss rate** |
- | * Average Memory Access Time (AMAT) | + | |
- | * AMAT pro více urovňovou cache lze spočítat rekurzivní použitím výše uvedeného | + | * Pro vícestupňové cache se AMAT počítá rekurzivně podle stejného |
- | * **Cache replacement policy** | + | * **Cache replacement policy** |
- | * Random | + | |
- | * LRU (least recently used) - nejdéle nepoužitá položka | + | |
- | * LFU (least frequently used) - sleduje jak často se k položkám přistupuje | + | |
- | * ARC (Adaptive | + | |
- | * **Write through (zápis, | + | * **Write through (propsání skrz)** |
- | * **Write back** | + | * **Write back** |
== Plně asociativní cache == | == Plně asociativní cache == | ||
- | Znamená že $\text{Degree of associativity} = text{Number of blocks}$, pro každý řádek | + | Znamená, že $\text{Degree of associativity} = \text{Number of blocks}$. Každý řádek |
- | **vlastnosti: | + | |
- | * Nemusíme nahrazovat záznamy v cache do té doby než nám kompletně dojde. | + | * Díky absenci indexu není třeba řešit kolize způsobené stejnými indexy – všechny bloky soutěží o všechna místa. |
- | * Je velmi drahá na implementaci, | + | * Tag musí obsahovat téměř celou adresu |
- | * Používá se v aplikacích kde je potřeba extrémní rychlost, takže třeba TLB (translation lookaside buffer, pro překlad virtulní na fyzickou paměť), potřebuje být velmi malá. | + | |
- | {{: | + | |
+ | * **Vlastnosti: | ||
+ | * Nemusíme nahrazovat záznamy v cache, dokud není plně zaplněna. | ||
+ | * To znamená, že cache dokáže efektivněji využít svou kapacitu a zvyšuje se pravděpodobnost cache hitu. | ||
+ | * Je velmi drahá na implementaci, | ||
+ | * Nutnost porovnávat všechny tagy najednou při každém přístupu zvyšuje komplexitu a spotřebu. | ||
+ | * Používá se např. v **TLB (Translation Lookaside Buffer)**, kde je potřeba extrémní rychlost a malá velikost. | ||
+ | * TLB je specializovaná cache pro překlad virtuálních adres na fyzické – zde má každá mikrosekunda význam, a malý rozsah přístupů odpovídá malému počtu záznamů. | ||
+ | |||
+ | {{: | ||
== Přímo mapovaná cache == | == Přímo mapovaná cache == | ||
- | * 1 cestná cache $\rightarrow$ | + | * 1-cestná cache → stupeň asociace = 1, tedy pouze jedna tabulka. |
- | * $\text{number | + | * $\text{Number |
- | * má index o délce bitů $log(\text{number | + | * Index má délku |
- | **Schéma**: | + | |
+ | | ||
+ | | ||
+ | |||
+ | | ||
{{: | {{: | ||
- | **Příklad s většími bloky:** | + | * **Příklad s většími bloky:** |
{{: | {{: | ||
- | **Vlastnosti: | + | * **Vlastnosti: |
- | * Hlavní cache u mikrokontrolerů a levných procesorů | + | * Hlavní |
- | * Má velkou | + | * Důvodem je jednoduchá a levná implementace, |
- | * Každou adresu | + | |
+ | * To je způsobeno tím, že více různých adres může sdílet stejný index. | ||
+ | * Každou adresu lze zařadit pouze do jednoho místa v cache tabulce. | ||
+ | * Výsledkem je nižší hit rate oproti flexibilnějším typům | ||
== N-asociativní cache == | == N-asociativní cache == | ||
- | * **Obecnější model cache** | + | * **Obecnější model cache**, kde je stupeň asociace |
+ | |||
+ | * Tento typ cache kombinuje výhody předchozích dvou přístupů: | ||
+ | * Každá paměťová adresa směřuje do konkrétního setu (jako u přímo mapované), ale v rámci tohoto setu může být uložena v libovolném z $n$ bloků. | ||
+ | * Tím se snižuje pravděpodobnost kolizí, protože více položek může sdílet jeden set bez vzájemného přepisování. | ||
+ | * Implementace je jednodušší než u plně asociativní cache, protože se porovnávají tagy jen v rámci jednoho setu, ne celé cache. | ||
{{: | {{: | ||
- | === RAM === | + | * Tento typ organizace nabízí kompromis mezi plně asociativní |
- | + | * **+** Lepší využití paměti a vyšší **hit rate** než přímo mapovaná. | |
- | Velká volatilní paměť, která fyzicky není v procesoru. | + | * **+** Nižší složitost a režie než plně asociativní. |
- | + | * **−** Může docházet ke konfliktům, ale méně často než u přímého mapování. | |
- | Technologie DDR, DDR2, DDR3, DDR4. | + | |
- | + | ||
- | Celkový bandwidth záleží na frekvenci pamětí | + | |
- | Běžné procesory většinou podporují kanály pouze 2, serverové až 12, díky čemuž dosahují velké propustnosti - stovky GB/s. | + | |
- | + | ||
- | Největší problém je spíše latence, která je většinou | + | |
- | Někteří výrobci se proto snaží dát paměť co fyzicky nejblíže k procesoru, aby se minimalizovala latence. | + | |
- | + | ||
- | === Disk === | + | |
- | + | ||
- | Velmi pomalé, nevolatilní úložiště. | + | |
- | Slouží k dlouhodobému ukládání dat. | + | |
- | Data se z něj načítají do paměti. | + | |
- | Při nedostatku paměti je možné jej využít jako virtuální paměť - pagefile - může vézt k problémům s výkonem. | + | |
- | * **HDD** - levné, ale pomalejší úložiště (stovky MB/s). | + | |
- | * **SSD** - drahé, ale mnohem rychlejší úložiště (až desítky GB/s). | + | |
Line 983: | Line 1002: | ||
periferie mapované do paměti, sériový port, sběrnice – sériová/ | periferie mapované do paměti, sériový port, sběrnice – sériová/ | ||
- | RISC-V nemá speciální instrukce pro komunikaci s periferiemi, místo | + | ==== Periferie mapované do paměti ==== |
+ | * RISC-V nemá speciální instrukce pro komunikaci s periferiemi. | ||
+ | * Místo | ||
+ | * Periferie při inicializaci získají svůj vlastní **paměťový rozsah**, přes který komunikují s CPU. | ||
+ | * **Address Decoder** rozhoduje, ke které periferii daný paměťový přístup patří. | ||
+ | * **Asynchroní sběrnice**: | ||
+ | * **Synchroní sběrnice**: | ||
+ | * Tento způsob je jednoduchý na implementaci, přehledný a často používaný v embedded systémech. | ||
+ | * Komunikace přes paměťovou mapu je vhodná pro zařízení, | ||
- | velmi jednoduchá konfigurace - periferie | + | ==== Sériová vs paralelní sběrnice ==== |
+ | * **Paralelní sběrnice** | ||
+ | * Vyšší propustnost, | ||
+ | * **Sériová sběrnice** | ||
+ | * Nižší náklady | ||
+ | * Paralelní sběrnice se používaly u starších zařízení (např. ATA), sériové dnes dominují (např. USB, PCIe). | ||
- | Adress Decoder rozhoduje kam se data přesměrují | + | === Sériový port (UART) === |
+ | * Jeden z nejstarších a nejjednodušších způsobů komunikace. | ||
+ | * **Asynchronní přenos** bez hodin – vysílač a přijímač musejí být nastaveny na stejnou přenosovou rychlost (**baud rate**). | ||
+ | * Např. 9600 Bd, 115200 Bd, nově až 921600 Bd (Bd = 1 bit/s). | ||
+ | * **UART (Universal Asynchronous Receiver/ | ||
+ | * Využívá dvě linky: **TX** (transmit) a **RX** (receive). | ||
+ | |||
+ | * **Paměťově mapované registry UARTu**: | ||
+ | * **RX_ST** – stav přijímání dat | ||
+ | * bit 0: **ready** – byla přijata data | ||
+ | * **RX_DATA** – čtení přijatých dat | ||
+ | * čtením z této adresy | ||
+ | * **TX_ST** – stav vysílání | ||
+ | * bit 0: **ready** – UART je připraven k odeslání | ||
+ | * **TX_DATA** – zápis dat k odeslání | ||
+ | * zápis do registru rovnou spouští odeslání po TX | ||
- | **Asynchroní sběrnice** | + | === Half-duplex vs Full-duplex === |
- | * USB | + | |
- | * SATA | + | * Např. klasický PCI – nelze současně odesílat i přijímat. |
+ | * **Full-duplex** – data mohou proudit **oběma směry současně**. | ||
+ | * Např. PCIe – vyšší efektivita přenosu. | ||
- | **Synchroní | + | === Asynchronní |
- | * PCI | + | * Data nejsou přenášena podle společného hodinového signálu. |
- | * PCIe | + | * Používají se tam, kde nelze garantovat přesnou synchronizaci nebo to není potřeba. |
+ | * **USB** – univerzální rozhraní pro připojení periferií. | ||
+ | * **SATA** – rozhraní pro připojení disků. | ||
- | === Sériová vs paralelní | + | === Synchronní |
- | Sériová sběrnice přenáší data po jedné datové lince, paralelní sběrnice přenáší data po více datových linkách současně | + | * Přenos je řízen společným hodinovým signálem, všechna zařízení |
- | + | * **PCI** | |
- | Sériová linka | + | * **PCIe** |
- | + | ||
- | jeden z nejstarších způsobů komunikace, asynchronní přenos bez hodin | + | |
- | obě strany jsou nastaveny na stejnou rychlost která definuje délku vysílání jednoho bitu (baud rate, dříve např 9600 - 115200 Bd, nově až 921600 Bd, Bd = 1bit/s) | + | |
- | + | ||
- | === UART === | + | |
- | Universal Asychronous Receiver Transmitter | + | |
- | + | ||
- | speciální | + | |
- | + | ||
- | RX_ST - stav přijímání dat | + | |
- | | + | |
- | RX_DATA - přijatá data | + | |
- | | + | |
- | TX_ST - stav odesílání dat | + | |
- | | + | |
- | TX_DATA - data k odeslání | + | |
- | | + | |
=== PCI === | === PCI === | ||
- | sběrnice | + | * **Paralelní synchronní |
- | + | | |
- | | + | |
- | | + | |
- | | + | |
- | - pokud je cílová periferie | + | |
- | | + | |
- | | + | |
- | | + | * **Nevýhody: |
- | + | * Half-duplex | |
- | PCI je half-duplex, nelze současně posílat data oběma směry. | + | * Sdílená |
- | + | * Omezená přenosová rychlost – 33 nebo 66 MHz: | |
- | Více zařízení na sběrnici - pomalá | + | * 32bit: 132 MB/s nebo 264 MB/ |
- | + | * 64bit: 264 MB/s nebo 528 MB/s | |
- | PCI sběrnice umožňuje pouze hodiny s 33 MHz, nebo 66 MHz. | + | |
- | * To odpovídá 132MB/s nebo 264 MB/s pro 32 bitovou variantu | + | |
- | * To odpovídá 264MB/s nebo 528 MB/s pro 64 bitovou variantu | + | |
=== PCIe === | === PCIe === | ||
- | i malé nepřesnosti v délce vodičů, kvalitě spojů vedou k rozdílným rychlostem šíření signálů | + | * **Sériová sběrnice**, point-to-point (peer-to-peer). |
- | to je problém pro vysoké frekvence přenosů | + | * **Full-duplex** – data mohou proudit současně v obou směrech. |
- | + | * Každé spojení je realizováno jako samostatný link – nedochází ke sdílení přenosového pásma. | |
- | PCIe te peer-to-peer | + | * Velmi vysoké rychlosti, ale vyžaduje kvalitní spoje – i drobné rozdíly v délce vodičů nebo kvalitě mohou narušit komunikaci. |
+ | * Nahrazuje klasické PCI u moderních | ||
- | je full-duplex, |