Tietokoneen toiminta¶
I think there is a world market for maybe five computers.
- Thomas Watson, chairman of IBM, 1943
- Thomas Watson, chairman of IBM, 1943
There is no reason anyone would want a computer in their home.
- Ken Olson, chairman of Digital Equipment Corporation (DEC), 1977
- Ken Olson, chairman of Digital Equipment Corporation (DEC), 1977
Osaamistavoitteet: Tämän materiaalin läpikäytyäsi tiedät mitkä ovat tietokoneen peruskomponentit ja miten tietokone yleisellä tasolla toimii.
Tietokone on yleiskäyttöinen laite/kone, joka käsittelee numeeris-loogista tietoa toimintaohjeidensa (ts. ohjelmoinnin) mukaisesti. Ohjelma koostuu joukosta käskyjä, jotka on tallennettu keskusmuistiin suorittimien ymmärtämässä muodossa. Suoritin lukee käskyn ja sen tarvitseman datan tietokoneen keskusmuistista, suorittaa käskyn saamalleen datalle ja palauttaa tulokset takaisin keskusmuistiin. Sen jälkeen suoritin hakee seuraavan käskyn ja lähtee suorittamaan sitä. Pelkistetysti tietokone vain suorittaa tätä sykliä loputtomasti.
Tietokonejärjestelmä kuvaa miten eri komponentit on kytketty yhteen toimivaksi tietokoneeksi ja miten tässä järjestelmässä eri komponentteja käytetään ja miten siinä tietokoneohjelmat suoritetaan.
Tietokoneen peruskomponentit¶
Määritelmän mukainen tietokone ei siis tarvitse toimiakseen kuin suorittimen ja keskusmuistin. Loppupeleissä aika tylsää touhua.. mutta kun tietokoneeseen lisätään komponetteja ja oheislaitteita, saadaan ympäröivä maailma liitettyä tietokoneen toimintaan. Oheislaitteet kytketään väylien kautta, joka mahdollistaa tiedonsiirron eri komponenttien välillä.
Kuvassa yleinen modernin tietokoneen korkean tason arkkitehtuuri.
Hox! Käytämme tästä eteenpäin tekstissä myös englanninkielisiä termejä ja/tai lyhenteitä. Esitämme suomenkielisen termin yhteydessä usein myös englanninkielisen vastineen. Kaikille termeille ei ole vakiintunutta suomenkielistä käännöstä.)
Suoritin¶
Loogisesti suoritin (Central Processing Unit, CPU) jaetaan kahteen osaan: ohjausosaan (kontrolliyksikköön) ja laskentayksikköön. Ohjausosan tehtävä on asettaa CPU:n, muistin ja käskyn vaatimien oheiskomponenttien tila valmiiksi kunkin käskyn suorittamista varten. Laskentayksikkö (engl. Datapath) sisältää käskyjen suorittamisen toiminnallisia osia kuten ALU:n, data- ja ohjausrekisterit, liitynnän järjestelmäväylään ja muita komponentteja, joilla optimoidaan käskyn suoritusta.
Suoritin toimii seuraavasti. Ensin suorittimen ohjausosa / kontrolliyksikkö hakee suoritettavat konekieliset käskyt ja niiden tarvitseman datan muistista. Haetut käskyt tulkitaan suoritettavan operaation selvittämiseksi ja käskyn vaatima data viedään vastaavasti suorittimen sisäiseen muistiin (rekisterit). Sitten ohjausosa asettaa suorittimen ja sen oheiskomponenttien tilan sellaiseksi, että käsky voidaan suorittaa. Osana suoritinta aritmeettis-looginen yksikkö (ALU) suorittaa konekieliset käskyt, kuten matemaattiset operaatiot, rekistereissä olevalle datalle. Kun käsky on suoritettu, ALU kirjoittaa operaatioiden tulokset rekistereihin, josta ohjausosa vie ne takaisin keskusmuistiin ja väyläohjauksen kanssa pitemmälle oheislaitteisiin.
Yksittäinen konekielen käsky tekee yleensä hyvin yksinkertaisia asioita, esimerkiksi
add A,B
eli laske yhteen rekisterien A ja B arvot ja tallenna tulos rekisteriin A. Jokainen tietokoneen ajama korkeamman tason ohjelmointikielellä (kuten C) ohjelma puretaan kääntäjässä / tulkissa loppujen lopuksi konekieleksi. Kuten arvata saattaa, yksittäisen korkean tason kielen käskyn toteutus saattaa vaatia satoja rivejä konekieltä. Tästä lisää kurssin TKJ-osuudessa..Suorittimelle luodaan suunnitteluvaiheessa arkkitehtuuri laskentaa/tiedonkäsittelyä varten, joka heijastuu sekä sen sisäisen digitaalilogiikan, ohjausosan ja oheiskomponenttien että konekielisten ohjelmien toteutusta. Arkkitehtuurissa mm. määritellään suorittimen käsittelemän tietoalkion maksimikoko, eli sanan pituus. Sana on suurin tietoalkio (binääriluku), jonka suoritin pystyy kerralla käsittelemään yhdellä käskyllä. Eli, mitä isompi sanan koko on, sitä enemmän tietoa (=isompia binäärilukuja) suoritin pystyy kerralla käsittelemään.
Esimerkki. Kun arkkitehtuuri on 8-bittinen, ts. sanan pituus on 8 bittiä jolloin se voi saada lukuarvot 0-255. Tässä arkkitehtuurissa jokainen tietoalkio kuvataan suorittimelle 8 bittisenä binäärilukuna. Tässä arkkitehtuurissa isompien lukujen (esim. 16-bittiset luvut) käsittely vaatisi lisää digitaalilogiikkaa suorittimelle. Noh, murehdimme tätä TKJ-osuudessa. Taas 32-bittisessä arkkitehtuurissa sanan pituus on 32-bittiä. Bitit ja sanat tulevat varsin tutuiksi ensi luennolla..
Laskentatehon lisäämiseksi, tässä isomman datamäärän käsittelemiseksi kerralla, suorittimien arkkitehtuurit kasvavat kokoajan kohti isompaa bittimäärää. Esimerkiksi nyky-PC:t ovat 64-bittisiä arkkitehtuuriltaan. Sulautetuissa järjestelmissä usein vieläkin arkkitehtuuri on 8-bittinen, esimerkiksi Arduinossa. Tosin 32-bittiset MCUt valtaavat alaa esimerkiksi älypuhelimissa. Kurssin laitteen SensorTag:n suoritin on 32-bittinen. Arkkitehtuureja käsitellään syvemmin kurssin Tietokonejärjestelmät-osuudessa.
Järjestelmäväylä¶
Järjestelmäväylä (engl. system bus) kytkee CPU:n ja ulkoiset komponentit (kuten muistin) toisiinsa. Väylä voidaan ajatella joukkona rinnakkaisia sähköisiä johtimia, ts. linjoja, joihin väylän laitteet kytkeytyvät. (Väyläratkaisut eivät kirjaimellisesti fyysisesti ole rinnakkaisia sähköisiä linjoja.)
Järjestelmäväylässä kulkee kolmentyyppisiä signaaleja (joilla on omat linjansa):
Dataväylässä kulkee kaksisuuntaisesti siirrettävä data. Dataväylän rinnakkaisten linjojen määrä, ts. leveys, heijastaa sanan pituutta. 8-bittisessä arkkitehtuurissa dataväylässä on 8 rinnakkaista linjaa. Vastavasti 32-bittisessä arkkitehtuurissa dataväylässä on 32 linjaa.
Esimerkki. Jos arkkitehtuuri on 8-bittinen, dataväylässä tarvitaan 8 rinnakkaista linjaa.
Osoiteväylä ilmaisee tiedonsiirron kohteen, esim. muistiosoitteen keskusmuistissa. Osoite siis tarvitaan, jotta haluttu tietoalkio voidaan yksilöidä, ts. varata ja säilyttää omassa muistipaikassaan. Osoiteväylän leveys riippuu muistipaikkojen määrästä eli muistiavaruuden koosta. Isompi muistiavaruus tarvitsee enemmän bittejä osoittamaan (yksilöimään) muistipaikkoja.
Esimerkki. Kun osoiteväylän leveys on 16 bittiä, muistissa voidaan osoittaa 65536 (2^16) muistipaikkaa.
Ohjaussignaalit ohjaavat väylän toimintaa. Esimerkiksi kertovat suoritettavan muistioperaation (luku / kirjoitus). Oheislaitteet voivat myös lähettää ohjaussignaaleja suorittimelle kertoakseen esim. näppäinpainalluksesta tai vastaanotetusta viestistä.
Esimerkki. Ohjausväylän leveys on 1 , jos tarvitsemme vain luku- ja kirjoitusoperaatiot, jotka vastaisivat yhden bitin arvoja 0 ja 1.
Muisti¶
Keskusmuisti (käyttömuisti / Random access memory, RAM) toimii käskyjen ja prosessoitavan tiedon säilytyspaikkana, joka on kytketty suorittimeen nopean väylän kautta. Muistissa kaikki tieto on tallennettu "bittijonoon", joka on jaettu muistipaikkoihin. Muistipaikka koostuu osoitteesta ja siihen tallennettavasta tietoalkiosta. Muistipaikan koko on sidoksissa prosessoriarkkitehtuuriin, eli 8-bittisessä laitteessa muistipaikan koko on 8 bittiä, jne. Muistipaikan sisällön tulkitseminen on CPUn tehtävä ohjelman konekäskyjen mukaan. Käskyissä on sisäänrakennettuna tieto siitä millaista datatyyppiä ne käsittelee, esim. kokonaisluku tai desimaaliluku.
Nyt, kun
n bittiä
on osoiteväylän leveys, muistin koko saadaan laskettua kaavalla 2^n
. Koko siis kertoo, montako yksilöityä muistipaikkaa muistipiirille mahtuu. Yhdessä muistipaikassa yleensä on yksi sana (mutta muitakin ratkaisuja on olemassa). Suorittimen ohjausosa toimii muistin kanssa seuraavasti. Ohjausosa asettaa osoitelinjoille muistipaikan osoitetta vastaavat rinnakkaiset bitit ja kertoo ohjaussignaalilla onko kyseessä luku- vai kirjoitus-operaatio. Lukuoperaatiossa muistin ohjausosa hakee tiedon muistipaikastaan ja asettaa tietoalkion dataväylälle, josta suorittimen ohjausosa sen lukee ja tallentaa tiedon käskyssä mainittuun suorittimen rekisteriin. Kirjoitusoperaatiossa suorittimen ohjausosa asettaa suorittimen rekisteristä käskyn tuloksen dataväylälle, josta muistin ohjausosa se lukee ja vie datan osoitettuun muistipaikkaan.
Moderni tietokoneessa on useita eri muisteja, jaettuna hierarkisesti. Kun muistista ladataan käskyjä tai tietoa, tietoalkiot kulkevat hierarkian läpi. Ylimmällä tasolla (eli lähinnä CPU:ta) ovat sen omat rekisterit, sitten CPUn sisällä ja ulkopuolella on nykyään useita välimuisteja, sitten ulkoinen keskusmuisti, sitten massamuistit kuten kovalevyt I/O-väylässä ja lopulta palvelimet verkossa. Mitä ylempänä hierarkiassa ollaan, sitä kooltaan pienempää, nopeampaa ja kalliimpaa muisti per bitti on.
Välimuistin idea on säilyttää sellaista tietoa, jota suoritin mahdollisesti!! seuraavaksi tarvitsee, jolloin se tieto olisi nopeasti saatavilla. Ohjausosan hakiessa dataa keskusmuistista, dataa haetaankin yhden muistipaikan sijaan useista (vierekkäisistä) muistipaikoista, perustuen sisäisiin algoritmeihin, jotka koittavat päätellä mitä tietoa keskusmuistista ohjelma seuraavaksi tarvitsisi. Tämä päättely on ihan oma taiteenlajinsa. Nyt kun suoritin tarvitsee seuraavan käskyn dataa, se onkin jo välimuistissa odottamassa, eikä hakua tarvitse ulottaa keskusmuistiin asti. Välimuisteja on useita eri kokoisia aseteltuna hierarkiaan.
Nykytietokoneissa, ja esim. tehokkaissa laskentapalvelimissa, lisäksi ohjelmille tarjotaan niiden oma alue tietokoneen näkemästä eri komponenttien muistista koostuvasta fyysisestä muistista virtuaalimuistina (näennäismuisti, engl. virtual memory). Virtuaalimuisti tyypillisesti sijaitsee kokonaan keskusmuistissa tai jaettuna keskusmuistiin ja massamuistiin. Ohjelmalle muistin fyysinen sijainti ei kuitenkaan näy, vaan kaikkia muistialueita käsitellään saman muistiavaruuden kautta. Tässä siis käyttöjärjestelmä (ja firmis) huolehtii muistiosoitusten peilaamisesta sinne missä muisti sijaitsee fyysisesti. Ideana on, että yhtäältä ohjelmille voidaan tarjota keskusmuistia isompia muistialueita ottamalla massamuistia mukaan ja että toisaalta keskusmuistia voidaan jakaa samanaikaisesti ajettavien ohjelmien kesken.
I/O-väylä¶
Yleisesti tietokoneen eri väylät kytkeytyvät toisiinsa siltojen (I/O-silta, engl. I/O bridge) kautta. Toteutuksesta ja liitettävistä komponenteista johtuen eri väylissä voi olla eri määrä linjoja tai eri tiedonsiirtonopeus, jolloin tarvitaan siltoja väliin luomaan loogisen ja fyysisen yhteyden ja puskuroimaan siirrettävää dataa.
I/O-väylä (engl. I/O bus) liittää suorittimen toimintaympäristöönsä eli tietokoneen oheislaitteisiin. Tyypillisiä väylään kytkettyjä I/O-laitteita ovat:
- Tietokoneen toimintaa ja tiedon säilytystä tukevat laitteet, kuten massamuistit (kovalevy, CD/DVD-kirjoittimet).
- Tietokoneen ja ihmisen vuorovaikutuksen mahdollistavat laitteet: näyttö, näppäimistö ja hiiri, jne.
- Kommunikaatio: tietoverkot, langaton tiedonsiirto, yms..
Laitteet liitetään I/O-väylään sovittimien kautta ja jokaisella laitteella on oma osoitteensa I/O-väylässä. Samoin kuten järjestelmäväylässä, I/O-väylässä kulkee osoitteita, dataa ja ohjaussignaaleja. Usein tarvitaan silta tarjoamaan rajapinnan järjestelmäväylästä I/O-väylään, koska järjestelmäväylä on tyypillisesti hyvin nopea verrattuna I/O-väylään ja oheislaitteilla voi olla eri arkkitehtuuri kuin suorittimella. Tällöin nopeamassa päässä väylää dataa joudutaan puskuroimaan.
Varsinkin sulautetuissa järjestelmissä komponenteilla ja oheislaitteilla voi olla myös eri arkkitehtuuri kuin suorittimella. Esimerkiksi suoritin on 32-bittinen, mutta oheislaite 8-bittinen.
Kommunikointi I/O-väylän kautta on huomattavasta hitaampaan kuin muistin kanssa. Suoritin juttelee I/O-väylän kautta laitteiden kanssa kahdella tavalla:
- pollaa (kysyä tilaa) vuoronperään I/O-väylän laitteilta. Tila saattaa vaatia reagointia. Esimerkiksi, jos uutta dataa on saatavilla niin se voidaan siirtää keskusmuistiin ohjelmien käyttöön.
- Laite voi lähettää suorittimelle keskeytyksen (ts. ohjaussignaalin), joka kertoo että laitteen tilassa on tapahtunut muutos. Suoritin sitten reagoi tähän signaaliin joko firmiksessä (esim. PC:ssä näppäinpainallus) tai ohjelmoinnin mukaisesti (sulautetun laitteen kosketusnäytön kosketus).
Jälkimmäinen, keskeytyspohjainen tapa on parempi, koska suorittimelle jää aikaa tehdä muutakin kuin vain morjestella hitaita oheislaitteita I/O-väylän kautta, kysellen mitä niille kuuluu ja odotellen sen näkökulmasta "hitaasti" tulevaa vastausta. Sulautetuissa järjestelmissä on käytössä molempia tapoja, riippuen oheislaitteden ja -komponenttien toteutuksesta. Pollaus on usein halvempi tapa toteuttaa sulautettuja oheislaitteita, kuten antureita.
Kuvassa alla PC-näppäimistön lähettämä keskeytys, jonka yhteydessä tieto painetusta näppäimestä tallennetaan ohjausosien avulla suoraan muistiin. Suoritin sitten reagoi keskeytykseen ja lukee näppäimen arvon muistista.
Lopuksi¶
Keskusyksikön sisäiseen toimintaan palaamme tarkemmin kurssin TKJ-osuudessa..
Anna palautetta
Kommentteja materiaalista?