Hogyan működnek valójában a számítógépek?
Egy magas szintű áttekintés arról, hogyan működnek a számítógépek a bináris számok segítségével a kíváncsi, nem műszaki érdeklődők számára.
Az, hogy hogyan működnek a számítógépek, olyasmi, amire mindig is kíváncsi voltam, de valójában sosem gondoltam, hogy ténylegesen meglesznek az alapismereteim ahhoz, hogy megértsem, még magas szinten is. Így a kutatás elvégzése, hogy megírjam ezt a blogbejegyzést, és rájöttem, hogy nem is olyan nehéz megérteni, nagyon kifizetődő volt, ráadásul az, hogy megértettem, hogyan működnek a számítógépek, megint csak magas szinten, eléggé észbontó.
A számítógépet a legalapvetőbb módon úgy kell elképzelni, mint egy Input/Output gépet. Ez egy elég alapvető elképzelés: a számítógépek külső forrásból (billentyűzet, egér, érzékelők vagy az internet) információt vesznek fel, tárolják, feldolgozzák, és visszaadják a folyamat eredményét (Output). Egyébként, ha belegondolsz, abban a pillanatban, amikor a számítógépek az interneten keresztül összekapcsolódnak, a bemenetek és kimenetek végtelen ciklusa jön létre, mivel az egyik számítógép kimenete (mondjuk egy weboldal) egy másik számítógép bemenetévé válik, és így tovább(!!).
Most, mindannyian eléggé megszoktuk és ismerjük azokat a módokat, amelyekkel egy számítógép bemenetet fogad és valamilyen kimenetet ad ki, mindannyian használtunk már egeret vagy billentyűzetet, vagy akár beszéltünk is egy számítógéppel, és mindannyian olvastunk már cikket egy weboldalon, hallgattunk már zenét vagy böngésztünk már néhány régi képet stb. Amit nem ismerünk annyira, és amit általában nehezen értünk meg, az az, hogy a számítógép valójában hogyan dolgozza fel az információt.
Szóval igen, egy nagyon alapvető szinten a számítógép csak 1-eseket és 0-akat ért, ami azt jelenti, hogy minden egyes bemenetet és kimenetet valamilyen ponton 1-esekre és 0-akra vagy azokból fordítanak át. Az 1-ek és 0-k (más néven bitek -a BInary digiT-ről) azért erősek, mert lehetővé teszik, hogy bármilyen információt elektromos jelekké (ON/OFF) alakítsunk át. Kérem, szánjon rá egy pillanatot, hogy elgondolkodjon ezen: MINDEN, amit látunk, gondolunk vagy amivel kapcsolatba kerülünk, valójában elektromos jelekké(!!!!) alakítható és ábrázolható. Az információ elektromos jelekként való ábrázolása az, ami lehetővé teszi a számítógépek számára, hogy ténylegesen feldolgozzák és átalakítsák az információt.
Hogyan működik tehát a bináris számrendszer? A bináris számok azt jelentik, hogy minden számot a 2-es bázissal számolunk. Példának okáért a legtöbben 10-es bázissal szoktak számokra gondolni. Ha bármilyen számra gondolunk, mondjuk 2561-re, láthatjuk, hogy attól függően, hogy a szám jobbról balra milyen pozíciót foglal el, a számnak más értéke van, ami a tíz többszöröse. Ebben a példában például az 1 az 1-es pozíciót, a 6 a 10-es pozíciót, az 5 a 100-as pozíciót, a 2 pedig az 1000-es pozíciót foglalja el. Így (2×1000) + (5×100) + (6×10) + (1×1) = 2561. A bináris számok pontosan ugyanígy működnek, de minden növekményes lépés az előzőhöz képest egy x2-es növekményt jelent. Íme egy példa a 12-es szám ábrázolására:
Szóval 8 bittel 0 és 255 közötti bármely számot ábrázolhatunk, 32 bittel pedig 0 és 4 milliárd közötti bármely számot. Most talán arra gondolsz, hogy persze, de mi van a karakterláncokkal és az írásjelekkel? Nos, a mai napig az ASCII-t (American Standard Code for Information Interchange) követjük, amely alapvetően minden karaktert vagy írásjelet, beleértve a nagybetűket is, a 8 bites számok egyikéhez rendel. És így használjuk a számokat a betűk ábrázolására.
Naná, de mi a helyzet a képekkel? Nos, tulajdonképpen egy kép is redukálható 0-ra és 1-re. Mint tudod, minden képernyőnek van egy adott számú képpontja, és minden képpontnak van egy színe, és mint tudod, az RGB vagy HEX színkódok használatával a színeket számokként tudjuk ábrázolni, ami azt jelenti, hogy alapvetően meg tudjuk mondani a számítógépnek, hogy az egyes képpontoknak milyen színűnek kell lenniük. Ugyanez vonatkozik a zenére, a videóra és bármilyen más típusú információra, amit csak el tudsz képzelni.
De hogy a fenébe “számoljuk ki” az elektromos jeleket? Itt jönnek a képbe az elektromos áramkörök. Egy nagyon alapvető és leegyszerűsített szinten az elektromos áramkörökkel “logikai gépként” viselkedhetünk. Létezhetnek olyan áramköreink, amelyek egy adott bemenetet megadva egy kimenetet adnak vissza, attól függően, hogy milyen logikával építették fel őket (Nem, És, Vagy), de összegeket, kivonásokat, szorzásokat és osztásokat is. Az érdekes az, hogy az információ ábrázolásának és feldolgozásának ezen nagyon elemi formáit használva valóban elérhetjük a “funkcionális teljességet”, ami a logikában használt kifejezés, amely a boole-operátorok olyan halmazára utal, amely képes az összes lehetséges igazságtáblát reprezentálni, ami a matematikusok díszes módja annak, hogy azt mondják, hogy a határ a csillagos ég. Mindezek a számítások a CPU-n belül egy ALU (Arithmetic Logic Unit) nevű egységben történnek.
Amint azt valószínűleg tudod, a CPU-k – Central Processing Unit – a számítógépek agya, és itt történik minden számítás. A CPU-k érdekessége, hogy nincs memóriájuk, ami azt jelenti, hogy nem tudnak emlékezni semmire. Memória nélkül minden számítás elveszne rögtön azután, hogy elvégeztük. Nagyjából, és ahogy azt már talán tudod, kétféle memóriát használnak a számítógépeink: RAM, ami a Random Access Memory (véletlen hozzáférésű memória) és a Persistent Memory (állandó memória) rövidítése. A RAM-memóriát úgy képzelhetjük el, mint egy hatalmas rácsot (mátrixot), amely 8 bites számokat tárol. A RAM-memória számon tartja bármely adott 8 bites szám “címét” a memóriamátrixban, amikor a CPU-nak szüksége van rá. És képzeld el! A műveletek elvégzéséhez pontosan ugyanazt az áramköri logikát használjuk, mint korábban. Vagyis pontosan ugyanazt a logikát használjuk ahhoz, hogy egy adott bemenetet a memória egy adott “helyén” tároljunk, vagy hogy hozzáférjünk a memóriában tárolt bármilyen információhoz.
Tudom, hogy alig karcolom itt a számítógépek működésének felszínét, de csak ennek megértése elég sok időt vett igénybe, és már nem egyszer elszállt az agyam. Engem az nyűgöz le, hogy a számítógépek milyen erősek és mennyire beágyazódtak a mindennapi életünkbe, ezért is tartom fontosnak, hogy legalább egy kis intuícióval rendelkezzünk a működésükről. Továbbá, mint mindig, ha bármilyen hibát észreveszel, kérlek, jelezd nekem.
Ezt a bejegyzést egy általam nagyon kedvelt videóval fejezem be, amelyben Steve Jobs a számítógépeket a kerékpárokhoz hasonlítja itt:
Itt van egy lista csodálatos forrásokról, amelyeket találtam, miközben kutattam ehhez a bejegyzéshez:
Khan Academy 5 rövid videója a számítógépek működéséről: https://www.khanacademy.org/computing/computer-science/how-computers-work2/v/khan-academy-and-codeorg-introducing-how-computers-work
Crash Course sorozat az informatikáról teljesen elképesztő: https://www.youtube.com/watch?v=O5nskjZ_GoI
Egy bevezetés a logikába és az igazságtáblákba: https://medium.com/i-math/intro-to-truth-tables-boolean-algebra-73b331dd9b94
NAND logika, hogy jobban megértsük, hogyan tudnak az elektromos áramkörök logikai műveleteket végrehajtani: https://en.wikipedia.org/wiki/NAND_logic
A Wikipedia oldala az ASCII-ről: https://en.wikipedia.org/wiki/ASCII
Wikipedia oldal a bináris kódról, a bináris aritmetika rövid történetével: https://en.wikipedia.org/wiki/Binary_code
Ha mélyebbre akarsz ásni, itt van egy remek kiindulópont: https://softwareengineering.stackexchange.com/questions/81624/how-do-computers-work/81715
Köszönöm, hogy eddig is olvastál.