1.3. Hagyományos számítógépek

Ebben a részben röviden átfutjuk, hogyan valósul meg a Neumann elv a gyakorlatban. A számítógéparchitektúrák alapjaival kapcsolatban a bitekről és a bájtokról valamint az ezeken az aritmetikai és logikai egység (ALU) által végzett operátorokról (műveletekről) lesz szó.

A hagyományos számítógépek a klasszikus propozicionális logikára épülnek (nagyban köszönhető ez a kettes számrendszer használatának). Így logikai áramkörökkel könnyedén meg lehet őket valósítani.

1.3.1. A klasszikus logika

A klasszikus logikában a formulák kijelentéseket szimbolizálnak. Ezek igazságértéke kétféle lehet: igaz, illetve hamis. Szokás ezeket az 1, illetve a 0 számértékekkel jelölni. Az úgynevezett atomi kijelentéseket logikai összekötőjelekkel köthetjük össze, ezzel bonyolultabb, összetett kifejezést kapva.

Lássuk most a klasszikus logika összekötőjeleit és azok szemantikai definícióját (1.1. táblázat).

1.1. táblázat - Az alapvető logikai operátorok igazságtáblája.

Név Első változó Második változó negáció konjunkció diszjunkció implikáció
Jel A B A A B A B A B
érték 0 0 1 0 0 1
0 1 1 0 1 1
1 0 0 0 1 0
1 1 0 1 1 1

A kétértékű logikában véges sok logikai összekötőjel definiálható, a többi logikai összekötőjel az 1.1. táblázatban felsorolt alapvető logikai operátorokkal definiálható, pl. a következő módon:

ekvivalencia: ,
XOR: ,
NAND: ,
NOR: .

Valójában ezek a logikai összekötőjelek annyira nem függetlenek egymástól, hogy pl. a NOR vagy a NAND egymagában elegendő ahhoz, hogy minden mást definiáljunk vele. (A „NOR” műveletet szokás Sheffer-vonásnak is nevezni H. Sheffer után, aki 1913-ban megjelent cikkében bizonyította, hogy ez a művelet önmagában elegendő minden logikai formula felírásához. A számítógépek chipjein hagyományosan egyféle logikai kaput szoktak használni, ez pedig a NAND kapu, mely ugyancsak univerzális.)

1.3.2. Bitek és bájtok

Az információelméletben a bit az információ alapegysége, egy eldöntendő (igen-nem) kérdésre adott válasz információtartalma. A számítógépekben általában egyszerre több bitnyi információt tárolunk és dolgozunk fel. A 80-as években a 8 bites számítógépek terjedtek el (pl. Commodore 64), amiket a 90-es években a 16 és a 32 bites gépek követtek. Az ezredforduló után terjedtek el a 64 bites architektúrák... Az, hogy egy számítógép „hány bites” egy fontos jellemzője a gépnek, minél nagyobb ez az érték, annál fejlettebb, jobb a számítógép. Ebben a könyvben bájtnak hívjuk azt az egységet, amit egyszerre tud kezelni egy adott számítógép. Megjegyezzük viszont, hogy a bájt elnevezés a 8-bites architektúrák idején terjedt el, és hogy a definíciója ne változzon, az ennél több bites architektúrák (illetve az ezeket támogató programnyelvek) esetén újabb és különböző elnevezések terjedtek el, pl. a 16-bit, vagy a 32-bit információt tároló egységre.

A logikai operátorok bitenként hajtódnak végre a bájt összes helyiértékén egymástól függetlenül (1.2. táblázat).

1.2. táblázat - Az alapvető logikai operátorok működése egy bájton (bitek sorozatán), ahol minden és bit értéke a halmazból való.

A értéke A negáltja B értéke A és B A és B
konjunkciója diszjunkciója

Aritmetikai operátorok: a SHIFT (eltolás), tulajdonképpen 2-vel való szorzás és osztás műveletének felel meg (lásd 1.3. táblázat).

1.3. táblázat - A SHIFT operátor hatása egy bájtra.

A értéke bináris kódban left-shift(A) right-shift(A)
0 0

Az összeadás operátora az egyik legfontosabb művelet, tulajdonképpen szinte minden számítási művelet erre van visszavezetve. Az összeadást ( ADD ) hagyományosan logikai áramkörökkel szokták megvalósítani. Erre egy egyszerű lehetőség a következő:

Legyen .

Ezután (csökkenő index érték alapján iteratívan definiálva):

Az eredmény bitjei: , és

. ( ), valamint

jelenti a túlcsordulást (túlcsordulás bit).

(A leírt algoritmus rokon az általános iskolában tanult többjegyű számok írásbeli összeadásának algoritmusával. A valódi számítógépekben az összeadó (és félösszeadó) áramkörökben a átvitelbitek előreszámolásával a művelet részben párhuzamosítható, így (az egymás után elvégzendő lépések számát tekintve is) gyorsabbá tehető annál, mint ahogy mi emberek adunk össze többjegyű számokat papíron...)

Ahogy láttuk a logikai műveletek bitenként párhuzamosan hajtódnak végre (ez végül is már valamiféle párhuzamosságot jelent, ezért tartjuk fejlettebbnek azokat a számítógépeket, amelyekben több bit alkot egy bájtot, azaz egy egységként kezelendő bitsorozatot, mint azokat amelyekben kevesebb), míg az aritmetikai operátoroknál általában a környező bitek értékei is szerepet játszanak az eredmény bitjeinek kialakulásában.

A hagyományos számítógépeket univerzálisnak tekinthetjük, eltekintve a nyilvánvaló fizikai korlátaiktól (nem áll rendelkezésre korlátlan háttértár stb.).