Počítačový program

Počítačový program (též jen program, obecně pak software) je v informatice posloupnost instrukcí (ne nutně strojových instrukcí), která popisuje realizaci dané úlohy počítačem. Aby počítač mohl vykonávat nějakou činnost, potřebuje mít ve své operační paměti alespoň jeden program. V současné době je v počítači základním programem jádro, které řídí jeho chod a uživatel pak pracuje s aplikačním softwarem.

Charakteristika

Počítačový program dnes vytváří programátor zápisem algoritmu v nějakém programovacím jazyce. Zdrojový kód je buď nejprve přeložen překladačem do strojového kódu, který je pak přímo vykonáván procesorem, nebo je zdrojový kód vykonáván interpretem (bez existence spustitelného strojového kódu). V dřívějších dobách mohl být program realizován přímo v hardwaru zapojením vodičů, děrným štítkem a podobně.

Související informace naleznete také v článku Programování.

Historie

První programovatelná zařízení

Nejčasnější programovatelná zařízení předchází vynálezu digitálního počítače. V roce 1801 Joseph-Marie Jacquard vymyslel tkalcovský stav, který tkal vzor (květy, listy a jiné symboly) podle předem určených a seřazených děrných štítků. Pouhou změnou pořadí štítků byl změněn celý vzor.[1]

Analytický stroj

Charles Babbage se roku 1837 inspiroval „programovatelným“ tkalcovským strojem a pokusil se sestavit první analytický stroj. Zařízení mělo možnost uložit až 1000 čísel o délce až 40 číslic, se kterými se mohlo dále pracovat. Zařízení bylo programovatelné pomocí dvou sad děrných štítků. Jedna sada řídila provoz zařízení a druhá sloužila k nastavení vstupních hodnot.[1] [2] I přes velmi slibný návrh, mnoho využitých finančních zdrojů a hodiny práce se tento projekt nepodařilo zcela dokončit.[3]

Mezi lety 1842-1843 Ada Lovelace přeložila monografii italského generála a matematika hraběte Menabrea, která mimo jiné detailně popisovala metodu pro výpočet Bernoulliho čísla pomocí analytického stroje. Tato poznámka v monografii je mnoha historiky považována za první počítačový program na světě.[4]

Univerzální Turingův stroj

Alan Turing roku 1936 představil univerzální Turingův stroj. Jednalo se o teoretické zařízení, které bylo schopné modelovat všechny výpočetní operace proveditelné na Turingově úplném výpočetním stroji.[5] Jedná se o stroj s nekonečně dlouhou páskou určenou pro zápis a čtení s konečným počtem stavů. Stroj může pohybovat páskou libovolným směrem a měnit její obsah dle zadaného algoritmu. Zařízení začíná v počátečním stavu, prochází sekvencí po sobě jdoucích operací a zastaví při výskytu stavu zastavení.[6] Některými specialisty je tento stroj označován za předchůdce programovatelného počítače využívající Von Neumannovu architekturu.[7]

Programovatelné počítače

První vývoj programovatelných počítačů byl zaznamenán v 40. až 50. letech 20. století. Za zmínku stojí například počítač Z3 od německého inženýra Konráda Zuse.[8] Jednalo se o programovatelný binární kalkulátor s plovoucí řádovou čárkou, obsahoval smyčky, ale nevyužíval podmíněné skoky. Měl také paměť a výpočetní jednotku založenou na telefonních relé.

Dalším významným představitelem je malé Manchesterské experimentální zařízení (anglicky Manchester Small-Scale Experimental Machine), označované jako Baby, které jako první ukládalo své programové instrukce o velikosti pouze 3 bity do paměti v podobě čísel, a ze kterého později vznikl jeden z prvních počítačů Manchester Mark I.[9]

Počítače vyrobené do roku 1970 měly na svém předním panelu přepínače určené k programování. Samotný program byl napsán na papíře a jednotlivé instrukce byly posléze reprezentován konfigurací přepínačů. Tento proces se pak opakoval pro celý program. Počítačový program bylo také možné „nahrát“ pomocí děrných štítků či papírové pásky.[10]

V roce 1961 byl sestrojen unikátní stroj své doby, počítač Burroughs B5000, který byl programován v jazyce ALGOL 60. V roce 1964 vznikl IBM System/360, který se stal na trhu extrémně úspěšným. Skládal se z řady šesti počítačů majících stejnou instrukční sadu. Model 30 byl nejmenší a nejlevnější. Zákazníci mohli upgradovat a obdržet stejný aplikační software. Každý System/360 podporoval multiprogramování. Díky podpoře operačního systému mohlo být v paměti více programů. Pokud jeden z nich čekal na vstup či výstup, jiný mohl pracovat. Každý model dokázal také emulovat jiné počítače. Pokud zákazníci upgradovali na System/360, mohli obdržet také aplikační software IBM 7094 nebo IBM 1401. Počítače IBM System/360 byly skutečně průlomové, vyráběly se po tisících a byly komerčně i prakticky využívány.

Rozdělení programů

Všechny počítačové programy označujeme souhrnně jako software (mezi software jsou někdy zahrnována i data). Programy můžeme rozdělit na dvě základní skupiny:

Systémový software

V současné době je základním programem v počítači jádro, které je součástí operačního systému (například jádro Linuxu, jádro některé verze systému Windows NT, jádro Symbian OS…). Toto jádro je do paměti počítače zaváděno při startu počítače (viz bootování), na čemž se v IBM PC kompatibilních počítačích podílí BIOS (tj. firmware) a zavaděč (oboje jsou speciální programy). Během startu počítače se uplatňují další speciální programy. Vše se označuje jako systémový software.

Aplikační software

Operační systém umožňuje uživateli počítač ovládat, spouštět další aplikační software a komunikovat s ním (předávat mu vstupy a získávat výstupy, resp. výsledky jeho činnosti). Typickým aplikačním softwarem je například Microsoft Word, LibreOffice, ale i drobné aplikace (tzv. gadgety).

Programovací jazyky

První počítače byly programovány buď přímým zapojením obvodů nebo ve strojovém kódu procesoru. V současné době se programy obvykle zapisují v některém z programovacích jazyků ve formě zdrojového kódu, aby byl zápis srozumitelný pro člověka. Úpravy zdrojového kódu zahrnují testování, analýzu či ladění, a velice často probíhá ve spolupráci s ostatními programátory na společném projektu. Osoba, která tuto činnost vykonává, je označována jako programátor, vývojář softwaru či softwarový architekt, v závislosti na náplni práce, která se u jednotlivých pozic liší. Běžný trend je, že z kvalitních vývojářů se stávají analytici či softwaroví architekti, kteří navrhují komplexní informační systémy. Tato velice často zdlouhavá činnost se nazývá vývoj softwaru.

Související informace naleznete také v článcích Programovací jazyk a Dějiny počítačů.

Spouštění programu

Počítačové programy jsou obvykle uchovány ve stálé, nevolatilní paměti (např. pevný disk) do té doby, dokud nejsou vyžádány uživatelem ke zpracování, a to buď přímo či nepřímo jiným procesem. Na základě tohoto požadavku je program operačním systémem načten do operační paměti, kde je jeho posloupnost instrukcí přímo dosažitelná procesorem. Spuštěný program, který je vykonáván, se nazývá proces.[11] Proces se v operační paměti skládá z vlastního programu a dynamicky se měnících dat.

Související informace naleznete také v článku Proces (program).

Souběžné zpracování

Související informace naleznete také v článcích Proces (program) a Multitasking.

V současných multitaskingových systémech je spuštěno zároveň více různých programů (resp. procesů). Jeden program může být spuštěn vícekrát a vytvořit tak více procesů (např. dvakrát spuštěný webový prohlížeč, přičemž v každém je zobrazena jiná webová stránka). Jeden proces může být složen z více vláken, která obvykle navzájem spolupracují.

Většina současných operačních systémů podporuje multitasking, který umožňuje zpracování několika programů (resp. procesů) zároveň, které jsou zdánlivě prováděny současně. Jádro operačního systému ve skutečnosti všechny procesy velmi rychle střídá (změna kontextu zhruba sto až několik tisíc přepnutí za sekundu), takže pro uživatele vzniká dojem jejich současného běhu.[12] V dnešní době umožňují víceprocesorové nebo vícejádrové počítače zpracování více programů naráz bez ztráty výkonu.[13]

Ukončení procesu

Procesor vykonává instrukce běžícího programu (procesu) instrukci za instrukcí až do jeho ukončení. K ukončení procesu dochází buď standardně (dojde k vykonání instrukce, která má za úkol program ukončit) nebo pokud nastane nějaká chyba, například programátorská nebo hardwarová.

Vznik programu

Vestavěný program

Mikrokontrolér umístěný vpravo uvnitř této USB flash paměti je ovládaný vestavěným programem tzv. firmware.

Některé počítačové programy, případně celé vestavěné systémy, jsou zabudované do hardware napevno. Aby mohl nějaký systém naběhnout (tzv. nabootovat z angl. boot), vyžaduje uložený počítačový program tzv. vestavěný program, uložený v paměti ROM. Proces bootování je nezbytný k inicializaci všech částí systému, od registrů procesoru, přes ovladače zařízení až po obsah volatilní paměti.[14] Po procesu zavádění načte tento zabudovaný program operační systém, a nastaví čítač instrukcí pro započetí běžných operací. Periferní zařízení mohou mít zabudovaný program, tzv. firmware, pro ovládání jejich činnosti nezávisle na hostitelském počítači. Firmware se používá v případech, kdy se neočekává jeho změna nebo pokud je taková změna výjimečná; případně tehdy, kdy je nutné zajistit, že nedojde ke ztrátě programu při výpadku energie.[15]

Ruční programování

Zásuvka pro ruční vstup na 16bitovém počítači Data General Nova 3

Počítačové programy byly dříve vkládány do hlavního procesoru ručně, prostřednictvím zásuvek k tomu určených. Instrukce pro procesor byly reprezentovány nastavením polohy zapnuto/vypnuto. Poté, co byla nastavena potřebná konfigurace, stisklo se tlačítko pro vykonání programu.[16] Poté byl program vykonán a tento proces se několikrát opakoval. Dříve byly pro tyto ruční vstupy používány zejména děrné štítky, ale také děrné pásky.

Automatické generování programu

Automatické generování kódu je styl programování, který vytváří zdrojový kód prostřednictvím generických tříd, prototypů či šablon za účelem zvýšení produktivity programátora. Zdrojový kód je generován programovacími nástroji nebo integrovaným vývojovým prostředím. Nejjednodušší formou generátoru zdrojového kódu jsou tzv. makra, jakými je například preprocesor jazyka C, který nahrazuje šablony částí zdrojových kódů na základě poměrně jednoduchých pravidel.

Tzv. software engine generuje zdrojový kód nebo značkovací kód, který se současně stává vstupem do dalšího procesu. Analogicky bychom mohli říci, že jeden proces pohání další, používaje počítačový kód jako palivo. Aplikační server může například dodávat aplikace ke klientským počítačům. Příkladem takového enginu je Wiki, což je aplikační server, který umožňuje uživatelům tvořit dynamický obsah webu prostřednictvím článků. Wiki generují HTML kód, CSS definice, Java applety, a skripty v jazyce JavaScript, které jsou poté interpretovány internetovým prohlížečem.

Reference

  1. a b MCCARTNEY, Scott. ENIAC – The Triumphs and Tragedies of the World's First Computer. [s.l.]: Walker and Company, 1999. Dostupné online. ISBN 0-8027-1348-3. S. 16. 
  2. BROMLEY, Allan G. Charles Babbage’s Analytical Engine, 1838. IEEE Annals of the History of Computing. 1998, roč. 20. Dostupné online. 
  3. TANENBAUM, Andrew S. Structured Computer Organization, Third Edition. [s.l.]: Prentice Hall, 1990. Dostupné online. ISBN 0-13-854662-2. S. 15. 
  4. J. Fuegi and J. Francis. Lovelace & Babbage and the creation of the 1843 'notes'. Annals of the History of Computing. October–December 2003, roč. 25, čís. 4, s. 16, 19, 25. DOI 10.1109/MAHC.2003.1253887. 
  5. ROSEN, Kenneth H. Discrete Mathematics and Its Applications. [s.l.]: McGraw-Hill, Inc., 1991. Dostupné online. ISBN 0-07-053744-5. S. 654. 
  6. LINZ, Peter. An Introduction to Formal Languages and Automata. [s.l.]: D. C. Heath and Company, 1990. Dostupné online. ISBN 0-669-17342-8. S. 234. 
  7. DAVIS, Martin. Engines of Logic: Mathematicians and the origin of the Computer. 1. vyd. New York NY: W. W. Norton & Company, 2000. ISBN 0-393-32229-7. 
  8. History of Computing [online]. Dostupné online. 
  9. ENTICKNAP, Nicholas. Computing's Golden Jubilee. Resurrection. The Computer Conservation Society, léto 1998, roč. 20. Dostupné v archivu pořízeném dne 2012-01-09. ISSN 0958-7403.  Archivováno 20. 5. 2019 na Wayback Machine.
  10. SILBERSCHATZ, Abraham. Operating System Concepts, Fourth Edition. [s.l.]: Addison-Wesley, 1994. ISBN 0-201-50480-4. S. 6. 
  11. KOLÁŘ, Petr. Operační systémy. [s.l.]: TUL, 2005. Dostupné online. S. 18.  Archivováno 1. 8. 2014 na Wayback Machine.
  12. PECINOVSKÝ, Rudolf. Myslíme objektově v jazyku Java: kompletní učebnice pro začátečníky. [s.l.]: Grada Publishing a.s., 2009. S. 468. 
  13. ECKEL, Bruce. Myslíme v jazyku C++ 2.díl - knihovna zkušeného programátora. [s.l.]: Grada Publishing a.s. S. 523. 
  14. KOLÁŘ, Petr. Operační systémy. [s.l.]: TUL, 2005. Dostupné v archivu pořízeném dne 2009-12-28. S. 17–18.  Archivováno 28. 12. 2009 na Wayback Machine.
  15. TANENBAUM, Andrew S. Structured Computer Organization, Third Edition. [s.l.]: Prentice Hall, 1990. Dostupné online. ISBN 0-13-854662-2. S. 11. 
  16. SILBERSCHATZ, Abraham. Operating System Concepts, Fourth Edition. [s.l.]: Addison-Wesley, 1994. ISBN 0-201-50480-4. S. 6. 

Související články

Externí odkazy

Média použitá na této stránce

Dg-nova3.jpg
Autor: User Qu1j0t3 on en.wikipedia, Licence: Copyrighted free use
Picture of Data General Nova 3 front panel. Computer belongs to Emil Sarlija.
USB flash drive.JPG
Autor: Nrbelex, Licence: CC BY-SA 3.0
A SanDisk Cruzer Titanium drive opened after being nearly destroyed.