Miten tietokoneet oikeastaan toimivat?

Korkean tason katsaus siihen, miten binääriluvut saavat tietokoneet toimimaan uteliaille ei-teknisille ihmisille.

Photo by Federica Galli on Unsplash

Kuinka tietokoneet toimivat, on asia, josta olen aina ollut utelias, mutta en ole koskaan oikeastaan uskonut, että minulla olisi varsinaista pohjatietoa ymmärtääkseni sen, edes korkealla tasolla. Joten tutkimuksen tekeminen tämän blogikirjoituksen kirjoittamista varten ja sen huomaaminen, ettei se olekaan niin vaikeaa ymmärtää, on ollut hyvin palkitsevaa, ja lisäksi tietokoneiden toiminnan ymmärtäminen, jälleen kerran jopa korkealla tasolla, on aika tajunnanräjäyttävää.

Perusteellisin tapa ajatella tietokonetta on syöttö- ja tulostuskoneena. Se on aika perusajatus: tietokoneet ottavat tietoa ulkoisista lähteistä (näppäimistöltä, hiirestä, sensoreista tai internetistä), tallentavat sitä, käsittelevät sitä ja palauttavat prosessin tuloksen (Output). Muuten, jos ajattelet asiaa, heti kun tietokoneet on yhdistetty internetin kautta, syntyy loputon tulojen ja lähtöjen silmukka, kun yhden tietokoneen (vaikkapa verkkosivuston) tuotos muuttuu toisen tietokoneen syötteeksi ja niin edelleen(!!).

Me kaikki olemme melko tottuneita ja tuttuja tapoihin, joilla tietokone vastaanottaa syötteitä ja tulostaa tulosteita, olemme kaikki käyttäneet hiirtä tai näppäimistöä tai jopa puhuneet tietokoneelle, ja olemme kaikki lukeneet artikkelin joltakin verkkosivulta, kuunnelleet musiikkia tai selailleet vanhoja kuvia jne. Se, mitä emme tunne yhtä hyvin ja mitä meidän on yleensä vaikea ymmärtää, on se, miten tietokone itse asiassa käsittelee informaatiota.

Tietokone ymmärtää siis hyvin perustavanlaatuisella tasolla vain ykkösiä ja nollia, mikä tarkoittaa, että jokainen yksittäinen tulo ja lähtö muunnetaan jossain vaiheessa ykkösiksi ja nollia tai niistä. Tehokasta ykkösissä ja nollissa (joita kutsutaan myös biteiksi (BInary digiT)) on se, että niiden avulla voimme muuttaa minkä tahansa informaation sähköisiksi signaaleiksi (ON/OFF). Mieti asiaa hetki: KAIKKI, mitä näet, ajattelet tai olet vuorovaikutuksessa sen kanssa, voidaan itse asiassa muuntaa ja esittää sähköisinä signaaleina(!!!!). Informaation esittäminen sähköisinä signaaleina mahdollistaa sen, että tietokoneet voivat itse asiassa käsitellä tuota informaatiota ja muuntaa sen.

Miten siis binäärilukujärjestelmä toimii? Binääriluvut tarkoittavat sitä, että kaikki luvut lasketaan peruslukuna 2. Esimerkkinä mainittakoon, että useimmat meistä ovat tottuneet ajattelemaan lukuja 10:n emäksellä. Jos ajattelet mitä tahansa lukua, vaikkapa 2561, huomaat, että riippuen siitä, missä asennossa luku on oikealta vasemmalle, luvulla on eri arvo, joka on kymmenkertainen. Tässä esimerkissä esimerkiksi 1 on 1:n asemassa, 6 on 10:n asemassa, 5 on 100:n asemassa ja 2 on 1000:n asemassa. Näin saadaan (2×1000) + (5×100) + (6×10) + (1×1) = 2561. Binääriluvut toimivat täsmälleen samalla tavalla, mutta jokainen lisäysaskel edustaa x2 lisäystä edelliseen. Tässä on esimerkki luvun 12 esittämisestä:

Kahdeksalla bitillä voit siis esittää minkä tahansa luvun väliltä 0-255 ja 32 bitillä minkä tahansa luvun väliltä 0-4 miljardia. Saatat miettiä, mutta entä merkkijonot ja välimerkit? No, nykyään noudatamme edelleen ASCII-koodia (American Standard Code for Information Interchange), joka periaatteessa yhdistää minkä tahansa merkin tai välimerkin, myös ison alkukirjaimen, johonkin 8-bittiseen numeroon. Ja näin käytämme numeroita kirjainten esittämiseen.

Kyllä, mutta entä kuvat? No, itse asiassa kuva voidaan myös pelkistää 0:ksi ja 1:ksi. Kuten tiedät, missä tahansa näytössä on tietty määrä pikseleitä, ja jokaisella pikselillä on väri, ja kuten tiedät, RGB- tai HEX-värikoodeja käyttämällä voimme esittää värit numeroina, mikä tarkoittaa, että voimme periaatteessa kertoa tietokoneelle, minkä värinen kunkin pikselin on oltava. Sama pätee musiikkiin, videoihin ja mihin tahansa muuhun informaatioon, jonka voitte kuvitella.

Mutta miten helvetissä me ”laskemme” sähköisiä signaaleja? Siinä sähköpiirit tulevat kuvaan mukaan. Hyvin yksinkertaisella ja ylimalkaisella tasolla voimme käyttää sähköpiirejä käyttäytyä ”loogisina koneina”. Meillä voi olla piirejä, jotka tietyllä syötteellä palauttavat ulostulon riippuen logiikasta, jolla ne on rakennettu (Not, And, Or), mutta myös summia, vähennyksiä, kertolaskuja ja jakoja. Mielenkiintoista on se, että käyttämällä näitä hyvin alkeellisia tiedon esittämisen ja käsittelyn muotoja voimme itse asiassa saavuttaa ”funktionaalisen täydellisyyden”, joka on logiikassa käytetty termi, jolla viitataan joukkoon Boolen operaattoreita, jotka pystyvät esittämään kaikki mahdolliset totuustaulukot, mikä on matemaatikkojen hieno tapa sanoa, että taivas on rajana. Kaikki nämä laskutoimitukset tapahtuvat suorittimen sisällä olevassa yksikössä, jota kutsutaan ALU:ksi (Arithmetic Logic Unit).

Kuten varmaan tiedätkin, suorittimet – Central Processing Unit – ovat tietokoneiden aivoja, ja niissä kaikki laskutoimitukset tapahtuvat. Mielenkiintoista suorittimissa on se, että niillä ei ole muistia, mikä tarkoittaa, että ne eivät voi muistaa yhtään mitään. Ilman muistia kaikki laskutoimitukset menetettäisiin heti niiden suorittamisen jälkeen. Karkeasti sanottuna, ja kuten ehkä jo tiedätkin, tietokoneet käyttävät kahdenlaista muistia: RAM-muistia (Random Access Memory) ja pysyvää muistia (Persistent Memory). Voit ajatella RAM-muistia valtavana ruudukkona (matriisina), johon tallennetaan 8-bittisiä numeroita. RAM-muisti pitää kirjaa minkä tahansa 8-bittisen luvun ”osoitteista” muistimatriisissa aina, kun CPU tarvitsee sitä. Ja arvaa mitä? Näiden operaatioiden suorittamiseen käytetään täsmälleen samaa piirilogiikkaa kuin aiemmin. Tämä tarkoittaa, että käytämme täsmälleen samaa logiikkaa, jotta tietty syöte voidaan tallentaa tiettyyn ”paikkaan” muistissa tai käyttää mitä tahansa sinne tallennettua tietoa.

Tiedän, että raaputan tässä juuri ja juuri pintaa siitä, miten tietokoneet toimivat, mutta pelkästään tämän ymmärtäminen on vienyt minulta melko paljon aikaa, ja se on jo räjäyttänyt tajuntani useammin kuin muutaman kerran. Minua kiehtoo tässä se, miten tehokkaita tietokoneet ovat ja miten upotettuina ne ovat jokapäiväiseen elämäämme, siksi mielestäni on tärkeää saada edes jonkinlainen aavistus siitä, miten ne toimivat. Lisäksi, kuten aina, jos huomaat virheitä, kerro minulle.

Lopetan tämän postauksen videoon, josta pidän todella paljon, jossa Steve Jobs vertaa tietokoneita polkupyöriin tässä:

Tässä on lista upeista lähteistä, jotka löysin tehdessäni tutkimusta tätä postausta varten:

Khan Academyn 5 lyhyttä videota tietokoneiden toiminnasta: https://www.khanacademy.org/computing/computer-science/how-computers-work2/v/khan-academy-and-codeorg-introducing-how-computers-work

Crash Course -sarja tietotekniikasta on aivan mahtava: https://www.youtube.com/watch?v=O5nskjZ_GoI

Esittely logiikkaan ja totuustaulukoihin: https://medium.com/i-math/intro-to-truth-tables-boolean-algebra-73b331dd9b94

NAND-logiikka, jotta ymmärrät paremmin, miten sähköpiirit voivat suorittaa loogisia operaatioita: https://en.wikipedia.org/wiki/NAND_logic

Wikipedian sivu ASCII:lle: https://en.wikipedia.org/wiki/ASCII

Wikipedian sivu binäärikoodille, jossa on lyhyt historia binääriaritmetiikasta: https://en.wikipedia.org/wiki/Binary_code

Jos haluat kaivaa syvemmälle, tässä on hyvä paikka aloittaa: https://softwareengineering.stackexchange.com/questions/81624/how-do-computers-work/81715

Kiitos lukemisesta tähän asti.

Vastaa

Sähköpostiosoitettasi ei julkaista.