Maturitní otázka č. 1: struktura osobního počítače

Zakreslete základní schéma počítače podle Johna von Neumanna

Schéma von Neumannovy architektury

Tak to by bylo. Jenže obrázkem bychom si měli nechat spíš na konec. Sluší se začít mírným tápáním v historii a objasnit, k čemu je takovéhle schéma dobré.

V době mezi světovými válkami se počítače začaly významně rozvíjet. Byly většinou elektro-mechanické a uměly doopravdy jen počítat; třeba násobit dvě čísla na děrných štítcích a výsledek opět vyhodit na dalším děrném štítku. Oproti počítači - člověku s logaritmickým pravítkem je samozřejmě i to jisté zlepšení. Pro řešení složitějších problémů to ale nestačí: pokud je potřeba provést nějaký výpočet milionkrát za sebou, vyplatí se celý proces automatizovat. V období druhé světové války se začaly objevovat první programovatelné počítače (britský Colossus k lámání šifer, po válce americký Eniac k výpočtu balistických drah střel), které bylo možné nějakým způsobem přestavět pro řešení různých problémů. Vyžadovalo to pořád ale několik dní práce: například Eniac se programoval přepojováním kabelů na řídící desce. Výhodnější se zdá počítač, kterému by před každým výpočtem mohl být zadaný program, podle kterého má počítat: zákazník by ho přinesl na děrných štítcích zároveň s daty, která bude chtít zrovna zpracovat.

Druhé zásadní rozhodnutí byl definitivní přechod k binární aritmetice. První počítače byly často desítkové, což umožňuje snadno číst výsledky pomocí voltmetru. Základní operace jako sčítání jsou ale v desítkové soustavě dost složitá na návrh. Kvůli tomu se počítač dost prodraží, zvlášť když má být programovatelný. Počítání s dvojovými čísly si vystačí s několika jednoduchými logickými operacemi. Navíc, binární signál je z určitého pohledu nejlepší možný co se týče odolnosti proti šumu: data přenášená drátem nebo někam ukládaná budou s velkou pravděpodobností načtena opět správně.

Konečně, pro přehlednost je dobré celý počítač taktovat nějakým centrálním časovačem. Opět to především usnadňuje návrh stroje: kdyby jednotlivé části pracovaly nějak nezávisle, museli bychom je složitě synchronizovat.

Von Neumannova architektura z těchto požadavků docela přímo vychází. Počítač obsahuje paměť, ve které je kromě vstupních dat nahraný i samotný program, který se má provést. K vyjádření programu použijeme nějakou instrukční sadu, protože každý příkaz potřebujeme vyjádřit jako binární číslo a nějakým jednoznačným způsobem popsat operandy, se kterými má příkaz pracovat. Aby bylo možné do paměti ukládat cokoliv, co se nám zamane, rozdělíme ji na spoustu maličkých buněk (nejlépe do bajtů po osmi bitech), které jsou všechny očíslované. Můžeme pak číst z libovolné buňky nebo do ní zapisovat, pokud prostě dáme počítači její číslo; tomu se říká adresování.

Instrukce z paměti čte Control Unit, česky řadič (ale pozor, tenhle český termín se ale používá často v jiném významu) a zadává další příkazy paměti, aby načetl potřebná data ke zpracování. Vše potom předá ALU (aritmeticko-logická jednotka, Arithmetic Logic Unit) a přímo elektronicky ji požádá o výpočet. ALU obsahuje akumulátor, do kterého se tato data uloží, a spoustu různých výpočetních obvodů, které data v akumulátoru zpracují a zpět do něj uloží výsledek. CU potom tenhle výsledek z akumulátoru uloží zpátky do paměti.

Krom toho obsahuje počítač nezbytně nějaké vstupní a výstupní zařízení; při vykonávání určitých instrukcí z nich CU načte data a uloží je do paměti, resp. načte z paměti a předá na výstup. Na obrázku je to nakreslené trochu jinak než v původním von Neumannově plánu, ale to je spíš drobnost.

Možnost libovolného načítání programového kódu za běhu nám přináší to pohodlí, že můžeme spouštět libovolný program z disku (hard disk se nepovažuje za paměť, ale za vstupně-výstupní zařízení). Přináší to bezpečnostní riziko, protože při troše nešikovnosti můžeme omylem spustit libovolná data; na tom jsou založené útoky přetečení zásobníku. Další uplatnění je v ochanách programů proti crackování, kdy kód za běhu nějak přepisuje sám sebe, takže je skoro nemožné ho pochopit.

Ačkoliv se na první pohled může zdát, že tenhle návrh je samozřejmost, každý z dílků celého schématu by šel udělat jinak. Nejen to, současné počítače se von Neumannovy architektury drží jen velmi zhruba.

Není pravda, že procesor čte jen jednu instrukci naráz. V rámci postupu zvaného prefetching načítá několik instrukcí napřed, aby urychlil práci s pamětí. Navíc, načtené instrukce přeuspořádává tak, aby se dobře vykonávaly. Například je schopný provést postupně několik výpočtů nad jedním číslem na vstupu, nebo naopak nechat zároveň různé obvody pracovat s různými daty; to se souhrnně označuje jako pipelining. Procesor má pro komunikaci s pamětí navíc cache (obvykle dvouvrstvou a velkou řádově několik MB), aby se urychlilo opakované načítání z a ukládání do stejného místa. Současné procesory také mají přímo instrukce pro práci s více čísly naráz: je možné tak například jedinou instrukcí vynásobit třísložkový vektor.

Jako alternativa k von Neumannově architektuře se zmiňuje obvykle Harvardská architektura. S ní se setkáme často v mikrokontrolerech. Liší se vlastně v jediném ohledu: počítač obsahuje zvlášť paměť na data a na program. To má smysl, protože na obě paměti bývají různé nároky a je tedy levnější použít různé druhy paměti. Program obvykle nebývá přepisovatelný za provozu. Také můžou být obě paměti pomalejší, protože z nich CU může číst naráz.

Popište základní strukturu osobního počítače

Základní komponenty uvnitř počítače přímo odpovídají výše popsanému schématu: počítač obsahuje procesor na provádění veškerých výpočtů, operační paměť na ukládání dat a programu a nakonec nějaká další vstupně-výstupní zařízení. Všechno je to spojené na základní desce (motherboardu). Komponenty jsou převážně taktované jediným časovačem, ne ale všechny stejně rychle: některé třeba dostávají jen každý druhý hodinový puls. Nejrychleji je taktovaný procesor, o něco pomalejší je paměť a grafická karta. Ty jsou dohromady spojené částí základní desky, která se z historických důvodů označuje jako North Bridge. Z ní vede komunikační rozhraní do druhé, opět o něco pomalejší části, zvané South Bridge, na kterou jsou připojena všechna ostatní zařízení.

Aby se spolu různě taktované komponenty dokázaly vůbec nějak bavit, bývá na komunikačních rozhraních mezi nimi malá paměť - buffer, do kterého se ukládají zprávy, než si je druhá strana bude mít čas přečíst. Smysl to má typicky v případě disku a CD mechaniky, kterým trvá (z pohledu procesoru) občas velmi dlouho, než jsou schopné nějaká data zapsat nebo přečíst.

Moderní grafická karta je počítač v počítači, přestože ji normálně považujeme za výstupní zařízení. Má vlastní procesor, paměť a je taktovaná nezávisle na zbytku počítače. A samozřejmě není jen výstupní: výsledky z karty je možné snadno přečíst a zpracovat opět v procesoru.

Vysvětlete funkci komponent atd.

Tahle podotázka je docela zadarmo, nemíním ji rozebírat.