slama.dev

Principy Počítačů

Úvodní informace

Tato stránka obsahuje moje poznámky z přednášky Pavla Ježka z akademického roku 2019/2020 (MFF UK). Pokud by byla někde chyba/nejasnost, nebo byste rádi něco přidali, tak stránku můžete upravit pull requestem (případně mi dejte vědět na mail).

Zjednodušené schéma počítače

Harvardská architektura

Historie

Charles Babbage (1837)

Ada Lovelace

Kódování informace v počítači

Analogový přenos

ztrátovost analogového přenosu

Digitální přenos

digitální přenos
Sériový přenos
přenos čísla 1011, znázornění odporu vůči změně napájení
  1. měření hodnoty na měřáku
    • nezapomínat na to, že napětí je relativní
referenční přenos (barvy ukazují způsoby, jakými lze signál vést do cíle)
  1. měření rozdílu napětí dvou vodičů
    • výhoda – elektromagnetické rušení signál neovlivňuje, jelikož rozdíl je relativní
diferenciální přenos (vlevo); USB konektor (vpravo)
MSb/LSb odbočka

Dohoda přenosu

Řešení (1): nový stav

  1. odpojení vodiče = floating state (plovoucí stav)
    • lze detekovat, že je linka odpojena
    • není to ideální, moc se nepoužívá
  2. idle stav
    • na začátku je linka idle (tzn. přenos neprobíhá)
    • používá RS-232
    • start dohodou, většinou rising edgem (dobře se detekuje), poté držen (většinou 1) start bit
      • start (a end) bit je potřeba – když by to jen vystřelilo, tak by to druhá strana kvůli šumu vůbec nemusela detekovat
    • se startem (rising edge) se synchronizují hodiny
      • nejsou perfektní (mají tendenci se rozcházet) – omezení přenosu na nn bitů, kde nn je konstanta (v reálu 8b=1B8b = 1B)
        • pozn.: 1B1B jsou 2 šestnáctkové znaky
    • velký overhead… z 10b10b je jen 8b8b datových… 1000clock8/10start + end=800 bps\underbrace{1000}_{\text{clock}} \cdot \underbrace{8/10}_{\text{start + end}} = 800\ bps
přenos s idle stavem

Řešení (2): hodinový signál

Řešení (3): průběžná korekce

Typy přenosu

  1. half-duplex: 1 datový vodič – zařízení se v přenosu střídají
    • komplikované
    • nikdy nelze posílat najednou oběma směry
  2. full duplex: 2 nezávislé simplexí linky
    • např. RS-232 – 2 datové + 1 zem
RS-232

Značení

inverzní logika

Komunikační protokol

řadič (controller)

Binární odbočka

Operace

Záporná čísla

Řada způsobů, jak to dělat (špatně):

  1. jako celá čísla, ale první bit je znaménko
    • docela k ničemu – žádné normální bitové operace na to nefungují (sčítání, odčítání, porovnání…)
  2. one’s complement (jedničkový doplněk) – u záporných se prohodí 1 a 0
    • funguje porovnání (kladné x kladné a záporné x záporné) a sčítání
    • problematické: máme dvě nuly
  3. two’s complement (dvojkový doplňek) – MSb je znaménkový bit, záporných je o 1 víc
    • negace čísla je flipnutí všech bitů a přičtení jedničky
    • řeší to problém se dvěma nulami (negace dá jedničky a přičtení overflowne zpět na 00)
    • rozsah je 2n1-2^{n - 1}2n112^{n - 1} - 1 (asymetrické…)

Čísla v Pythonu

Implementace

Převody mezi soustavami

Převody mezi datovými typy

Otročina

slave/master přenos

Připojení

sběrnice
implementace sběrnice
I2C\text{I}^2 \text{C} (Inter Integrated Circuit)
I2C sběrnice
komunikace v I2C
struktura přenosu I2C
I2C zařízení (ambient light sensor)

Paměť

Jednotky

paměť adresový prostor v reálu
1kB1 kB 10b10b 16b16b prostor ~ 64kB64 kB adres
1MB1 MB 20b20b 24b24b prostor ~ 16MB16 MB adres
1GB1 GB 30b30b 32b32b prostor ~ 4GB4 GB adres

Typy paměti RAM

SRAM (static RAM)
DRAM (dynamic random access memory)

Co je to jsoucno slovo?

  1. správná definice – jednotka přenosu
    • pro nn-bitové zařízení je to nn-bitové slovo
    • pro 8b8b paměť to např. znamená, že lze vyžádat pouze 8b8b
  2. špatná definice16b16b (dáno historicky)
    • double word (dword) = 32b32b
    • quad word (qword) = 64b64b

Rozbor PCF8570 SRAM paměti

PCF8570 paměť

Instrukce a architektury

architektura s instrukcemi
struktura instrukcí
jak to funguje doopravdy

Endianita

endianita

Harvard ×\times von Neumann

  Harvard von Neumann
paměť data + kód jsou na rozdílných sběrnicích data + kód jsou na stejné sběrnici
využití mikročipy počítače

Historie CPU architektur

Assembler

Příznakový registr CPU

6502 – akumulátorová architektura

Sčítání a odčítání
sčítací (odčítací) blackbox
A - X - B              // odečítání X a borrow od A
A - X - B + 256        // 256 je obecně n-bit
A - X - (1 - C) + 256  // použití carry flagu
A + (255 - X) + C
A + NOT(X) + C

x86

Příklady instrukcí
Rychlost operací

Čísla v Pythonu, vol. 2

Násobení a dělení

operace x86/x64 ARM (mobily) μC\mu C 6502
* ano ano možná ne
// ano možná ne lmao

Tomášovo odbočka (příklady instrukcí)

#      int a = 5;
movl   $0x5,-0x14(%rbp)

#      int b = a + 5;
mov    -0x14(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x10(%rbp)

#      int c = ~a;
mov    -0x14(%rbp),%eax
not    %eax
mov    %eax,-0xc(%rbp)

#      int d = a * b;
mov    -0x14(%rbp),%eax
imul   -0x10(%rbp),%eax
mov    %eax,-0x8(%rbp)

#      int e = a - (b + c) - d;
mov    -0x10(%rbp),%edx
mov    -0xc(%rbp),%eax
add    %eax,%edx
mov    -0x14(%rbp),%eax
sub    %edx,%eax
sub    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    $0x0,%eax

#      int f = a | (b & c) ^ d & e;
mov    -0x18(%rbp),%eax
and    -0x14(%rbp),%eax
mov    %eax,%edx
mov    -0x10(%rbp),%eax
and    -0xc(%rbp),%eax
xor    %edx,%eax
or     -0x1c(%rbp),%eax
mov    %eax,-0x8(%rbp)

#      int g = e << 10 + f >> 10;
mov    -0x8(%rbp),%eax
add    $0xa,%eax
mov    -0xc(%rbp),%edx
mov    %eax,%ecx
shl    %cl,%edx
mov    %edx,%eax
sar    $0xa,%eax
mov    %eax,-0x4(%rbp)
mov    $0x0,%eax

#      short g = f;
mov    -0x8(%rbp),%eax
mov    %ax,-0x1e(%rbp)

Reálná čísla

Fixed-point

Floating-point

struktura floating-point čísla
x86/x64 ARM (mobily) μC\mu C 6502
HW HW/SW SW SW
IEEE 754
Ošklivá čísla
Speciální hodnoty

Paměti ROM

typ write read
ROM (Read Only Memory) 11 (výrobce) \infty
PROM (Programable ROM) 11 (vypálení) \infty
EPROM (Erasable PROM) \infty \infty
EEPROM (Electrically EPROM) \infty \infty
Harvard počítač (s GPIO)

Permanentní datové úložiště

HDD
HDD
Výhody
Nevýhody
CD / DVD / BLURAY
CD
Řadiče pro úložiště

Adresování, soubory

struktura paměti

V Pythonu

Soubory
Byty

Šestnáctkový výpis

Reprezentace obrazu

obrázek v počítači
Pixel
čípky v oku
Ukládání do paměti
BMP

Reprezentace textu

ASCII
Unicode
Rasterizace

Dokončení rozdělané magie

Systémová sběrnice

Memory/mapped I/O [wiki]
Co dělat po startu?