Cobweb

slama.dev

Cobweb

Poznámky Icon 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
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
ztrátovost analogového přenosu

Digitální přenos

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í
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)
      referenční přenos (barvy ukazují způsoby, jakými lze signál vést do cíle)
  2. 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)
      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
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
RS-232

Značení

inverzní logika
inverzní logika

Komunikační protokol

řadič (controller)
ř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
slave/master přenos

Připojení

sběrnice
sběrnice

implementace sběrnice
implementace sběrnice

I2C\text{I}^2 \text{C} (Inter Integrated Circuit)

I2C sběrnice
I2C sběrnice

komunikace v I2C
komunikace v I2C

struktura přenosu I2C
struktura přenosu I2C

I2C zařízení (ambient light sensor)
I2C zařízení (ambient light sensor)

Paměť

Jednotky

paměťadresový prostorv reálu
1kB1 kB10b10b16b16b prostor ~ 64kB64 kB adres
1MB1 MB20b20b24b24b prostor ~ 16MB16 MB adres
1GB1 GB30b30b32b32b 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ěť
PCF8570 paměť

Instrukce a architektury

architektura s instrukcemi
architektura s instrukcemi

struktura instrukcí
struktura instrukcí

jak to funguje doopravdy
jak to funguje doopravdy

Endianita

endianita
endianita

Harvard ×\times von Neumann

Harvardvon Neumann
paměťdata + kód jsou na rozdílných sběrnicíchdata + kód jsou na stejné sběrnici
využitímikročipypočí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
sčítací (odčítací) blackbox

1
2
3
4
5
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í

operacex86/x64ARM (mobily)μC\mu C6502
*anoanomožnáne
//anomožnánelmao

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#      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
struktura floating-point čísla

x86/x64ARM (mobily)μC\mu C6502
HWHW/SWSWSW
IEEE 754
Ošklivá čísla
Speciální hodnoty

Paměti ROM

typwriteread
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)
Harvard počítač (s GPIO)

Permanentní datové úložiště

HDD

HDD
HDD

Výhody
Nevýhody
CD / DVD / BLURAY

CD
CD

Řadiče pro úložiště

Adresování, soubory

struktura paměti
struktura paměti

V Pythonu

Soubory
Byty

Šestnáctkový výpis

Reprezentace obrazu

obrázek v počítači
obrázek v počítači

Pixel

čípky v oku
čí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?