# 20 — Architektura počítače
> [!abstract] O tématu
> ==**Architektura počítače**== = ==**základní koncepce, jak jsou propojené části počítače**== a jak spolu komunikují. Nejznámější je ==**von Neumannova architektura**==, na které stojí prakticky všechny dnešní PC.
> [!info] Maturitní otázka
> **a)** Nakreslit a vysvětlit von Neumannovu architekturu · **b)** Princip a funkce částí · **c)** Non von Neumannovy architektury
---
## a) Von Neumannova architektura
==**John von Neumann**== (1945) — americký matematik navrhl schéma jako model ==**samočinného počítače**==. Tento koncept zůstává až na výjimky **dodnes**.
> [!note] Architektura vs Implementace
> - ==**Architektura**== = specifikace programového modelu (co od počítače chceme — reprezentace dat, formát instrukce, adresování...)
> - ==**Implementace**== = volba technologie, vlastní zapojení, obvodový návrh
### Schéma
```
┌──────────────────────────────────┐
│ CPU (Procesor) │
│ ┌────────────┐ ┌────────────┐ │
│ │ ALU │ │ Řadič (CU) │ │
│ └────────────┘ └────────────┘ │
│ ┌──────────────────────────────┐│
│ │ Registry ││
│ └──────────────────────────────┘│
└─────────────┬────────────────────┘
│ ↕ (sběrnice)
┌─────────────┴────────────────────┐
│ Operační paměť (RAM) │
│ ── společná pro program i data ──│
└─────────────┬────────────────────┘
│ ↕
┌─────────────┴────────────────────┐
│ Vstupní a výstupní zařízení │
│ (klávesnice, monitor, disk...) │
└──────────────────────────────────┘
```
### Klíčové principy
- ==**Instrukce i operandy jsou ve stejné paměti**== (jeden adresový prostor)
- ==**Struktura počítače je nezávislá na typu úlohy**== → ==**univerzálnost**==
- ==**Paměť = buňky stejné velikosti**==, očíslované → ==**adresy**==
- ==**Program = posloupnost instrukcí**==, vykonávaných **sekvenčně** v pořadí, jak jsou v paměti
- ==**Dvojková soustava**== pro reprezentaci instrukcí i čísel
- Při změně dat se program **nemění**
> [!tip] Pozor na pojmy z prezentace
> - ==**Procesor = řadič + ALU**==
> - ==**CPU = procesor + operační paměť**== (Central Processing Unit)
### 5 hlavních modulů (blokové schéma)
1. ==**Operační paměť**== — uchovává program a data
2. ==**ALU**== (aritmeticko-logická jednotka) — výpočty
3. ==**Řadič**== (Control Unit) — řízení
4. ==**Vstupní zařízení**== — klávesnice, myš, scanner
5. ==**Výstupní zařízení**== — monitor, tiskárna, reproduktory
Vše propojeno ==**sběrnicemi**==.
---
## b) Princip a funkce jednotlivých částí
### Procesor (CPU)
==**„Mozek" počítače**== — vykonává instrukce.
#### ALU (Arithmetic Logic Unit)
==**Aritmeticko-logická jednotka**== — provádí všechny aritmetické a logické operace. Obsahuje:
- ==**sčítačky, násobičky**== — aritmetické výpočty (+, −, ×, /)
- ==**komparátory**== — porovnávání (>, <, =)
- ==**logické operace**== (AND, OR, NOT, XOR)
- ==**bitové posuny**==
#### Řadič (Control Unit, CU)
==**Řídící jednotka**== — řídí činnost **všech částí počítače**:
- ==**řídicí signály**== posílá jednotlivým modulům
- moduly mu posílají zpět ==**stavová hlášení**== (reakce na signály)
- ==**dekóduje instrukci**== z paměti
- ==**řídí instrukční cyklus**== (Fetch → Decode → Execute)
#### Registry
==**Velmi malá, velmi rychlá paměť v CPU**==. Příklady:
- ==**PC**== (Program Counter) — ==**adresa další instrukce**==
- ==**IR**== (Instruction Register) — aktuálně vykonávaná instrukce
- ==**ACC**== (Accumulator) — pro mezivýsledky aritmetiky
- ==**Flag registr**== — příznaky (carry, zero, sign…)
- ==**Obecné registry**== (R0, R1...) — pro proměnné
### Operační paměť (RAM)
==**Hlavní paměť počítače**==. Obsahuje:
- ==**spuštěný program**== (instrukce)
- ==**data programu**== (proměnné, mezivýsledky)
- ==**operační systém**==
==**Vlastnosti RAM**==: rychlá, ==**volatilní**== (po vypnutí se obsah **navždy ztratí**), ==**náhodný přístup**== (Random Access). Slouží jen ke **krátkodobému uložení** — narozdíl od HDD/SSD, které informace udrží i bez napájení.
### Sběrnice (bus)
==**Vodiče propojující všechny části**==. Viz [[04 - Sbernice a komunikace periferii\|otázka 4]]:
- ==**datová**== — přenáší data
- ==**adresová**== — přenáší adresy
- ==**řídicí**== — přenáší řídicí signály
### Vstup/výstup (I/O)
Komunikace s ==**periferiemi**== (klávesnice, myš, disk, monitor...). Přes ==**IRQ, DMA, I/O porty**==.
### Instrukční cyklus (Fetch-Decode-Execute)
==**Základní opakující se cyklus CPU**==:
1. ==**Fetch**== — ==**načti instrukci z paměti**== (adresa z PC)
2. ==**Decode**== — ==**dekóduj**==, co instrukce znamená
3. ==**Execute**== — ==**proveď**== (ALU, paměť, registry)
4. ==**Writeback**== — uložit výsledek
5. ==**Increment PC**== — posunout na další instrukci
6. ==**Opakování**==
### Princip činnosti počítače (podle von Neumanna)
1. Přes ==**vstupní zařízení**== se přes ALU **umístí do paměti program**
2. Stejným způsobem se do paměti umístí ==**data ke zpracování**==
3. ==**ALU provádí výpočet**==, řízena řadičem; mezivýsledky se ukládají do paměti
4. Po skončení se výsledky pošlou přes ALU na ==**výstupní zařízení**==
---
## c) Non von Neumann architektury
### Harvardská architektura
Navrhl ==**Howard Aiken**== ve **30. letech** na **Harvardské univerzitě**. Tehdejší technologie ji neumožnila realizovat → převzala se von Neumannova. Asi po **40 letech** (s pokrokem integrovaných obvodů) byla realizována — první **signálový procesor s harvardskou architekturou** v 80. letech.
==**Hlavní rozdíl: oddělená paměť pro program a data**==. Pro programovou paměť lze použít např. ==**ROM**== (Read Only Memory). Oproti von Neumannovi umožňuje ==**zdvojnásobení paměti**==.
| | Von Neumann | ==**Harvardská**== |
|---|---|---|
| Paměť | **jedna společná** | **dvě oddělené** (program + data) |
| Sběrnice | jedna | **dvě** (program + data) |
| Rychlost | sériová (bottleneck) | **paralelní přístup** |
| Instrukce jako data? | **ano** (lze měnit za běhu) | **ne** |
| Použití | desktop, server | ==**mikrokontroléry, DSP, embedded**== |
### Modifikovaná Harvardská (dnešní CPU)
Moderní CPU ==**kombinují oba přístupy**==:
- ==**Cache L1 je oddělená**== na **L1i (instructions)** a **L1d (data)** → Harvardský princip
- ==**Hlavní RAM je společná**== → von Neumannův princip
### Další non-Von Neumann architektury
- ==**Neuronové počítače**== — založené na **učení neuronových sítí**
- ==**Paralelní systémy**== — ==**multiprocesorové systémy**==
- ==**Kvantové počítače**== — qubity místo bitů
### Bottleneck (úzké hrdlo) von Neumannovy architektury
> [!warning] „Von Neumann bottleneck"
> ==**Jedna sběrnice mezi CPU a RAM = úzké hrdlo**==. CPU často čeká na data z paměti. Řešení:
> - ==**Cache hierarchy**== (L1/L2/L3)
> - ==**Prefetching**==
> - ==**Pipelining**==
> - ==**Modifikovaná Harvardská**== (oddělené L1)
---
## Shrnutí
> [!summary] Co si pamatovat
> **a) Von Neumann (1945):** ==**5 modulů — paměť (společná pro program i data), ALU, řadič, vstup, výstup**==, propojené **sběrnicemi**. Sekvenční zpracování, univerzálnost, dvojková soustava, paměťové buňky s adresami.
> **b) Části:** ==**Procesor = řadič + ALU**==, CPU = procesor + RAM. **ALU** (sčítačky, násobičky, komparátory). **Řadič** (řídicí signály ↔ stavová hlášení). **Registry** (PC, IR, ACC, Flag). **RAM** (volatilní). ==**Instrukční cyklus: Fetch → Decode → Execute → Writeback**==.
> **c) Non-Neumann:** ==**Harvardská**== (Howard Aiken, 30. léta) = **oddělená paměť** pro program a data → zdvojnásobení paměti, ROM pro program (embedded, DSP). Dále: **neuronové počítače, paralelní systémy, kvantové**. **Moderní CPU** = ==**modifikovaná Harvardská**== (L1i + L1d, ale společná RAM).