Je všeobecně známo, že kód píše vývojář a jak lidé komunikují s počítači. Přemýšleli jste však někdy o tom, jak software, jako je kód, spolupracuje s počítačovým hardwarem, jako je CPU (Central Processing Unit)? Pokud je odpověď ano, pak jste na správném místě.
Chcete-li porozumět tomu, jak se kód na počítači spouští, musíte pochopit, co způsobuje, že počítač funguje a jak s ním lze manipulovat. Nejprve si promluvme o základních myšlenkách počítačového hardwaru, než postoupíme k softwarové stránce věci.
Co je binární?
Binární je číselný systém se základní 2, který procesory a paměť používají ke spouštění kódu. Binární čísla mohou být pouze 1 nebo 0, odtud jeho název. Pokud seskupíte osm binárních čísel (00000000), dostanete to, co se nazývá bajt, zatímco jediné binární číslo (0) se nazývá bit.
Jak jednoduchý přepínač produkuje binární signály
Všechno logické na počítačích se stroji začíná jednoduchým přepínačem. Jednoduchý vypínač má dva vodiče a připojovací a odpojovací mechanismus. Spojení obou vodičů umožňuje tok proudu, který vytváří signál na druhý konec vodiče. Na druhou stranu, pokud jsou vodiče odpojeny, proud nepoteče, což znamená, že nebude produkován žádný signál.
Vzhledem k tomu, že přepínač lze zapnout nebo vypnout pouze v určité instanci, poskytují ideální mechanismus pro vytváření vysokých a nízkých signálů používaných k vytváření signálů obdélníkové vlny.
Když stisknete přepínač, vytvoří signál nebo jeden bit dat. Běžná fotografie pořízená ze smartphonu by měla přibližně pět megabajtů dat, což se rovná 40 000 000 bitů. To by znamenalo, že budete muset stisknout přepínač desítky milionůkrát, abyste vytvořili dostatek dat pro jednu fotografii pořízenou z vašeho smartphonu.
S mechanickými omezeními přepínače potřebovali inženýři něco, co nemělo žádné pohyblivé části a poskytovalo vyšší rychlost přepínání.
Tranzistory používané jako spínač
Díky objevu dopingu (manipulace s elektrickou vodivostí polovodičů, jako je křemík), byli inženýři schopni vyrobit elektricky ovládané spínače známé jako tranzistory. Tento nový vynález umožnil vyšší rychlosti zpracování, které vyžadovaly malé napětí k napájení, což nakonec umožnilo naskládat více než miliardu těchto tranzistorů na jeden moderní CPU.
Co je architektura CPU?
Tranzistory jsou pak chytře uspořádány tak, aby vytvořily logická hradla, poloviční sčítačky, sčítačky, klopné obvody, multiplexory, registry a různé součástky, díky nimž je CPU funkční. Způsob, jakým byly tyto komponenty naskládány, definuje to, co je známé jako architektura CPU.
Architektura CPU také určuje ISA (Instruction Set Architecture) procesoru. ISA obsahuje vestavěný seznam instrukcí, které může CPU provádět nativně. Tyto instrukce jsou pak postupně smíchány dohromady prostřednictvím programovacího jazyka, aby vytvořily to, co je známé jako program. Obvykle jsou na CPU snadno dostupné stovky instrukcí, včetně sčítání, odečítání, přesunu, uložení a načtení.
Zde je ukázka instrukční sady:
Každá instrukce v instrukční sadě má svou vlastní binární adresu známou jako operační kód. Operační kód bude prvních několik binárních bitů, které řeknou, kterou operaci z instrukční sady použít.
Za operačním kódem následuje operand. Operand obsahuje hodnoty a adresy, kde bude použit operační kód.
Diagram ukazuje 8bitovou instrukci. Pokud má CPU 64bitovou architekturu, mohou instrukce pokrývat šířku instrukce až 64 bitů, což z něj činí schopnější procesor.
Příbuzný: Jak se liší CPU RISC a CISC?
Assembler
Nyní, když rozumíte binárním signálům, můžete se dozvědět, jak váš počítač takové signály interpretuje. To, jak má být strojový kód interpretován, závisí na typu logiky použité na assembleru (nízkoúrovňový program používaný k dekódování a sestavení kódu do správného binárního kódu).
Pokud například náš assembler používá standard ASCII (American Standard Code for Information Interchange), náš assembler by vzal daný strojový kód a interpretoval jej stejně jako z ASCII v tabulce níže.
00101001 | A | 00101111 | G | 00110101 | M | 00111011 | S | 01000001 | Y |
00101010 | B | 00110000 | H | 00110110 | N | 00111100 | T | 01000010 | Z |
00101011 | C | 00110001 | já | 00110111 | 0 | 00111101 | U | ||
00101100 | D | 00110010 | J | 00111000 | P | 00111110 | PROTI | ||
00101101 | E | 00110011 | K | 00111001 | Q | 00111111 | W | ||
00101110 | F | 00110100 | L | 00111010 | R | 0100000 | X |
Protože náš assembler používá ASCII (8bitová verze), každých osm binárních čísel v binárním kódu je interpretováno jako jeden znak. Assembler by vzal tento bajt a interpretoval jej podle daných standardů. Například 01000001 01101001 01010100 by se přeložilo na slovo „bit“.
Porozumění jazyku symbolických instrukcí
Assembly Language je lidsky čitelný nízkoúrovňový programovací jazyk, který přímo manipuluje s operačními kódy a operandy architektury CPU.
Zde je příklad jednoduchého kódu sestavení pomocí instrukční sady, která byla uvedena dříve:
1. LODA #5
2. LODB #7
3. PŘIDAT R3
4. STRE M12
Tento blok kódu je uložen v paměti RAM, dokud CPU nenačte každý řádek kódu jeden po druhém.
Cyklus načítání, dekódování a provádění CPU
CPU provádí kód v cyklu známém jako Fetch, Decode a Execute. Tato sekvence ukazuje, jak CPU zpracovává každý řádek kódu.
Vynést: Čítač instrukcí v CPU vezme jeden řádek instrukce z RAM, aby dal CPU vědět, jakou instrukci má provést jako další.
Dekódovat: Assembler dekóduje pro člověka čitelný blok kódu a sestaví jej jako správně naformátované binární soubory, aby počítač pochopil.
1. 00010101
2. 00100111
3. 00110011
4. 01011100
Vykonat: CPU pak provede binární soubory aplikací instrukcí indikovaných operačním kódem na poskytnuté operandy.
Počítač bude vykonat to následovně:
- Načtěte první registr s 5
- Načtěte druhý registr 7
- 5 + 7 = 12, uložte 12 do třetího registru
- Uložte hodnotu třetího registru do paměti RAM na adresu M12
Počítač úspěšně sečetl dvě čísla a uložil hodnotu na zadanou adresu RAM.
Skvělý! Nyní víte, jak počítač provádí kód. Tím to však nekončí.
Jít dále
Se správným hardwarem, assemblerem a jazykem symbolických instrukcí by lidé mohli spouštět kód s rozumnou lehkostí. Jak se však programy i počítačový hardware staly ještě složitějšími, inženýři a programátoři museli vymyslete způsob, jak učinit programování méně únavným a zajistit kompatibilitu s různými druhy CPU architektura. Tedy vytvoření překladačů a interpretů.
Co je to kompilátor a tlumočník?
Kompilátor a interpret jsou překladové programy, které přebírají zdrojový kód (programy vytvořené z vysokoúrovňové programovací jazyky) a přeložit je do assembleru, který pak assembler dekóduje na binární.
An tlumočník vezme jeden řádek kódu a okamžitě jej provede. To se obvykle používá na terminálech, jako je terminál Linux Bash Shell a terminál Windows PowerShell. Skvělé pro provádění jednoduchých jednorázových úkolů.
Naproti tomu a kompilátor bude trvat několik řádků kódu a zkompilovat je, aby vytvořil program. Příklady těchto programů jsou Microsoft Word, Photoshop, Google Chrome, Safari a Steam.
S vytvořením kompilátorů a interpretů byly vytvořeny programovací jazyky na vysoké úrovni.
Programovací jazyky na vysoké úrovni
Vysokoúrovňové programovací jazyky jsou jakýkoli jazyk po kódu assembleru. Některé z těchto jazyků, které možná znáte, jsou C, Python, Java a Swift. Díky těmto programovacím jazykům bylo programování pro člověka čitelnější a jednodušší než jazyk symbolických instrukcí.
Zde je srovnání vedle sebe, které ilustruje, jak těžší je programovat v assembleru než s programovacím jazykem na vysoké úrovni, jako je Python:
Oba kódy vytisknou „Ahoj světe“.
Pomocí těchto programovacích jazyků mohou vývojáři programovat hry, webové stránky, aplikace a ovladače s rozumným množstvím času.
Příbuzný: Python vs. Java: Nejlepší jazyk pro rok 2022
Počítače mohou spustit všechny způsoby kódu
Počítač je zařízení, které umí číst pouze binárně. Tyto binární soubory jsou produkovány více než miliardou tranzistorů mikroskopické velikosti zabalenými uvnitř CPU. Uspořádání tranzistorů určuje ISA (Instruction Set Architecture) CPU, která poskytuje stovky instrukcí, které může CPU snadno provést, jakmile je jeho operační kód vyvolán kódem. Vývojáři tyto pokyny postupně kombinují a spojují, což vytváří celý program, jako jsou herní enginy, webové prohlížeče, aplikace a ovladače.
CPU provádí kód prostřednictvím sekvence známé jako cyklus načítání, dekódování a provádění. Jakmile je část kódu načtena do RAM, CPU načte jeho obsah jeden po druhém, dekóduje obsah do binárního kódu pomocí assembleru a poté kód spustí.
Protože assembler může překládat pouze kód vytvořený výslovně pro architekturu CPU, kompilátory a překladače byly postaveny na vrcholu assembleru (podobně jako adaptér), aby pracovaly na různých typech CPU architektura. Tlumočník vezme jeden příkaz a okamžitě jej provede. Naproti tomu kompilátor vezme všechny vaše příkazy a zkompiluje je do znovu použitelného programu.
Programovací jazyky na vysoké úrovni jako Python, C a Java byly vytvořeny, aby bylo programování jednodušší, rychlejší a pohodlnější. Velká většina programátorů již nemusí kódovat v assembleru, protože jejich snadno použitelné vysokoúrovňové programovací jazyky lze do sestavení přeložit pomocí kompilátoru.
Doufejme, že nyní lépe rozumíte základům počítačů a tomu, jak spouštějí kód.
Je to jednoduchá otázka, nad kterou se ale čas od času zamyslí každý: jak vlastně ten počítač před vámi funguje?
Přečtěte si další
- Technologie vysvětlena
- Programování
- Počítačový procesor
- zpracovává se
Jayric Maning toužil zjistit, jak věci fungují, a tak začal během svých raných dospívání šťourat se všemi druhy elektronických a analogových zařízení. Nastoupil do forenzní vědy na University of Baguio, kde se seznámil s počítačovou forenzní vědou a kybernetickou bezpečností. V současné době se hodně samostuduje a pohrává si s technologiemi, zjišťuje, jak fungují a jak je můžeme použít, abychom si usnadnili život (nebo alespoň zchladili!).
Přihlaste se k odběru našeho newsletteru
Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné e-knihy a exkluzivní nabídky!
Chcete-li se přihlásit k odběru, klikněte sem