Podcast on Processzor és utasításciklus

Processzor és utasításciklus: A CPU működésének alapjai

Podcast

A számítógép agyában0:00 / 10:11
0:001:00 remaining
LilyA legtöbben azt gondolják, hogy egy számítógépben az utasítások és az adatok két teljesen külön dolog, mint a recept és a hozzávalók. De mi van, ha azt mondom, hogy a géped memóriájában mindkettő csak egy nagy adathalmaz, és a processzornak kell kibogarásznia, hogy éppen melyik micsoda?
JackPontosan. Kicsit olyan, mintha a bevásárlólistádon a „végy tejet” utasítás ugyanúgy nézne ki, mint a „2 liter” adat. Elég meglepő, igaz? A mai modern számítógépek pont így működnek. Ez a Neumann-architektúra egyik alapelve.
Chapters

A számítógép agyában

Délka: 10 minut

Kapitoly

Bevezető: Utasítás vagy adat?

A Neumann-architektúra alapjai

A processzor: A gép agya

A regiszterek titkos élete

Az utasításciklus: Lekérés és dekódolás

Az egyszerű gépi kód

Két szám összeadása lépésről lépésre

Az eredmény tárolása

Összegzés és lezárás

Přepis

Lily: A legtöbben azt gondolják, hogy egy számítógépben az utasítások és az adatok két teljesen külön dolog, mint a recept és a hozzávalók. De mi van, ha azt mondom, hogy a géped memóriájában mindkettő csak egy nagy adathalmaz, és a processzornak kell kibogarásznia, hogy éppen melyik micsoda?

Jack: Pontosan. Kicsit olyan, mintha a bevásárlólistádon a „végy tejet” utasítás ugyanúgy nézne ki, mint a „2 liter” adat. Elég meglepő, igaz? A mai modern számítógépek pont így működnek. Ez a Neumann-architektúra egyik alapelve.

Lily: Wow, ez tényleg meglepő. Akkor merüljünk is el benne! A Studyfi Podcast adását hallgatjátok, ahol a bonyolult témákat is érthetővé tesszük.

Jack: Szóval, a Neumann-architektúra, amit Neumann János írt le még 1945-ben, forradalmasította a számítástechnikát. A legfontosabb ötlete a tárolt program elve volt. Ez azt jelenti, hogy a programkód, vagyis az utasítások, és az adatok ugyanabban a memóriában laknak.

Lily: Várj, ez miért volt annyira nagy dolog? Ma már ez teljesen természetesnek hangzik.

Jack: Azért, mert korábban a programokat hardveresen kellett beállítani, kapcsolókkal vagy lyukkártyákkal. Képzeld el, hogy minden egyes programfuttatáshoz át kellene drótoznod a gépedet. A tárolt program elvével a programozás szoftveres feladattá vált, ami elképesztő rugalmasságot adott.

Lily: Oké, ez így már érthető. És milyen fő részekből áll egy ilyen architektúra?

Jack: Öt fő logikai egység van. Van a központi feldolgozó egység, vagyis a CPU – a gép agya. Aztán a memória, ahol az adatok és a programok vannak. Kellenek bemeneti egységek, mint a billentyűzet, és kimeneti egységek, mint a monitor. Végül pedig a buszrendszer, ami egyfajta autópálya-hálózat, ami összeköti ezeket az egységeket.

Lily: Koncentráljunk a CPU-ra, a gép agyára. Mi van benne, ami ilyen okossá teszi?

Jack: A CPU-n belül is van egyfajta munkamegosztás. Három kulcsfontosságú része van. Az első az aritmetikai-logikai egység, vagyis az ALU.

Lily: Az mit csinál? A neve elég tudományosan hangzik.

Jack: Valójában ő a matekzseni. Az ALU végzi az összes matematikai műveletet, mint az összeadás vagy szorzás, és a logikai műveleteket is, mint az „ÉS” vagy a „VAGY”. Ő a számítások motorja.

Lily: Rendben, van egy matekosunk. Ki a következő?

Jack: A vezérlőegység, vagyis a CU. Ő a CPU karmestere. Nem számol, hanem irányít. Olvassa az utasításokat, értelmezi őket, és megmondja a gép többi részének – az ALU-nak, a memóriának –, hogy mit, mikor és hogyan csináljon.

Lily: Szóval ő a főnök!

Jack: Abszolút! A harmadik rész pedig a regiszterek. Ezek szupergyors, de apró belső tárolók a CPU-n belül, amik ideiglenesen tárolják az adatokat, amikkel a CPU éppen dolgozik. Gondolj rájuk úgy, mint a CPU saját kis jegyzetfüzetére.

Lily: Említenél pár fontos regisztert? Milyen jegyzetek kerülnek ebbe a füzetbe?

Jack: Persze. Az egyik legfontosabb a programszámláló, a PC. Olyan, mint egy könyvjelző a programkódban. Mindig a következő végrehajtandó utasítás címét tárolja.

Lily: Praktikus. Így a CPU sosem felejti el, hol tartott.

Jack: Pontosan. Aztán ott van az utasításregiszter, az IR. Amikor a CPU beolvas egy utasítást a memóriából, azt ide teszi. Ez a „most ezt csinálom” feladatlistája.

Lily: Oké, PC a következő, IR a jelenlegi feladat. Mi van még?

Jack: Van két regiszter, ami a memóriával kommunikál. A memóriacím-regiszter, a MAR, tárolja annak a memóriacellának a címét, ahonnan olvasni vagy ahova írni akarunk. A memóriapuffer-regiszter, az MBR pedig magát az adatot tárolja, ami jön a memóriából vagy megy oda.

Lily: Rendben, a részek megvannak. De hogyan áll össze mindez egyetlen utasítás végrehajtásává? Mi az az utasításciklus?

Jack: Az egész egy ismétlődő folyamat, mint egy tánc. Az első lépés a lekérési fázis. A vezérlőegység fogja a programszámlálóban (PC) lévő címet, és beteszi a memóriacím-regiszterbe (MAR).

Lily: Tehát megmondja a memóriának, hogy „hé, innen kérek valamit!”

Jack: Pontosan. A memória megkeresi a kért címen lévő utasítást, és betölti azt a memóriapuffer-regiszterbe (MBR). Onnan az utasítás átkerül az utasításregiszterbe (IR). Közben a vezérlőegység növeli a programszámlálót, hogy az már a következő utasításra mutasson.

Lily: És miután az utasítás megérkezett az IR-be?

Jack: Jön a dekódolási fázis. A vezérlőegység, a mi karmesterünk, megnézi az utasítást, és „lefordítja”. Kitalálja, hogy ez egy összeadás, egy adatmozgatás vagy valami más, és előkészíti a terepet a végrehajtáshoz.

Lily: Szóval lekéri, megérti, és utána jön a cselekvés. Egyszerűnek hangzik, de elképesztő, hogy ez másodpercenként több milliárdszor megtörténik. És mi történik a végrehajtás során? Erről fogunk beszélni a következő részben?

Lily: Oké, szóval az utasítás bekerült a regiszterbe, és a vezérlőegység dekódolta. Mi jön ezután? Ez a végrehajtás, igaz?

Jack: Pontosan! És itt történik a varázslat. A dekódolás után a vezérlőegység tudja, mit kell tennie. Olyan, mint egy karmester, aki int a zenekarnak.

Lily: A zenekar pedig a processzor többi része?

Jack: Így van! A vezérlőegység jeleket küld, és az Aritmetikai Logikai Egység, vagyis az ALU, elvégzi a műveletet. Ez lehet összeadás, kivonás, vagy akár egy logikai ÉS vagy VAGY művelet.

Lily: Tehát az ALU a matekzseni a csapatban.

Jack: Abszolút! Az eredmény pedig általában egy speciális regiszterbe, az úgynevezett akkumulátorba, vagy vissza a memóriába kerül.

Lily: Ezt el tudnád magyarázni egy konkrét példán keresztül? Mondjuk... egy nagyon egyszerű gépi kóddal?

Jack: Persze! A gépi kód a processzor anyanyelve, csupa egyes és nulla. De az egyszerűség kedvéért használjunk most sima számokat a műveleti kódokra, azaz az opkódokra.

Lily: Szuper, ez barátságosabban hangzik. Milyen utasításaink vannak?

Jack: Legyen mondjuk öt egyszerű parancsunk. LOAD, ami betölt egy értéket a memóriából. STORE, ami elmenti. ADD, ami hozzáad. SUB, ami kivon. És végül HALT, ami leállítja a programot.

Lily: LOAD, STORE, ADD, SUB, HALT. Megvan. Készen állok a programozásra!

Jack: Akkor vágjunk is bele! A feladat: adjunk össze két számot.

Lily: Oké, hol vannak ezek a számok?

Jack: Tegyük fel, hogy a memóriában vannak, a 0x10-es címen van az 5-ös, a 0x11-es címen pedig a 3-as. Az eredményt a 0x12-es címre akarjuk írni.

Lily: Rendben. Hogy néz ki a program?

Jack: Először is be kell töltenünk az első számot. Az utasítás: LOAD 0x10. A processzor lekéri, dekódolja, majd végrehajtja. Beteszi az 5-ös számot az akkumulátorba.

Lily: Szuper, az akkumulátorban van az 5-ös. Mi a következő lépés?

Jack: Következik az ADD 0x11 utasítás. A ciklus újra lefut. A processzor lekéri, dekódolja, majd az ALU-val hozzáadja a 0x11-es címen lévő 3-ast az akkumulátorban lévő 5-öshöz.

Lily: És az eredmény... 8! Ami most az akkumulátorban van.

Jack: Pontosan! Az utolsó lépések a STORE lennének, amivel a 8-at elmentjük a 0x12-es címre, majd egy HALT, ami leállítja a programot. És kész is vagyunk!

Lily: Lenyűgöző! Tényleg olyan, mint egy apró, szupergyors futószalag. Minden utasítás ugyanazokon a fázisokon megy keresztül.

Jack: Így van. És ez a ciklus ismétlődik másodpercenként több milliárdszor egy modern processzorban. Na de mi történik, ha a programnak döntenie kell, és nem csak sorban halad? Erről szólnak az ugróutasítások.

Lily: Oké, tehát összeadtuk a két számot, az akkumulátorban most 8 van. Mi a következő a programunk listáján?

Jack: Így van, a PC 4-en áll, az akkumulátorban pedig az eredményünk, 0008. A következő utasítás a STORE. Ez arra utasítja a CPU-t, hogy mentse el az akkumulátor tartalmát.

Lily: Hova menti? A memóriába?

Jack: Pontosan! A CPU beolvassa a STORE parancsot, majd a címet, ami 0x12. Így a 0008-at az akkumulátorból a 0x12-es memóriacímre teszi.

Lily: Értem. Tehát most a Memória értéke 0008. És a programszámláló is tovább lépett, igaz?

Jack: Hát persze. A PC most 0x06-on áll. És itt jön a nagy finálé. A CPU beolvassa a következő utasítást... ami a HALT.

Lily: Ez nagyon drámaian hangzik. HALT!

Jack: Csak annyit jelent, hogy állj. A CPU elvégezte a dolgát. A program befejeződött.

Lily: Tehát, hogy összefoglaljuk a végső állapotot: a PC 7-en áll, az akkumulátorban továbbra is 0008 van, és a 0x12-es memóriacím is 0008-at tárol. Sikerült!

Jack: Bizony. És tényleg ez a lényege annak, ahogy minden egyes program fut. Lekérés, dekódolás, végrehajtás. Újra és újra.

Lily: Micsoda utazás volt, az egyszerű utasításoktól a teljes programfuttatásig. Jack, nagyon köszönjük, hogy ezt így lebontottad nekünk. És köszönjük mindenkinek, hogy velünk tartottatok a Studyfi Podcastben. Találkozunk legközelebb!