self-assessment úlohy – dostaneme ke každé přednášce sadu
Harvardská architektura počítače
matematik Charles Babbage vymyslel koncept mechanického počítače – Analytical Engine (v roce 1837), byl plně programovatelný, Turing complete
budeme se zabývat tím, jak v počítači reprezentovat čísla (všechna ostatní data na ně můžeme převést)
informace (data) → čísla → celá čísla → nezáporná celá čísla
zaznamenáme libovolné číslo od nuly do milionu
posledním zjednodušením je přenášení čísel nula/jedna
sériový digitální přenos
mocniny dvojky
diferenciální přenos
řešení problému se dvěma jedničkama / dlouhou jedničkou
vodiče
přijímač se na signál kouká přibližně v polovině bitů
3-stavová logika – funguje na lince, kde umíme rozlišit floating stav, nulu a jedničku
floating stav bychom mohli požadovat za idle stav
my ale chceme fungovat na 2-stavové logice (lince)
může se stát, že se nám vysílání a příjem bitů posune
synchronizaci je možné řešit i pomocí hodinového signálu (clock) – linka vysílající střídavě nuly a jedničky, jednička značí čas čtení (zajišťuje synchronizaci přijímače a vysílače)
co když je hodinový vodič kratší než datový vodič?
linky simplex a duplex
běžné kódování – 0 = nepravda, 1 = pravda
hodiny reálného času – RTC
řadič (controller) – zařízení, které zajišťuje ovládání linky (procesor → linka → řadič → linka → myš)
sériovou myš také potřebujeme nějak napájet
po zapnutí myš pošle inicializační packet (init packet) – není přesně definován
potřebujeme být schopni stisknout klávesu na klávesnici a začít dělat něco jiného
přijímání dat z myši
co dělat s informací 738201600
modifikovaný kód
packet 60 00 00 00 → první byte 01 10 00 00
proč má první byte v 6. bitu jedničku?
abychom ho poznali od ostatních tří bytů a nedošlo ke špatné synchronizaci snímání komunikace myši
bitové operace – obvykle dva argumenty (binární operace)
jak zjistit, jestli je levé tlačítko stisknuté
pohyb myši
potřebujeme magickou operaci, která nám umožní posunout bity
potřebujeme rozlišit posun myši nahoru a doleva → záporná čísla ve formě jedniček a nul
Python ke každému číslu ukládá počet platných bitů, ukládá je jako znaménková čísla
převod 8-bit čísla na 4-bit
převod 4-bit čísla na 8-bit
Harvardská architektura – CPU čte z kódové paměti, čte z datové paměti a zapisuje do datové paměti
zařízení
adresa (address) zařízení na sběrnici (typicky 0 až n)
zařízení je připojené na sběrnici
D1 | D2 | bus |
---|---|---|
x | x | 1 |
x | 1 | 1 |
x | 0 | 0 |
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
– Inter Integrated Circuit
B1 | a1 | B2 | a2 | B3 | a3 | ||
---|---|---|---|---|---|---|---|
write | M | S | M | S | M | S | NAK |
read | M | S | S | M | S | M | NAK |
sestává ze slave address (7-bit) a bitu určujícího směr přenosu
příkazy start integration a stop integration
command register (cmd reg)
counter register = ADC register (analog digital converter)
připojení na sběrnici zajišťuje bus interface – skrze něj máme jako programátoři přístup k registrům
1 kB = 1024 B, 1 MB = 1024 kB, … (pro přehlednost se používají zkratky KiB, MiB, GiB → kibibyte, …)
výrobci disků používají 1 kB = 1 000 B
bity v registru řadiče: 1 bit → 1 latch (4–6 tranzistorů)
paměti DRAM
u naší 256 bytové paměti kódujeme adresu na I2C pomocí tří proměnlivých bitů
pevný začátek adresy, za něj se přidávají hodnoty tří bitů
1 slovo (1 word) – jednotka přenosu/zpracování
obsah naší paměti
Harvardská architektura
instrukce procesoru
program v Pythonu
v programovacím jazyce je proměnná identifikovaná jménem, kdežto ve strojovém kódu adresou
překladač musí zařídit, aby proměnné alokoval na volných pozicích
jak do paměti uložit vícebytovou hodnotu
code memory by měla být non-volatile
von Neumannova architektura
historie počítačů (prezentace) – všechny architektury jsou von Neumannovské
instrukce skoku – nastavím IP na konkrétní hodnotu (nepodmíněný skok – unconditional jump)
je těžké pamatovat si instrukce procesoru a psát přímo strojový kód → pro každý procesor se vymyslí tzv. assembler (assembly code)
je důležité chápat rozdíl mezi textovým zápisem assembleru a samotným strojovým kódem
registry procesoru
a = b + c
dva typy LOAD
instrukce kopírování mezi registry (transfer)
např. kopírování X → A by se zapsalo jako TXA
registry
dva typy registrové architektury
8bitové sčítání
instrukce ADC (add with carry)
odčítání
taktovací frekvence (clock rate) – dnes v řádu GHz
v jazycích C/C# může nastat aritmetické přetečení (arithmetic overflow)
procesory x86 a x64 mají operace násobení a dělení
shift left funguje jako násobení mocninou dvojky
reprezentace reálných čísel
floating-point
jednočip/microcontroller/C/MCU
von Neumannovská architektura
pevný disk / hard disk drive (HDD)
CD/DVD/BluRay
řadič DVD
řadič HDD (HDC = Hard Drive Controller)
řadič pevných disků se ovládá podobně jako řadič DVD, dostává LBA adresu
chceme na disk ukládat soubory
na binárním souboru máme funkci read, které zadáme, kolik bytů chceme přečíst
MIDI soubor – zápis not (není uložen zvuk)
začátky a konce not
nejjednodušší
jeden bajt na pixel
bylo by hezké zaznamenávat obrázky, kde jsou oba extrémy (a u těchto extrémů ukazovat detaily)
frekvence může být 0,00… (nenulová) až nekonečno
obvykle nás zajímá viditelné světlo
v oku
16-bit RGB
24-bit RGB
32-bit ARGB
metadata obrázku
jak uložit pixel
formát BMP
znak
kódování
rasterizace textu
převod kód → obrázek (znak)
kódování
nejběžnější kódování
zalomení řádku
Unicode (v podstatě nepoužívané)
textový soubor jako posloupnost bytů
chceme uložit binární soubor s textem (ale také dalšími daty)
PCIe
jak oslovovat zařízení na systémové sběrnici?
zvuková karta
řadič sběrnice
grafická karta
jak dostat kód na von neumannovskou architekturu
jádro operačního systému (kernel)