Procesor a instrukční cyklus

  • Informatika
  • instrukční cyklus vysvětlení
  • fetch-decode-execute
  • registry CPU
  • von neumannova architektura
  • strojový kód příklad
  • jak funguje procesor

Podcast

Architektura CPU0:00 / 11:23
0:001:00 zbývá

Centrální procesorová jednotka (CPU) je mozkem každého počítače. Je zodpovědná za provádění instrukcí, které tvoří počítačové programy. Bez CPU by počítač byl jen hromadou neživých komponent. Abychom pochopili, jak CPU funguje, musíme se podívat na jeho základní architekturu a na to, jak provádí jednotlivé instrukce – tedy na instrukční cyklus.

Procesor a Instrukční Cyklus: Jak Funguje Srdce Počítače

Instrukční cyklus je základní posloupnost kroků, kterou CPU opakovaně provádí pro každou instrukci programu. Tato série kroků je klíčová pro pochopení toho, jak počítač vykonává úkoly od jednoduchého sčítání až po komplexní operace. Prozkoumáme základní principy, registry a konkrétní příklady.

Základy Von Neumannovy Architektury

Moderní počítače jsou postaveny na principech Von Neumannovy architektury, kterou navrhl matematik John von Neumann v polovině 20. století. Klíčovou myšlenkou je, že programové instrukce a data jsou uloženy ve stejné paměti. To CPU umožňuje přistupovat k oběma typům informací stejným způsobem.

Tato koncepce zjednodušuje návrh počítače, ale přináší i potenciální problém známý jako „Von Neumannovo hrdlo lahve“, kde rychlost přenosu dat mezi CPU a pamětí může omezovat celkový výkon systému.

Architektura se skládá z několika hlavních částí:

  • Centrální procesorová jednotka (CPU): Provádí aritmetické a logické operace, řídí tok dat a instrukcí.
  • Operační paměť (RAM): Ukládá programové instrukce a data, se kterými CPU aktuálně pracuje. Je volatilní, takže její obsah se po vypnutí napájení ztratí.
  • Vstupní/výstupní zařízení (I/O): Umožňují komunikaci s vnějším světem (např. klávesnice, monitor, disk).
  • Sběrnice: Soustava vodičů, která propojuje všechny komponenty a umožňuje přenos dat, adres a řídicích signálů.

Klíčové Registry v CPU

Uvnitř CPU se nachází malá, ale extrémně rychlá paměť nazývaná registry. Slouží k dočasnému ukládání dat a adres, se kterými CPU právě pracuje. Jsou mnohem rychlejší než operační paměť a jsou klíčové pro efektivní provádění instrukcí. Mezi nejdůležitější registry patří:

  • Programový čítač (PC – Program Counter): Obsahuje adresu další instrukce, která má být načtena z paměti. Po každém načtení instrukce se jeho hodnota automaticky inkrementuje. Pokud instrukce vyžaduje skok na jinou část programu, hodnota PC se změní na adresu cílové instrukce.
  • Instrukční registr (IR – Instruction Register): Ukládá aktuální instrukci, která je právě prováděna. Instrukce je zde držena po celou dobu jejího dekódování a provedení.
  • Adresový registr paměti (MAR – Memory Address Register): Obsahuje adresu paměťové buňky, ze které se má číst data nebo do které se mají data zapisovat.
  • Datový registr paměti (MDR – Memory Data Register): Obsahuje data, která se mají zapsat do paměti, nebo data, která byla přečtena z paměti.
  • Obecné registry (General Purpose Registers): Slouží k ukládání mezivýsledků aritmetických a logických operací. Počet a velikost těchto registrů se liší mezi různými architekturami CPU (např. Registr A, B, R0, R1, R2,...).

Ověř si, co už víš

Test · 20 otázek · první 3 zdarma

Otázka 1 z 30%

Simulace umožňuje pozorovat, jak skoková instrukce JUMP změní hodnotu programového čítače (PC) na novou adresu.

Procvič si to na kartičkách

26 kartiček · první 3 zdarma bez účtu

1 / 26

Co je CPU a za co je zodpovědná v počítači?

Centrální procesorová jednotka (CPU) je mozkem každého počítače a je zodpovědná za provádění instrukcí, které tvoří počítačové programy.

Klepni pro otočení · Swipni pro navigaci

Detailní Rozbor Instrukčního Cyklu: Fetch-Decode-Execute

Instrukční cyklus se skládá ze tří hlavních fází, které se neustále opakují pro každou jednotlivou instrukci. Toto je základní princip fungování procesoru.

1. Fáze načtení (Fetch)

Cílem této fáze je získat další instrukci z paměti.

  1. Obsah programového čítače (PC) je zkopírován do adresového registru paměti (MAR). Tím se paměti sdělí, kterou adresu má připravit.
  2. CPU vyšle signál do paměti, aby načetla data (instrukci) z adresy uložené v MAR.
  3. Načtená instrukce je uložena do datového registru paměti (MDR).
  4. Obsah MDR je zkopírován do instrukčního registru (IR).
  5. Hodnota programového čítače (PC) je inkrementována o velikost instrukce, aby ukazoval na další instrukci v programu. Tím je zajištěno, že CPU je připraveno na další cyklus.

2. Fáze dekódování (Decode)

Jakmile je instrukce v IR, CPU ji musí pochopit.

  • Instrukce v instrukčním registru (IR) je analyzována řídicí jednotkou CPU. Řídicí jednotka zjistí, jakou operaci má instrukce provést (např. sčítání, načtení dat) a jaké operandy (data nebo adresy) jsou potřeba.
  • Na základě dekódované instrukce řídicí jednotka generuje řídicí signály pro ostatní části CPU (např. pro aritmeticko-logickou jednotku – ALU, pro registry, pro paměť).

3. Fáze provedení (Execute)

V této fázi CPU provede samotnou operaci.

  • Řídicí signály aktivují příslušné komponenty CPU k provedení operace. To může zahrnovat:
  • Aritmetické a logické operace: ALU provede sčítání, odčítání, logické AND, OR atd. s daty z registrů.
  • Přenos dat: Data jsou přesunuta mezi registry, mezi registry a pamětí, nebo mezi registry a I/O zařízeními.
  • Řízení toku programu: Pokud je instrukce skoková (např. JUMP, BRANCH), hodnota programového čítače (PC) je aktualizována na novou adresu, čímž se změní pořadí provádění instrukcí.

Po dokončení fáze provedení se cyklus opakuje pro další instrukci, jejíž adresa je nyní v programovém čítači.

Příklad Provádění Strojového Kódu

Strojový kód je nejnižší úroveň programovacího jazyka, kterému CPU přímo rozumí. Skládá se z binárních čísel, kde každá sekvence reprezentuje konkrétní instrukci (tzv. operační kód neboli opcode) a případné operandy (data nebo adresy).

Pro zjednodušení si představme jednoduchou instrukční sadu s následujícími instrukcemi a jejich kódy:

  • 001: LOAD A, [adresa] – Načte data z paměti na adresa do registru A.
  • 010: STORE A, [adresa] – Uloží data z registru A do paměti na adresa.
  • 011: ADD A, B – Sečte obsah registru A a registru B a výsledek uloží do registru A.
  • 100: SUB A, B – Odečte obsah registru B od registru A a výsledek uloží do registru A.
  • 101: JUMP [adresa] – Nastaví programový čítač na adresa, čímž skočí na jinou část programu.
  • 110: HALT – Zastaví provádění programu.

Předpokládejme, že máme CPU s dvěma obecnými registry, A a B, a paměť, kde jsou uloženy následující instrukce a data (adresy jsou v desítkové soustavě pro přehlednost):

Paměť:

AdresaObsah (binárně)Interpretace
100001 105LOAD A, [105]
101001 106LOAD B, [106]
102011 000ADD A, B
103010 107STORE A, [107]
104110 000HALT
105000 005Data: 5
106000 003Data: 3
107000 000(Výsledek)

Počáteční stav CPU:

  • PC = 100
  • IR = (prázdné)
  • MAR = (prázdné)
  • MDR = (prázdné)
  • Registr A = 0
  • Registr B = 0

Krokové Provádění Programu

Podívejme se, jak CPU zpracovává instrukce krok za krokem.

Instrukce 1: LOAD A, [105]

  • Fetch:
  • PC (100) → MAR (100)
  • Paměť[100] (001 105) → MDR (001 105)
  • MDR (001 105) → IR (001 105)
  • PC (100) → PC (101)
  • Decode: Řídicí jednotka dekóduje 001 105 jako instrukci LOAD do registru A z adresy 105.
  • Execute:
  • Adresa 105 → MAR (105)
  • Paměť[105] (5) → MDR (5)
  • MDR (5) → Registr A (5)
  • Stav: PC=101, IR=001 105, A=5, B=0, Paměť[107]=0

Instrukce 2: LOAD B, [106]

  • Fetch:
  • PC (101) → MAR (101)
  • Paměť[101] (001 106) → MDR (001 106)
  • MDR (001 106) → IR (001 106)
  • PC (101) → PC (102)
  • Decode: Řídicí jednotka dekóduje 001 106 jako instrukci LOAD do registru B z adresy 106.
  • Execute:
  • Adresa 106 → MAR (106)
  • Paměť[106] (3) → MDR (3)
  • MDR (3) → Registr B (3)
  • Stav: PC=102, IR=001 106, A=5, B=3, Paměť[107]=0

Instrukce 3: ADD A, B

  • Fetch:
  • PC (102) → MAR (102)
  • Paměť[102] (011 000) → MDR (011 000)
  • MDR (011 000) → IR (011 000)
  • PC (102) → PC (103)
  • Decode: Řídicí jednotka dekóduje 011 000 jako instrukci ADD registr A a B, výsledek do A.
  • Execute:
  • Registr A (5) + Registr B (3) = 8
  • 8 → Registr A (8)
  • Stav: PC=103, IR=011 000, A=8, B=3, Paměť[107]=0

Instrukce 4: STORE A, [107]

  • Fetch:
  • PC (103) → MAR (103)
  • Paměť[103] (010 107) → MDR (010 107)
  • MDR (010 107) → IR (010 107)
  • PC (103) → PC (104)
  • Decode: Řídicí jednotka dekóduje 010 107 jako instrukci STORE z registru A na adresu 107.
  • Execute:
  • Registr A (8) → MDR (8)
  • Adresa 107 → MAR (107)
  • MDR (8) → Paměť[107] (8)
  • Stav: PC=104, IR=010 107, A=8, B=3, Paměť[107]=8

Instrukce 5: HALT

  • Fetch:
  • PC (104) → MAR (104)
  • Paměť[104] (110 000) → MDR (110 000)
  • MDR (110 000) → IR (110 000)
  • PC (104) → PC (105)
  • Decode: Řídicí jednotka dekóduje 110 000 jako instrukci HALT.
  • Execute: CPU zastaví provádění programu.
  • Stav: PC=105, IR=110 000, A=8, B=3, Paměť[107]=8

Časté Chyby a Mylné Představy o Procesoru a Instrukčním Cyklu

Studenti se často potýkají s několika běžnými nepochopeními, které je důležité vyjasnit pro správné pochopení fungování CPU.

  • Záměna dat a instrukcí: V Von Neumannově architektuře jsou instrukce i data uloženy ve stejné paměti. CPU je rozlišuje pouze na základě toho, kdy je načítá – pokud je načítá do IR, považuje je za instrukci; pokud je načítá do obecného registru, považuje je za data. Mylná představa je, že paměť má oddělené sekce pro instrukce a data, což je charakteristické pro Harvardovu architekturu.
  • Role programového čítače (PC): Někdy se studenti domnívají, že PC ukazuje na aktuálně prováděnou instrukci. Ve skutečnosti PC vždy ukazuje na další instrukci, která má být načtena. Jeho hodnota se inkrementuje již během fáze načtení, aby byl připraven na další cyklus.
  • Funkce registrů: Registry nejsou jen „malá paměť“. Každý registr má specifickou roli v instrukčním cyklu a je optimalizován pro rychlý přístup CPU. Nejsou zaměnitelné s běžnými paměťovými buňkami.
  • Jednoduchost strojového kódu: I když se strojový kód zdá složitý kvůli binární reprezentaci, jeho jednotlivé instrukce jsou velmi jednoduché a atomické. Složité operace jsou tvořeny sekvencemi těchto jednoduchých instrukcí.

Pozorování a Interakce v Simulaci Instrukčního Cyklu

Interaktivní simulace malého CPU umožňuje studentům vizualizovat a krokovat výše popsaný instrukční cyklus. Při práci se simulací můžete pozorovat a vyzkoušet následující:

  • Změny v registrech: Sledujte, jak se mění hodnoty v programovém čítači (PC), instrukčním registru (IR), adresovém registru paměti (MAR), datovém registru paměti (MDR) a obecných registrech (A, B) s každým krokem instrukčního cyklu. Uvidíte, jak PC postupuje po instrukcích, jak se instrukce načítá do IR a jak se data přesouvají mezi pamětí a registry.
  • Přístup do paměti: Všimněte si, kdy a jak CPU přistupuje k operační paměti. Během fáze načtení se z paměti čte instrukce. Během fáze provedení se mohou číst nebo zapisovat data. Adresa, na kterou se přistupuje, je vždy v MAR a data v MDR.
  • Dekódování instrukcí: Simulace často vizuálně zvýrazňuje, která část instrukce v IR je operační kód a která je operand, což pomáhá pochopit fázi dekódování.
  • Provádění operací: Pozorujte, jak se mění hodnoty v obecných registrech po provedení aritmetických nebo logických operací. Například po instrukci ADD uvidíte, jak se součet objeví v cílovém registru.
  • Skokové instrukce: Vyzkoušejte program s instrukcí JUMP. Uvidíte, jak se hodnota PC náhle změní na novou adresu, čímž se přeskočí část kódu nebo se vytvoří smyčka.
  • Zastavení programu: Instrukce HALT ukáže, jak se CPU zastaví a přestane provádět další instrukce, což signalizuje konec programu.

Simulace vám umožní experimentovat s různými jednoduchými programy ve strojovém kódu a získat hlubší intuitivní pochopení toho, jak počítač na nejnižší úrovni skutečně funguje. Každý krok, který v simulaci provedete, odpovídá reálnému mikroprocesorovému cyklu, který se v moderních CPU odehrává miliardkrát za sekundu.

FAQ: Procesor a Instrukční Cyklus pro Studenty

Co je to instrukční cyklus a proč je důležitý?

Instrukční cyklus je základní posloupnost kroků (Fetch-Decode-Execute), kterou procesor opakovaně provádí pro každou instrukci programu. Je klíčový, protože definuje, jak CPU načítá, interpretuje a provádí příkazy, čímž zajišťuje funkčnost celého počítače.

Jaký je rozdíl mezi registry a operační pamětí?

Registry jsou malé, extrémně rychlé paměti přímo uvnitř CPU, které dočasně ukládají data a adresy, se kterými CPU aktuálně pracuje. Operační paměť (RAM) je mnohem větší, ale pomalejší, a uchovává instrukce a data pro delší dobu, než jsou přímo zpracovávány CPU. Registry jsou optimalizovány pro rychlý přístup během instrukčního cyklu.

Co znamená „Von Neumannovo hrdlo lahve“?

„Von Neumannovo hrdlo lahve“ je termín popisující omezení výkonu počítače způsobené tím, že CPU musí sdílet jednu sběrnici pro přístup k instrukcím i datům v paměti. To může vést ke zpomalení, protože rychlost přenosu dat mezi CPU a pamětí se stává úzkým místem pro celkovou rychlost zpracování.

K čemu slouží Programový čítač (PC) a Instrukční registr (IR)?

Programový čítač (PC) vždy obsahuje adresu další instrukce, která má být načtena z paměti, a automaticky se inkrementuje. Instrukční registr (IR) uchovává aktuální instrukci, která je právě dekódována a prováděna. Oba registry jsou nezbytné pro řízení toku programu během instrukčního cyklu.

Procvič si to, ne jen přečti

26 kartiček, test s vysvětlením a podcast k tomuto tématu. Účet je zdarma a pokračuješ tam, kde jsi skončil.

  • Bez platební karty
  • Web i mobilní aplikace
  • 330 000+ studentů
Začni zdarma

Související témata