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, | ||