Lekce 1 - Principy fungování počítačů aneb jak to vlastně funguje
V této sérii postupně představím základní znalost o fungování počítačů. Zkusím vám vyvrátit námitky k této problematice jako jsou:
K čemu je mi to dobré?
Přeci budu programovat dost vysoko, abych na bit nenarazil...
Maminka mi vždycky říkala, že pointery jsou nebezpečné, tak proč bych se staral.
Jako se zubař učí anatomii, historik latinu, právník římské právo, tak i my bychom se měli naučit, na čem vlastně píšeme. Tak směle do toho
Co si vlastně představit pod pojmem počítač?
Počítač jako slovo je jistě odvozené od počítadlo, něco počítat. Počítadlo ale takové je spíše jen jakási paměť. Funguje přesně tak, jak byste od paměti chtěli. Něco tam zadáte (posuny kuliček) a zůstane to tam do doby, než počítadlo přepíšete. První opravdu "počítačový" typ počítadla přivedl na světlo světa až Charles Babbage. V roce 1837, 100 let před příchodem moderních počítačů, popsal tzv. analytical engine. Stroj obsahoval ALU, podmíněné větvení, cykly, paměť... Všechny tyto termíny budou vysvětleny podrobně později.
Motivace pro nový vynález
Nabízí se otázka, co ho k tvorbě počítače vedlo? Představme si Anglii 19. století. Prudký rozvoj vědy a techniky, Anglie se stala velmocí a královna Viktorie ovládala přímo či nepřímo téměř třetinu planety. S tím souvisí jeden nenápadný fakt - daně. Tak prudký rozvoj udělal docela nepořádek ve státní správě, která se chuděra musela znovu a znova přeučovat, jak se jaké daně počítají.
V této situaci si však Charles všiml jedné velmi důležité věci, která je základem jakéhokoliv programování. Všiml si, že se učedníci sice musí učit počítat daně od začátku, některé věci však zůstávají stejné. Pořád sčítají, odčítají, násobí, dělí. Jen se mění vzorec, podle kterého pracují. Kdyby se mu tedy podařilo sestavit přístroj, který by početní operace dělal sám a se změnou daní by se změnila jen malá součást, byla by to obrovská úspora.
Proč tedy trvalo zavedení počítače až do 19. století? Právě díky této myšlence. Už předtím existovaly stroje na bázi hradidel, které vám na zadaný vstup vždy vrátily výstup. Přesto to nebyly počítače, neboť měly pouze "jeden program". Babage bohužel svůj přístroj nikdy nedokončil, však o jeho správnosti a efektivitě víme od dvou lidí. Italského matematika Menabrea, který napsal a přeložil Babbagovy přednášky do francouzštiny a především Ade Lovelace, dcery romantického spisovatele Byrona. Pokud je Babbage první konstruktér počítače, Ada je první programátor. Na neexistujícím stroji dokázala popsat algoritmus, který je korektní a dělá z ní právem první teoretickou informatičku na světě.
Analytical engine byl samozřejmě plně mechanický a nedaly se v něm dobře reprezentovat desetinná, natožpak náhodná reálná čísla. Navíc se nedá mluvit o kdovíjaké portabilitě dat. Na počátku 19. století byla jediná možnost, jak si předat data, buď morseovka, nebo kabelový přenos. Strčili jste si lejstra s diagramy do kabele, nasedli na parník v New Yorku a za měsíc to měl váš šéf v Paříži na stole.
Nejdříve se ale věnujme prvnímu bodu - jak vlastně čísla reprezentujeme?
Reprezentace čísel
Samozřejmě všichni známe vtípky o tom, že programátoři přemýšlejí jen v 0 a 1, ale proč tomu tak je? Co dělá z 0 a 1 tak zajímavé hodnoty?
S příchodem rádia, rozvojem elektřiny a optiky se rozrostly možnosti, jak přenášet jednotlivé údaje. Přesuňme se na začátek 50. let. Když chceme číslo 5, může někdo třeba pětkrát poslat nějaký tón do rádia. Mohli bychom dále použít světlo. Ale velmi často se stává, že nám do toho vleze nějaký šum. Jako bankéři určitě nechceme, aby se nám měnily transakce pokaždé, když někdo zapne rušičku či zaprší. Vsadilo se nakonec na elektřinu, konkrétně na napětí. Je spojité? Je. Mohu reprezentovat libovolnou hodnotu? V podstatě ano. Pro každou hodnotu x dokážeme najít x voltů. Chceme 5? Máme 5V. Chceme 4,7? Máme 4,7V. Vše funguje, jak má.
Příkládek nezaškodí
Představme si, že chceme databázi všech Číňanů a z nich chceme najít všechny olympijské atlety, kteří vyhráli medaili ve stolním tenise na olympijských hrách v Pekingu roku 2008. (Pozn. opomiňme velmi neefektivní dotaz) Vítězové byli 3, tzn. 3V. Hry byly v Pekingu roku 2008 = 2kV. Pro představu, od 1kV až do 50kV se uvádí rozmezí vysokého napětí - známého díky cedulím na elektrických stožárech. Už při těchto rozdílech je použití napětí velmi neefektivní. Je třeba nějaká doba, kdy se napětí změní a musíte utéct o desítky metrů od PC. Tento program už bych nechtěl mít na počítači, ale nějaká střediska by s tím problém neměla. Ale dotaz, že chceme vybírat z 1 400 000 000 lidí, tzn. 1,4GV. Co je nad 800 kV se udává jako ultravysoké napětí. U napětí 1,4GV byste ugrilovali libovolného uživatele a tím také bohužel i svého platícího klienta, což přirozeně nechcete.
S napětím je konec?
Přenos pomocí napětí však není vůbec špatný nápad, jen je třeba trochu doladit. Je to rychlé, pro malá napětí bezpečné. A řekneme proto, že jakékoliv číslo poskládáme z 0 a 1. (Opět, více v příštích dílech).
Řekněme tedy, že 0 V je 0 a 1V je 1. Jenže, máme příliš malé rozpětí, často nám šum na drátech (které bohužel nejsou nulové délky a nelze to zanedbat) a musíme mít větší rozptyl. Určila se hodnota 0V a 5V. A určíme si, že co je nad 3 V je 1 a pod 3 V je 0. No a to je vlastně celá magie. Každý signál funguje na bázi vypnuto (0) – zapnuto (1).
Přeci jen, pokud nám budou chodit signály pořád okolo 3V, bude to takové "divné". A my se teď pohybujeme na tak low-level úrovni, že si nemůžeme dovolit nic divného. (postavíte-li několika miliardový byznys na něčem divném, jste odvážní) Vznikla proto určitá šedá zóna, něco nad 2 a pod 4, kam napětí moc neproudí, buď se to ustálí na 0, nebo na 1. Některé kanály toho dokáží využít a místo 2 stavové logiky mají ještě tzv. flow stav. (není to 3. rovnoprávná hodnota!) Teď jsme slovu “divný” dali fancy název a můžeme jít dál. K čemu je nám vlastně takový stav? To si necháme na příště, až se budeme bavit o tom, jak se 0 a 1 šíří a jak je rozpoznává počítač. Ukážeme si, že není 10011010110101 jako 10011010110101...
Pro zvídavé
Malá matematická odbočka na závěr. Celá binární, 0 – 1 aritmetika, stojí na tzv. Boolově algebře.
0 & 0 = 0 0 || 1 = 1 atd...
Pokud byste studovali logiku jako součást filosofie, zjistili byste, že existují i jiné, více stupňové logiky, které mají také své využití. Sověti zkoušeli 3 stupňovou logiku pro počítače, ale ukázalo se to jako slepá ulička. S dvojkami se totiž lépe počítá. Schválně, zkuste si to.
Říkejte si: 1, 2, 4, 8, 16, ... A teď : 1, 3, 9, 27, 81, ...
Pokud z 8 součástek udělám větší blok, z toho další, naskládám to na součástky po 32 blocích a ty pak po 16, vše se hezky dělí na poloviny, čtvrtiny atd. Má to ještě jednu výhodu. V třístupňových algebrách máte kromě ANO (1) a NE (0) ještě hodnotu NEVÍM (2). Ve filosofii se s tím pracuje skvěle, ale v počítači, který vám každou chvíli musí dát nějakou konkrétní odpověď, to opravdu není dobrá volba.