1. diel - Princípy fungovania počítačov alebo ako to vlastne funguje
V tejto sérii postupne predstavím základnú znalosť o fungovaní počítačov. Skúsim vám vyvrátiť námietky k tejto problematike ako sú:
Na čo je mi to dobré?
Predsa budem programovať dosť vysoko, aby som na bit nenarazil ...
Mamička mi vždy hovorila, že pointer sú nebezpečné, tak prečo by som sa staral..<>
Ako sa zubár učia anatómii, historik latinčinu, právnik rímske právo, tak aj my by sme sa mali naučiť, na čom vlastne píšeme. Tak smelo do toho
Čo si vlastne predstaviť pod pojmom počítač?
Počítač ako slovo je určite odvodené od počítadlo, niečo počítať. Počítadlo ale také je skôr len akási pamäť. Funguje presne tak, ako by ste od pamäte chceli. Niečo tam zadáte (posuny guličiek) a zostane to tam do doby, než počítadlo prepíšete. Prvá naozaj "počítačový" typ počítadla priviedol na svetlo sveta až Charles Babbage. V roku 1837, 100 rokov pred príchodom moderných počítačov, opísal tzv. Analytical engine. Stroj obsahoval ALU, podmienené vetvenia, cykly, pamäť ... Všetky tieto termíny budú vysvetlené podrobne neskôr.
Motivácia pre nový vynález
Ponúka sa otázka, čo ho k tvorbe počítača viedlo? Predstavme si Anglicku 19. storočia. Prudký rozvoj vedy a techniky, Anglicko sa stala veľmocou a kráľovná Viktória ovládala priamo alebo nepriamo takmer tretinu planéty. S tým súvisí jeden nenápadný fakt - dane. Tak prudký rozvoj urobil celkom neporiadok v štátnej správe, ktorá sa chudera musela znova a znova preučiť, ako sa aké dane počítajú.
V tejto situácii si však Charles všimol jednej veľmi dôležitej veci, ktorá je základom akéhokoľvek programovania. Všimol si, že sa učeníci síce musí učiť počítať dane od začiatku, niektoré veci však zostávajú rovnaké. Stále sčítajú, odpočítavajú, násobí, delí. Len sa mení vzorec, podľa ktorého pracujú. Keby sa mu teda podarilo zostaviť prístroj, ktorý by početné operácie robil sám a so zmenou daní by sa zmenila len malá súčasť, bola by to obrovská úspora.
Prečo teda trvalo zavedenie počítača až do 19. storočia? Práve vďaka tejto myšlienke. Už predtým existovali stroje na báze hradidiel, ktoré vám na zadaný vstup vždy vrátili výstup. Napriek tomu to neboli počítače, pretože mali iba "jeden program". Babage bohužiaľ svoj prístroj nikdy nedokončil, však o jeho správnosti a efektivite vieme od dvoch ľudí. Talianskeho matematika Menabrea, ktorý napísal a preložil Babbagovy prednášky do francúzštiny a predovšetkým Ade Lovelace, dcéry romantického spisovateľa Byrona. Ak je Babbage prvý konštruktér počítača, Ada je prvý programátor. Na neexistujúcom stroji dokázala popísať algoritmus, ktorý je korektné a robí z nej právom prvej teoretickú inžinierkou na svete.
Analytical engine bol samozrejme plne mechanický a nedali sa v ňom dobre reprezentovať desatinné, nieto ešte náhodná reálne čísla. Navyše sa nedá hovoriť o ktovieaké portabilitě dát. Na začiatku 19. storočia bola jediná možnosť, ako si odovzdať dáta, buď morseovka, alebo káblový prenos. Strčili ste si lajstre s diagramy do kábla, nasadli na parník v New Yorku a za mesiac to mal váš šéf v Paríži na stole.
Najskôr sa ale venujme prvému bodu - ako vlastne čísla reprezentujeme?
Reprezentácie čísel
Samozrejme všetci poznáme vtipy o tom, že programátori rozmýšľajú len v 0 a 1, ale prečo to tak je? Čo robí z 0 a 1 tak zaujímavé hodnoty?
S príchodom rádia, rozvojom elektriny a optiky sa rozrástli možnosti, ako prenášať jednotlivé údaje. Presuňme sa na začiatok 50. rokov. Keď chceme číslo 5, môže niekto napríklad päťkrát poslať nejaký tón do rádia. Mohli by sme ďalej použiť svetlo. Ale veľmi často sa stáva, že nám do toho vlezie nejaký šum. Ako bankári určite nechceme, aby sa nám menili transakcie zakaždým, keď niekto zapne rušičku či zaprší. Vsadilo sa nakoniec na elektrinu, konkrétne na napätie. Je spojité? Je. Môžem reprezentovať ľubovoľnú hodnotu? V podstate áno. Pre každú hodnotu x dokážeme nájsť x voltov. Chceme 5? Máme 5V. Chceme 4,7? Máme 4,7V. Všetko funguje, ako má.
Prikládok nezaškodí
Predstavme si, že chceme databázu všetkých Číňanov az nich chceme nájsť všetky olympijské atlétmi, ktorí vyhrali medailu v stolnom tenise na olympijských hrách v Pekingu roku 2008. (Pozn. Opomína veľmi neefektívne dotaz) Víťazi boli 3, tzn. 3V. Hry boli v Pekingu roku 2008 = 2kV. Pre predstavu, od 1kV až do 50kVA sa uvádza rozmedzí vysokého napätia - známeho vďaka cedulím na elektrických stožiaroch. Už pri týchto rozdieloch je použitie napätie veľmi neefektívne. Treba nejaká doba, kedy sa napätie zmení a musíte utiecť o desiatky metrov od PC. Tento program už by som nechcel mať na počítači, ale nejaká strediská by s tým problém nemala. Ale otázka, že chceme vyberať z 1 400 000 000 ľudí, tzn. 1,4GV. Čo je nad 800 kV sa udáva ako ultravysoké napätie. U napätie 1,4GV by ste ugrilovali ľubovoľného používateľa a tým tiež bohužiaľ i svojho platiaceho klienta, čo prirodzene nechcete.
S napätím je koniec?
Prenos pomocou napätia však nie je vôbec zlý nápad, len treba trochu doladiť. Je to rýchle, pre malé napätia bezpečné. A povieme preto, že akékoľvek číslo poskladáme z 0 a 1. (Opäť, viac v najbližších dieloch).
Povedzme teda, že 0 V je 0 a 1V je 1. Lenže, máme príliš malé rozpätie, často nám šum na drôtoch (ktoré bohužiaľ nie sú nulové dĺžky a nemožno to zanedbať) a musíme mať väčší rozptyl. Určila sa hodnota 0V a 5V. A určíme si, že čo je nad 3 V je 1 a pod 3 V je 0. No a to je vlastne celá mágia. Každý signál funguje na báze vypnuté (0) - zapnuté (1).
Predsa len, ak nám budú chodiť signály stále okolo 3V, bude to také "divné". A my sa teraz pohybujeme na tak low-level úrovni, že si nemôžeme dovoliť nič divného. (Postavíte ak niekoľkých miliardový biznis na niečom čudnom, ste odvážni) Vznikla preto určitá šedá zóna, niečo nad 2 a pod 4, kam napätie moc neprúdi, buď sa to ustáli na 0, alebo na 1. Niektoré kanály toho dokážu využiť a miesto 2 stavové logiky majú ešte tzv. flow stav. (Nie je to 3. rovnoprávna hodnota!) Teraz sme slovu "divný" dali fancy názov a môžeme ísť ďalej. K čomu je nám vlastne taký stav? To si necháme na nabudúce, až sa budeme baviť o tom, ako sa 0 a 1 šíri a ako ich rozpoznáva počítač. Ukážeme si, že nie je 10011010110101 ako 10011010110101 ...
Pre zvedavé
Malá matematická odbočka na záver. Celá binárne, 0 - 1 aritmetika, stojí na tzv. Boolově algebre.
0 & 0 = 0 0 || 1 = 1 atd...
Ak by ste študovali logiku ako súčasť filozofie, zistili by ste, že existujú aj iné, viac stupňové logiky, ktoré majú tiež svoje využitie. Sovieti skúšali 3 stupňovú logiku pre počítače, ale ukázalo sa to ako slepá ulička. S dvojkami sa totiž lepšie počíta. Schválne, skúste si to.
Říkejte si: 1, 2, 4, 8, 16, ... A teď : 1, 3, 9, 27, 81, ...
Pokiaľ z 8 súčiastok urobím väčší blok, z toho ďalší, naskladajú to na súčiastky po 32 blokoch a tie potom po 16, všetko sa pekne delí na polovice, štvrtiny atď. Má to ešte jednu výhodu. V trojstupňových algebrách máte okrem ANO (1) a NIE (0) ešte hodnotu NEVIEM (2). Vo filozofii sa s tým pracuje skvele, ale v počítači, ktorý vám každú chvíľu musí dať nejakú konkrétnu odpoveď, to naozaj nie je dobrá voľba.