Jak pracuje počítač? 1.
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.
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.
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ěť.
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.
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.
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.
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.
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.
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 aritmetickologickou 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ů.
Ř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átibitové 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.
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.
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.
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. 2. 3. 4.
jednoduchá architektura pro snazší pochopení vstup dat z klávesnice výstup dat na displej (televizor) von Neumannova koncepce: mikroprocesor+paměť
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:
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.
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).
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.