ucelený souhrn instrukcí (příkazů), vyjadřující algoritmus řešení pro určitou činnost na počítači From Wikipedia, the free encyclopedia
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.
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ě.
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]
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]
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]
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.
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:
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.
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).
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.
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.
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]
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á.
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]
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í 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.