Tietokoneen toiminta¶
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, 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äskyt ja niiden tarvitseman tiedon tietokoneen keskusmuistista, suorittaa käskyt ja palauttaa tulokset takaisin keskusmuistiin.
Tietokoneen peruskomponentit¶
Määritelmän mukainen tietokone ei siis tarvitse toimiakseen kuin suorittimen ja keskusmuistin. Aika tylsää touhua.. mutta kun tietokoneeseen lisätään komponetteja ja oheislaitteita, saadaan ympäröivä maailma liitettyä tietokoneen toimintaan.
Tarkastellaan seuraavaksi yleistä tietokoneen keskusyksikköä ja peruskomponentteja.
(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¶
Suoritin (Central Processing Unit, CPU) toimii seuraavasti. Ensin suoritin hakee suoritettavat käskyt ja niiden tarvitseman datan muistista. Haetut käskyt tulkitaan varsinaisen suoritettavan operaation selvittämiseksi. Käskyissä on niiden suoritusta ohjaavia asetuksia, esimerkiksi mistä käskyn vaatima data haetaan. Kontrollilogiikka asettaa tämän perusteella suorittimen ja oheislaitteiden tilan sellaiseksi, että käsky voidaan suorittaa. Suoritin hakee datan ja tallentaa sen omaan sisäiseen muistiinsa (rekisterit). Osana suoritinta on aritmeettis-looginen yksikkö (ALU) joka suorittaa matemaattiset operaatiot, esim. yhteenlaskun rekistereissä olevalle datalle. Lopuksi, ALU kirjoittaa operaatioiden tulokset rekistereihin, josta ne lähtevät takaisin muistiin / oheislaitteille.
Loogisesti CPU jaetaan kahteen osaan: ohjaus/kontrolli- ja laskentayksikköihin. Kontrolliyksikön tehtävä on asettaa CPU:n, muistin ja käskyn vaatimien oheislaitteiden tila valmiiksi kunkin käskyn suorittamista varten. Laskentayksikkö / tietoväylä (engl. Datapath) on CPU:n "aivot", sisältäen toiminallisia osia kuten ALU:n, data- ja ohjausrekisterit, liitynnän järjestelmäväylään ja muita digitaalilogiikan komponentteja.
Yksittäinen käsky on esimerkiksi muotoa: "laske yhteen rekisterien A ja B arvot ja tallenna tulos rekisteriin A". Jokainen tietokoneen ajama ohjelma puretaan kääntäjässä / tulkissa tämänkaltaisiksi hyvin yksinkertaisiksi käskyiksi, eli konekieleksi.
Suorittimelle suunnitellaan jokin arkkitehtuuri, jonka osana määritellään tietoalkion maksimikoko, eli sanan pituus. Sana on suurin tietoalkio, jonka suoritin pystyy kerralla käsittelemään yhdellä käskyllä. Kun arkkitehtuurin sanotaan olevan 8-bittinen, tällöin tietoalkio kuvataan 8 bittisenä binäärilukuna, ja näinollen sanan pituus on 8 bittiä. Taas 32-bittisessä arkkitehtuurissa sanan pituus on 32-bittiä. Bitit ja sanat tulevat varsin tutuiksi ensi luennolla..
Mitä isompi sanan koko on, sitä enemmän tietoa suoritin pystyy kerralla per käsky käsittelemään, josta syystä tietokoneiden arkkitehtuurit kasvavat kokoajan kohti isompaa bittimäärää.
Sulautetuissa järjestelmissä usein vieläkin arkkitehtuuri on 8-bittinen, esimerkiksi Arduinossa. Tosin 32-bittiset MCUt valtaavat alaa esimerkiksi älypuhelimissa. Kurssin laite SensorTag on 32-bittinen. Nyky-PC:t ovat 64-bittisiä arkkitehtuuriltaan.
Järjestelmäväylä¶
Järjestelmäväylä (system bus) kytkee CPU:n ja ulkoiset komponentit (kuten muistin) toisiinsa. Väylä voidaan ajatella joukkona rinnakkaisia johtimia, ts. linjoja, joihin väylän laitteet kytkeytyvät. Väylässä kulkee kolmentyyppisiä signaaleja, joilla on omat linjansa:
- Dataväylässä kulkee kaksisuuntaisesti siirrettävä data
- Osoiteväylä ilmaisee tiedonsiirron kohteen, esim. muistiosoitteen
- 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.
Dataväylän rinnakkaisten linjojen määrä heijastaa sanan pituutta. 8-bittisestä arkkitehtuurissa dataväylässä on 8 rinnakkaista linjaa. Vastavasti 32-bittisessä arkkitehtuurissa dataväylässä on 32 linjaa.
Osoiteväylän leveys riippuu valitun oheislaitteen muistiavaruuden koosta. Isompi muistiavaruus tarvitsee enemmän bittejä osoittamaan (yksilöimään) muistipaikkoja.
Nykyään väyläratkaisut eivät aina kirjaimellisesti ole rinnakkaisia linjoja.
Muisti¶
Keskusmuisti (käyttömuisti / Random access memory, RAM) toimii käskyjen ja prosessoitavan tiedon säilytyspaikkana. Muistissa kaikki tieto on tallennettu "bittijonoon", joka on jaettu muistipaikkoihin. 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 käskyjen mukaan. Ohjelman käskyissä usein kerrotaan muistipaikassa olevan muuttujan tyyppi (kokonaisluku, liukuluku, jne).
Muistin koko saadaan laskettua kaavalla
2^n
, jossa n on osoitelinjojen määrä. Koko siis kertoo, montako yksilöityä muistipaikkaa muistipiirille mahtuu. Yhdessä muistipaikassa tyypillisesti on yksi sana. Mutta muitakin ratkaisuja on. Muistin kanssa toimitaan seuraavasti. Suoritin asettaa osoitelinjoille muistipaikan osoitetta vastaavat rinnakkaiset bitit ja kertoo ohjaussignaalilla onko kyseessä luku vai kirjoitus-operaatio. Kirjoitusoperaatiossa suoritin asettaa myös dataväylälle tietoalkion arvoa vastaavat bitit. Lukuoperaatiossa taas muistipiiri asettaa tietoalkion dataväylälle.
Kuvassa kirjoitusoperaatio.
Tietokoneessa on useita eri muisteja, jaettuna hierarkisesti. Kun muistista ladataan käskyjä tai tietoa, tietoyksiköt kulkevat hierarkian läpi. Ylimmällä tasolla (eli lähinnä CPU:ta) ovat sen omat rekisterit, CPUn sisällä on useita välimuisteja, ulkoinen keskusmuisti, massamuistit I/O-väylässä ja lopulta palvelimet verkossa. Mitä ylempänä hierarkiassa ollaan, sitä kooltaan pienempää, nopeampaa ja kalliimpaa (per bitti) muisti on.
Välimuistin idea on säilyttää sellaista tietoa, jota CPU mahdollisesti!! seuraavaksi tarvitsee, jolloin se tieto olisi nopeasti saatavilla. CPU:n hakiessa dataa keskusmuistista, dataa haetaankin yhden muistipaikan sijaan useista (vierekkäisistä) muistipaikoista, perustuen sisäisiin algoritmeihin, jotka koittavat päätellä mitä tietoa keskusmuistista se seuraavaksi tarvitsisi. Nyt kun CPU hakee seuraavan käskyn dataa, se onkin jo välimuistissa odottamassa, eikä hakua tarvitse ulottaa keskusmuistiin asti. Välimuisteja on useita eri kokoisia hierarkiassa.
Nykytietokoneissa ohjelmille tarjotaan niiden oma alue muistista virtuaalimuistina (näennäismuisti, engl. virtual memory), joka voi sijaita kokonaan keskusmuistissa tai jaettuna keskusmuistiin ja massamuistiin. Ohjelmalle muistin sijainti ei kuitenkaan näy, vaan kaikkia muistialueita käsitellään saman osoiteavaruuden kautta. Käyttöjärjestelmä huolehtii muistiosoitusten peilaamisesta sinne missä muisti sijaitsee. Ideana on, että näin ohjelmille voidaan tarjota keskusmuistia isompia muistialueita ja että keskusmuistia voidaan jakaa samanaikaisesti ajettavien ohjelmien kesken.
I/O-väylä¶
I/O-väylä (I/O bus) liittää suorittimen toimintaympäristöönsä. Tyypillisiä väylään kytkettyjä I/O-laitteita ovat:
- Tietokoneen ja ihmisen vuorovaikutuksen mahdollistavat laitteet: näyttö, näppäimistö ja hiiri, jne
- Tietokoneen toimintaa tukevat laitteet, kuten massamuistit (kovalevy, CD/DVD-kirjoittimet)
- Kommunikaatio: tietoverkot, langaton tiedonsiirto, yms..
Laitteet liitetään I/O-väylään sovittimien kautta ja jokaisella niistä on oma osoite väylässä. Väylässä kulkee myös tietenkin dataa ja ohjaussignaaleja. Usein tarvitaan I/O-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.
Varsinkin sulautetuissa järjestelmissä komponenteilla ja oheislaitteilla voi olla myös eri arkkitehtuuri kuin suorittimella. Esimerkiksi suoritin on 32-bittinen, mutta oheislaite 8-bittinen.
Suoritin juttelee I/O-väylän kautta laitteiden kanssa kahdella tavalla:
- pollaa (kysyä tilaa) laitteilta I/O-väylässä vuoronperään. 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 vastaavasti.
Jälkimmäinen tapa on parempi, koska suorittimelle jää aikaa tehdä muutakin kuin vain morjestella hitaita oheislaitteita kysellen mitä niille kuuluu. Sulautetuissa järjestelmissä on käytössä molempia tapoja, riippuen oheislaitteden ja -komponenttien toteutuksesta.
Kuvassa alla näppäimistön lähettämä keskeytys, jonka yhteydessä tieto painetusta näppäimestä tallennetaan muistiin. Suoritin sitten reagoi keskeytykseen ja lukee näppäimen arvon muistista.
Lopuksi¶
Keskusyksikön sisäiseen toimintaan palaamme tarkemmin kurssin tietokonetekniikan osuudessa.
Anna palautetta
Kommentteja materiaalista?