Prevzem ukaza (Fetch)
V prvem koraku cikla ukaza CPE pridobi naslednji ukaz iz pomnilnika. To poglavje razloži, kako programski števec, Instruction Register in ostale komponente skupaj zagotovijo neprekinjen tok ukazov.
1. Uvod v prevzem ukaza
CPE (centralna procesna enota) izvaja program tako, da neprestano ponavlja cikel ukaza: fetch (pridobi) → decode (dekodira) → execute (izvede). Prevzem ukaza je prvi korak tega cikla.
V tem koraku procesor prebere naslednji ukaz iz pomnilnika (RAM ali predpomnilnik) in ga shrani v notranji register, kjer čaka na dekodiranje. Brez tega koraka procesor ne bi vedel, kaj sploh mora narediti.
Prevzem ukaza je analogen temu, da delavec pogleda v navodila, preden začne z delom; šele potem ve, kaj storiti.
2. Programski števec (PC)
Zaporedno prinašanje ukazov in podatkov iz pomnilnika v CPE je omogočeno z uporabo specialnega registra, tj. programskega števca (ang. Program Counter ali PC). Ta register vsebuje vsaka CPE.
Programski števec kaže na trenutni naslov v pomnilniku, iz katerega mora procesor prebrati ukaz. Določa torej lokacijo naslednjega ukaza v pomnilniku.
- Program Counter (PC)
- Register, ki hrani pomnilniški naslov naslednjega ukaza za prevzem. Po vsakem prevzemu se samodejno poveča.
- Instruction Register (IR)
- Register, v katerega se shrani ukaz, ki ga je CPE pravkar prebrala iz pomnilnika.
- MAR (Memory Address Register)
- Register, ki hrani naslov pomnilniške celice, ki jo CPE trenutno bere ali piše.
3. Koraki cikla prevzema
Cikel prevzema ukaza poteka v naslednjih korakih:
- 1
Branje naslova iz PC
Vrednost programskega števca (naslov naslednjega ukaza) se prenese v MAR (Memory Address Register).
- 2
Branje ukaza iz pomnilnika
Pomnilnik vrne ukaz na naslovu, ki ga kaže MAR. Ukaz se shrani v MBR (Memory Buffer Register).
- 3
Prenos v Instruction Register
Ukaz iz MBR se prenese v IR, kjer čaka na fazo decode.
- 4
Povečava PC
PC se poveča za velikost ukaza (npr. +4 bajte pri 32-bitnih ukazih), da kaže na naslednji ukaz.
Ta cikel se ponavlja neprestano: vsak prevzem pripravi ukaz za dekodiranje, medtem ko se PC že premakne na naslednji.
4. Instruction Register (IR)
Po uspešnem prevzemu se ukaz hrani v Instruction Register (IR). To je začasno shranjevalno mesto znotraj procesorja; ukaz v IR čaka, dokler ga krmilna enota ne dekodira.
IR je neposredno povezan s krmilno enoto (Control Unit), ki iz bitnega vzorca v IR razbere, kaj mora procesor narediti: katero operacijo izvesti, katere registre brati in kako nasloviti operande.
IR skupaj s PC tvori jedro upravljanja toka ukazov: PC določa, kateri ukaz bo pridobljen, IR pa hrani vsebino tega ukaza.
5. Prekinitve in kontekstno preklapljanje
Normalni tok prevzema ukazov se lahko prekine z prekinitvami (ang. interrupts). Ko zunanja naprava ali notranje stanje zahteva takojšnjo obravnavo, procesor:
- 1Shrani trenutno vrednost PC in registrov (kontekst) v pomnilnik ali sklad.
- 2PC nastavi na naslov rutine za obdelavo prekinitve (interrupt handler).
- 3Izvede prekinitveno rutino.
- 4Obnovi shranjeni kontekst in nadaljuje z normalnim izvajanjem.
Kontekstno preklapljanje se zgodi, ko operacijski sistem preklopi med različnimi procesi; pri tem mora shraniti celotno stanje (vrednosti vseh registrov, vključno s PC) tekočega procesa in naložiti stanje naslednjega.
Prevzem ukaza pri prekinitvah ni enostavno "naslednji PC", zato je potrebna posebna logika za shranjevanje in obnavljanje konteksta.
6. Zaključek
Prevzem ukaza je temelj vsega, kar procesor počne. Brez natančnega mehanizma za pridobivanje ukazov iz pomnilnika, tj. brez programskega števca, IR in pravilnega upravljanja s prekinitvami, celotno izvajanje programa ne bi bilo možno.
V modernih procesorjih je ta faza optimizirana z instruction prefetching (vnaprejšnjim pridobivanjem ukazov) in L1 predpomnilniki za ukaze, kar drastično zmanjša latenco prevzema.
Video razlaga
Vir: Crash Course Computer Science #7 – „The Central Processing Unit“ (YouTube)
Nadaljuj na naslednje poglavje
Prevzem ukaza si prebral. Naslednji korak: dekodiranje.
Dekodiranje ukazov