Jak pracuje počítač?

27. 2. 2008
Doba čtení: 15 minut

Sdílet

Tento delší článek je určen pro ty uživatele počítačů, které zajímá, jak počítače ve skutečnosti pracují, tj. co se uvnitř počítačů děje. Nejdříve si popíšeme von Neumannovu i Harvardskou architekturu, roli aritmeticko-logické jednotky, řadiče, operační paměti i vstupní a výstupní zařízení.

Obsah

1. Jak pracuje počítač?
2. Von Neumannova architektura počítačů
3. Harvardská architektura počítačů
4. Řadič
5. Aritmeticko-logická jednotka (ALU)
6. Operační paměť
7. Vstupní a výstupní zařízení
8. Schéma a základní funkce kanonického počítače
9. Obsah následující části tohoto článku

1. Jak pracuje počítač?

Mnoho uživatelů počítačů i začínajících programátorů si klade otázku, jak vlastně jejich počítač ve skutečnosti pracuje. Pro někoho se jedná o skoro zázračnou, ale přesto stále zlobící bedýnku, ve které jsou v jakýchsi barevných okénkách schovány všechny jejich dokumenty (pokud se tedy zrovna „někam samy neztratily“) i programy a zezadu jsou „připojené ty Internety“ (na druhou stranu je nutné uznat, že se v mnoha případech jedná o docela praktický přístup). Dále existují odborníci, kteří počítačům do hloubky rozumí, dokážou například připojit na jejich sběrnici logický analyzátor či digitální multikanálový osciloskop, a přesně pochopit, co se zrovna v počítači děje. Další zase rádi pracují s „holým železem“, tj. tvoří či upravují programy na té nejnižší úrovni, tj. v assembleru a ti nejotrlejší dokonce přímo ve strojovém kódu.

pc0101

Pohled do moderního osobního počítače s vyznačením některých jeho důležitých součástí

Pro ty ostatní z vás, které by zajímalo, jak počítače uvnitř pracují, co je to například mikroprocesor a jak se ovládá pomocí strojového kódu, je určen právě tento článek, na který bude navazovat několik tématicky zaměřených pokračování. Už dopředu je možné říci, že je zajímavé, že počítače, především ty osobní, jsou sice velmi složitá elektronická zařízení, která však pracují na několika základních principech, jež se dají poměrně jednoduše vysvětlit. V osmé kapitole si řekneme, jak by mohl vypadat hypotetický velmi jednoduchý (kanonický) počítač, jehož poměrně věrným obrazem byl například legendární počítač ZX80 či jeho následovník ZX81.

pc0102

Zjednodušené schéma relativně moderního osobního počítače s čipovou sadou rozdělenou na takzvaný North bridge a South bridge

Při pohledu do vnitřností běžného osobního počítače můžeme spatřit poměrně velké množství různých součástí, které jsou mezi sebou propojeny několikavodičovými kabely. Jedná se o pevné disky, optické jednotky (CD či DVD mechaniku), někdy také disketovou jednotku a grafickou kartu, popř. i jiné přídavné karty. Tou nejdůležitější částí počítače je však základní deska a na ní umístěné součástky – mikroprocesor a operační paměť.

Jaký byl váš první počítač?

Především v minulosti se architektury počítačů rozdělovaly na von Neumannovu a Harvardskou. Dnes se tento rozdíl poněkud smývá, protože některé moderní počítače převzaly určité části svého uspořádání z obou architektur, ale pro účely vysvětlení základů funkce počítačů si přesto obě architektury v následujících dvou kapitolách popíšeme.

pc0103

Xbox používá interně stejný typ uspořádání jednotlivých modulů jako běžné osobní počítače

2. Von Neumannova architektura počítačů

Při návrhu většiny počítačových systémů se používá takzvaná von Neumannova architektura. Ta je založená na jednoduché, ale nesmírně důležité myšlence: počítač zpracovává nějaká data pomocí programu, který je sám o sobě také reprezentován daty. To znamená, že programy je možné libovolně měnit a modifikovat – počítač je programovatelný, nemá předem pevně danou funkci a tudíž je neuvěřitelně flexibilní, protože pouhou změnou programu (tedy dat) se může funkce počítače radikálně změnit. Tato myšlenka von Neumanna natrvalo ovlivnila prakticky celý IT průmysl a i když se může na nějaký čas zdát, že je překonaná (architektury data flow atd.), neustále se k ní vracíme.

pc0104

V minulosti se počítače neprogramovaly přímo, ale pomocí děrných štítků (se zařízeními na zpracování děrných štítků začala obchodovat firma IBM, která na nich postavila své první úspěšné projekty)

Může se zdát, že se jedná o tak základní a snad i přirozenou myšlenku, že se jí řídili všichni výrobci počítačů. Není to však úplně pravdivé, protože například první elektronický počítač ENIAC byl postaven na zcela odlišném principu. Jeho tvůrci ze začátku chtěli, aby byl program uložen v trvalé paměti, která byla v té době představována děrnou páskou. Ukázalo se však, že řídicí i výpočetní jednotka jsou tak rychlé (i když o rychlosti se dá v porovnání s dneškem těžko mluvit), že by neustálé načítání jednotlivých programových instrukcí (páska byla na konci slepená, takže se dala neustále přetáčet) celý výpočet zpomalovalo, což v době neskutečně drahého provozu nebylo akceptovatelné.

Místo toho byl tedy program „zadrátován“ a to doslova – pomocí kilometrů drátů propojujících jednotlivé moduly počítače. Že byla oprava či modifikace programu velmi složitá, je asi zřejmé. Teprve počítače stavěné po druhé světové válce byly založeny na von Neumannových teoriích.

pc0105

Pohled na relativně malou část legendárního ENIACu

Vraťme se však k von Neumannově architektuře. Ve své obecnosti není vůbec složitá. Celý počítač se skládá z pěti koncepčních bloků. Jedná se o operační paměť, ve které je uschován jak program, tak i data, se kterými program pracuje. Dále se zde nachází programový řadič řídící celý počítač a aritmeticko-logická jednotka, ve které jsou vykonávány, jak již název naznačuje, aritmetické a logické operace s registry nebo přímo místy v paměti.

Poslední dva bloky, tj. vstupy a výstupy jsou představovány jednotlivými zařízeními, která se k počítači připojují. V tom nejjednodušším případě se může jednat například o LED-diody na výstupu a několik tlačítek na vstupu, stejně tak se však k počítači mohou připojit inteligentní řadiče disků, grafické subsystémy, různá čidla (počítače v autech jich obsluhují i několik desítek) atd. Funkce jednotlivých bloků zobrazených na schématickém obrázku bude vysvětlena v dalších kapitolách.

pc0106

Von Neumannova architektura počítače

3. Harvardská architektura počítačů

Druhým typem architektury počítačů je takzvaná Harvardská architektura. Ta ve své podstatě vznikla mírnou modifikací architektury předchozí. Jedinou odlišností je to, že paměť určená pro data je oddělená od paměti určené pro úschovu vlastního programu. To má za následek jednak zrychlení práce celého počítače, protože je možné současně číst instrukce z paměti programu a pracovat i s pamětí dat (zapisovat či do ní číst), za druhé může být paměť pro program vyrobena odlišnou technologií, například se může jednat o paměť typu ROM, PROM, EPROM či FLASH (rychlá EEPROM).

Pro některé aplikace, ve kterých je počítač ovládán stále tím stejným programem, se jedná o poměrně vhodné řešení, na druhou stranu je však obtížně použitelné u počítačů určených pro řešení obecných úloh – typickým příkladem jsou domácí a osobní počítače, u kterých není předem zřejmé, jaké programy či jejich verze na nich poběží.

Harvardská architektura byla oblíbená především u počítačů, které vznikly v šedesátých letech a začátkem sedmdesátých let minulého století a také u mnohem později vzniklých mikrořadičů (microcontroller). Tímto termínem se označují mikroprocesory, ke kterým byla do jednoho pouzdra přidána i operační paměť (RAM/RWM), paměť pro programy a neměnná data (ROM) i řadiče sběrnice.

Takto vzniklá elektronická součástka je do značné míry soběstačná – většinou začne pracovat po připojení napájení, hodinových pulsů a přivedení signálu RESET na příslušný pin (vývod, nožičku součástky), což je velký rozdíl oproti běžným mikroprocesorům, které ke své činnosti vyžadují mnohdy velké množství dalších podpůrných obvodů. I tématem mikrořadičů, které dnes představují největší objem na trhu programovatelných součástek a v běžné domácnosti je jich v různých zařízeních instalováno několik desítek až stovek, se budeme v dalších částech tohoto článku podrobněji zabývat.

pc1907

Programování ENIACu bylo pravděpodobně zdlouhavější než v moderních IDE

4. Řadič

Řadič slouží, jak již ostatně jeho název napovídá, k řízení všech dalších částí počítače, a to jak ve von Neumannově architektuře, tak i v architektuře Harvardské. Řízení je prováděno na základě programu uloženého buď v operační paměti (von Neumannova architektura), nebo v jiném typu paměti (Harvardská architektura). Z paměti je vždy do řadiče načtena jedna programová instrukce a řadič na základě obsahu této instrukce, tj. konkrétního povelu, řídí další moduly. Například při přijetí instrukce pro načtení operandu z paměti je operand skutečně načten a uložen do registru v aritmeticko-logické jednotce, při přijetí instrukce pro sečtení dvou čísel je opět instruována aritmeticko-logická jednotka, že má tuto operaci provést, atd. (více informací si řekneme příště při vysvětlování úlohy strojového kódu).

Ve starších počítačích, které ještě neobsahovaly mikroprocesor, se řadiče většinou skládaly buď z diskrétních elektronických součástek, tj. z elektronek (diod, triod) nebo tranzistorů a diod, či z několika integrovaných obvodů. V sedmdesátých letech minulého století se však spolu se vznikem mikroprocesorů řadiče „přestěhovaly“ právě do těchto složitých elektronických součástek s velkou integrací, takže nastala situace, kdy se rozlišení mezi řadičem a aritmeticko-logickou jednotkou, popř. dalšími moduly von Neumannovy architektury, začalo poněkud zmenšovat.

Mikroprocesory velkou měrou přispěly k rozšíření počítačů prakticky do všech oborů lidské činnosti, což jsme si připomněli v článku „Jak se zrodil procesor?“ uveřejněného ve dne kulatého výročí vzniku mikroprocesorů.

pc1908

Řadič nemusí být nutně elektronický – v dávné minulosti se používaly i mechanické řadiče (legendární počítač Z1)

5. Aritmeticko-logická jednotka (ALU)

Aritmeticko-logická jednotka, neboli ALU (Arithmetic and Logic Unit) slouží k provádění veškerých výpočtů s operandy, které jsou načteny z operační paměti (nebo i paměti programu v případě Harvardské architektury). Mezi základní operace, které jsou implementovány prakticky ve všech počítačích, patří sčítání a odčítání celých čísel, bitový logický součet, bitový logický součin, bitová negace a bitový posun (shift) doprava i doleva. Složitější mikroprocesory a digitální signálové procesory (DSP) obsahují ALU, která provádí i další operace, například násobení a dělení nebo výpočty s čísly uloženými ve formátu plovoucí řádové čárky (floating point).

Vlastnosti aritmeticko-logické jednotky do značné míry určují i vlastnosti celého počítače. Jedná se například o takzvanou bitovou šířku či šířku slova. V tomto případě už však předpokládáme, že počítač pracuje s dvojkovou soustavou, tj. jednotlivými bity, což nemusí být vždy pravda – některé starší počítače, resp. jejich procesory, například pracovaly přímo v desítkové soustavě.

Většina domácích počítačů, o nichž ještě bude v dalším textu řeč, používala osmibitové mikroprocesory, jejichž ALU dokázala v jedné instrukci zpracovat celá čísla (integer) o délce osmi bitů, tj. v rozsahu pouhých –128 až 127 nebo 0 až 255. Všechny operace s většími čísly musely být naprogramovány, což vedlo ke zpomalení práce – pokud ovšem nebereme v úvahu delší čas výpočtu, je možné na osmibitových mikroprocesorech (resp. osmibitových ALU) provádět i výpočty například s čísly uloženými ve formátu pohyblivé řádové čárky, nebo i výpočty s libovolnou přesností. Pozdější mikroprocesory měly šestnáctibitové ALU, třicetidvoubitové ALU a dnes dokonce čtyřiašedesáti­bitové aritmeticko-logické jednotky, což by již mělo pro většinu problémů řešených na počítačích více než dostačovat.

pc0109

Konrad Zuse u makety svého mechanicko-elektronického počítače Z1

6. Operační paměť

Operační paměť (nebo obecně pouze paměť) plní u počítačů dvojí roli. Paměť slouží samozřejmě k dočasné či trvalé úschově dat, se kterými výpočty probíhají (výpočtem může být například i posun hráče ve hře, vykreslení webové stránky, poslání e-mailu atd.), ovšem její druhá role je neméně důležitá – v operační paměti jsou uloženy i operační kódy („opkódy“) jednotlivých strojových instrukcí, které jsou načítány do řadiče, který na základě jejich hodnot řídí celý počítač.

Program, neboli funkce, kterou počítač provádí, tedy není napevno „zadrátován“, ale jedná se o zcela regulérní data. Ostatně i tvorba programů se podobá vytváření běžných textových dokumentů, ovšem za použití jiného jazyka (pomineme teď následný překlad nebo převod do bytekódu). Množina všech povolených operačních kódů se liší podle typu použitého procesoru a do značné míry ovlivňuje způsob programování na té nejnižší úrovni, tj. na úrovni strojového kódu a assembleru. Více si o problematice pamětí, zejména jejich typech a technologických principech, řekneme v dalších částech seriálu.

pc0110

V roli paměti typu ROM se v minulosti používaly i děrné pásky

7. Vstupní a výstupní zařízení

Vstupní zařízení slouží pro vstup dat do počítače a výstupní zařízení pro jejich výstup (žádné překvapení se zde nekoná). Vstupní data mohou mít různou podobu: může se jednat o nekonečné sloupce čísel (tak si před několika málo lety představovala počítače většina lidí, stačí si zalistovat například tehdejším denním tiskem), textové dokumenty, programy, obrázky, video, teplota motoru, tlak ve válcích atd. – prostě veškerý obsah, který je možné nějakým způsobem zdigitalizovat, tj. převést na množinu bitů. Digitalizace je nutná, protože se data ukládají do operační paměti nebo jsou přímo načítána do aritmeticko-logické jednotky. Podoba výstupních dat je také velmi různorodá a je samozřejmě závislá na použitém výstupním zařízení (displeje, tiskárny, audio sestavy, servomotory atd.).

Pokud by byl počítač složen pouze z řadiče, aritmeticko-logické jednotky a paměti, nebyl by nám nic platný, protože by do něj nebylo možné zadávat vstupní data a ani žádná data získat nazpět. Z tohoto důvodu i ty nejjednodušší počítače nějaké vstupy a výstupy obsahují. Například počítač řídící topení v domě má na vstup připojen digitální teploměr (teplotní čidlo) a výstup je tvořen jedním bitovým vodičem, kterým se (přes relé nebo elektronický prvek) zapíná a vypíná kotel.

pc0111

Domácí mikropočítač Sinclair ZX80

8. Schéma a základní funkce kanonického počítače

V příští části tohoto seriálu si podrobněji vysvětlíme funkci té nejdůležitější součástky, která dnes dělá počítač počítačem. Jedná se o mikroprocesor. Ovšem již dnes si ukážeme, jak by mohl vypadat hypotetický „kanonický“ počítač, který by byl reálně použitelný pro pokusy i reálnou práci a který by nám současně umožnil plně pochopit práci tohoto počítače.

Takový počítač by měl ve své nejjednodušší podobě umožňovat vstup dat z klávesnice, výstup dat na displej (obrazovku) a měl by být sestaven podle von Neumannovy koncepce. Vzhledem k tomu, že možnosti integrace již v sedmdesátých letech minulého století dosáhly takového stupně, že bylo možné sloučit řadič a aritmeticko-logickou jednotku do jednoho čipu – mikroprocesoru, měl by náš hypotetický počítač obsahovat právě mikroprocesor. Takže si naše požadavky shrňme:

  1. jednoduchá architektura pro snazší pochopení
  2. vstup dat z klávesnice
  3. výstup dat na displej (televizor)
  4. von Neumannova koncepce: mikroprocesor+paměť
pc0112

Domácí mikropočítač Sinclair ZX81

Zajímavé je, že tyto požadavky splňují prakticky všechny osmibitové domácí počítače (home computers). Jednalo se o první typ počítačů, jaký si mohli za poměrně rozumnou cenu (cca 100 tehdejších dolarů) pořídit i běžní lidé nemající přístup do obřích výpočetních center. Samozřejmě, že i před érou domácích počítačů existovali konstruktéři, kteří podobné zařízení vytvořili, ale typicky se jednalo o poměrně nepraktické stroje – místo klávesnice většinou obsahovaly sadu přepínačů a výstup byl tvořen sadou žároviček či LED diod. V našich luzích a hájích se této myšlence přibližoval například známý kit PMI-80.

Vraťme se však k domácím osmibitovým počítačům. Jedním z nejjednodušších počítačů byl Sinclair ZX80 a především jeho slavný následovník Sinclair ZX81. Osobně si myslím, že se jednalo o ideální počítače vhodné pro vysvětlení všech důležitých konceptů, na kterých jsou postaveny i moderní počítače, a je trošku škoda, že se podobná zařízení už na školách (středních a vysokých) nevyskytují a výuka se odvíjí od složitých moderních osobních počítačů, kterým prakticky nikdo nerozumí (například už interní funkce BIOSu jsou patentovány a mnohdy zavání mystikou). Pojďme se podívat, jak slavná ZX81 vypadala uvnitř, což nám dá poměrně přesnou ideu „kanonického“ počítače:

pc0113

Osazený plošný spoj mikropočítače Sinclair ZX81 je opravdu jednoduchý

Vidíme, že počítač obsahuje pouze šest hlavních součástek. Především jde o mikroprocesor, kterým je Z80, přesněji řečeno jeho klon vyráběný firmou NEC (vedle mikroprocesoru se skrývá i krystal s oscilací 6,5 MHz, což je přesně dvojnásobek taktovací frekvence mikroprocesoru). Dále můžeme na plošném spoji vidět dva menší integrované obvody představující paměť typu RAM, tj. paměť, do které se dají zapisovat informace. Důvod, proč jsou použity dva obvody, je jednoduchý – jednalo se totiž o čtyřbitové paměti, tj. pro jejich připojení k osmibitovému procesoru se muselo použít paralelní spojení dvou pamětí. Statické i dynamické paměti RAM se běžně dávaly do obalů s malým počtem vývodů, z toho vyplývají i ony čtyři bity (je totiž výhodnější „obětovat“ vývody na rozšíření adresové sběrnice na úkor sběrnice datové, ale o tom si povíme až někdy příště).

Další součástkou je paměť typu ROM, která obsahovala základní rutiny pro ovládání počítače (zobrazení na televizi, vstup z klávesnice) a především interpret programovacího jazyka BASIC – jde tedy o jednoduchou obdobu dnešních EEPROM pamětí s BIOSem; mimochodem starší počítače PC od IBM také obsahovaly BASIC zapsaný v ROM. Po levé straně se nachází čip ULA, což je zákaznický obvod, který v ZX81 sloužil především ke generování obrazu (k tomu však také využíval mikroprocesor, proto zobrazování poměrně značně zdržovalo běh programů).

V kovové kleci (ta byla nutná kvůli zamezení rušení, protože mezinárodní normy jsou v tomto ohledu docela přísné) je umístěn VF modulátor, protože ZX81 se zapojovala k běžné televizi – jednalo se totiž o dobu, kdy monitor byl v rozumné cenové relaci takřka nedostupný, zato televizor se vyskytoval prakticky v každé domácnosti.

pc0114

Schéma mikropočítače Sinclair ZX81 je opravdu jednoduché (paměť napravo IC4 je ve skutečnosti volitelná náhrada za IC4a a IC4b)

Už na první pohled jsou technické parametry tohoto počítače podprůměrné, zejména při srovnání s počítači dnešními: frekvence mikroprocesoru 3,25 MHz (ne GHz), paměť ROM měla kapacitu 8 KB, statická paměť RAM dokonce v základní konfiguraci pouhý 1 kB, zobrazovalo se v textovém režimu 32×24 znaků ze znakové sady 64 znaků, které pro jistotu ani neodpovídaly normě ASCII, pro což existoval dobrý důvod.

Znaková sada, která byla umístěna přímo v ROM, však obsahovala i znaky vhodné pro tvorbu pseudografiky v rozlišení 64×48 „pixelů“ – jinými slovy se ve znakové sadě nacházely všechny kombinace „čtverců“ z mřížky 2×2, při vhodném naprogramování se však dalo dosáhnout i zobrazování grafiky v rozlišení 256×192 pixelů (majitelé Spectra jistě tato čísla důvěrně znají). I přes velmi malou kapacitu operační paměti (1 kilobyte, tj. 1024 bytů je například délka tohoto odstavce) pro ZX81 vzniklo mnoho programů, mezi jinými dokonce i šachy s jednoduchou AI! naprogramované Davidem Hornem (to byl skutečný hacker).

pc0115

Na neosazeném plošném spoji mikropočítače Sinclair ZX81 jsou patrné ručně vytvořené „cestičky“

Proč se však o ZX81, která jistě mnohým poněkud oprávněně připadá jako starožitnost, vůbec zmiňuji? Šlo totiž o počítač, jehož činnost byl i průměrný programátor schopen do všech podrobností pochopit, včetně principu zobrazování, způsobu testování stisku jednotlivých kláves (například eliminace dokmitů se řešily programově, nikoli pomocí specializovaných obvodů), práce interpreteru BASICu nebo programování ve strojovém kódu – pro programy, které měly maximálně 1 kB, se vlastně ani assembler nemusel použít.

Řekl bych, že pro důkladné zkoumání činnosti tohoto počítače byl ideální dvoukanálový osciloskop, daly se tak sledovat i všechny komunikace mezi mikroprocesorem a ULA, nebo způsob vytváření obrazového signálu (začátkem osmdesátých let minulého století byl v našich zemích malý zázrak mít tuto „krabičku“, která dokázala v poměrně dobré kvalitě generovat televizní obraz). V příštích částech se proto budu k ZX81 několikrát vracet a budu na něm některé principy, které se uplatňují i dnes, vysvětlovat.

bitcoin_skoleni

9. Obsah následující části tohoto článku

V další části tohoto článku si popíšeme srdce téměř každého pořádného počítače – mikroprocesor. Ve své podstatě mikroprocesor vznikl sloučením aritmeticko-logické jednotky a řadiče do jednoho čipu (integrovaného obvodu). Podle způsobu práce s operandy se rozlišuje několik typů procesorů, které si příště také podrobněji popíšeme.

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.