Tietokonesarjamme päättyy tähän osaan. Matkamme alkoi pienimmistä osista, joten se on hyvä päättää kaikkein suurimpiin rakennelmiin. Mikä ihmeellisintä, pienikin on yllättävän suurta. Tietojenkäsittelyssä usein hyödyllisimmät ideat ovat periaatteeltaan yksinkertaisimpia, kuten viime kerralla nähtiin erityyppisen tiedon muodossa.
Astetta isompi mittakaava
Olemme tarkastelleet teoreettista prosessoria, joka suorittaa helppoja käskyjä ja jossa on muutama rekisteri. Todellisessa prosessorissa on muutama eroavaisuus tähän. Nopeus voi olla monta sataa miljoonaa käskyä sekunnissa, mikäli käskyjen hakeminen muistista ei muodostu pullonkaulaksi. Tavallisten rekisterien lisäksi prosessoreissa on joukko graafiseen numeronmurskaukseen sopivia rekistereitä sekä runsaasti näitä käsitteleviä käskyjä. Koska raa'an nopeuden kasvattamisessa fysiikan lait ovat tulleet vastaan, tehoa lisätään älykkyydellä. Vaikkapa käskyjen hakeminen muistista on hidasta, joten prosessori ennakoi tulevien hyppyjen kohteita ja hakee niitä valmiiksi. Yhtäaikainen tekeminen on kova sana, joten prosessorin eri osat voivat suorittaa peräkkäisiä käskyjä samaan aikaan.
Nykyään luultavasti keskimääräisessä tiskikoneessakin on enemmän laskentatehoa kuin kuulentoihin tarvituissa huoneenkokoisissa koneissa. Kiinnostavin mullistus on kuitenkin älypuhelinten prosessorien tehon roima kasvu: taskuun mahtuu saman verran tehoa kuin kevyeen läppäriin. Samaan aikaan tietokoneprosessorit ovat muuttuneet entistä vähävirtaisemmiksi.
Kirjoitushetkellä suurimmassa supertietokoneessa, kiinalaisessa Sunway TaihuLightissa, on yli kymmenen miljoonaa prosessoriydintä, jotka murskaavat numeroita samanaikaisesti. Kone muuten kuluttaa energiatehokkuudestaan huolimatta 15 megawattia virtaa — se riittäisi muutamalle tuhannelle kotitaloudelle.
Suurimmat ohjelmat
Viime kerralla esiteltiin käyttöjärjestelmä, ohjelma joka piilottaa tietokoneen tekniset yksityiskohdat muilta ohjelmilta. Koska käyttöjärjestelmän tehtäviin kuuluu laitekirjon hallinnan lisäksi muun muassa kiva käyttöliittymä, funktiolaskin ja mieluusti musiikkisoitin, se on kohtalaisen valtava ohjelma.
Todella pieni tekstipohjainen käyttöjärjestelmä on vielä yliopiston kurssiprojektin kokoinen, noin 10 000 riviä C-kielistä koodia. Vuonna 1993 julkaistu Windows NT oli aikansa suurin ohjelmistoprojekti, joka sisälsi kuusi miljoonaa riviä lähdekoodia ja vaati enimmillään 250 ihmisen työpanoksen neljän vuoden ajan. Tuoreemmissa versioissa koodirivejä on puolensataa miljoonaa, ja muut käyttöjärjestelmät ovat samaa luokkaa. Tiimien koko lasketaan tuhansissa.
Ohjelmointikielten kääntäjät ovat niin ikään käyttöjärjestelmien veroisia projekteja. Nykyaikaiset kääntäjät käyttävät valtavaa kasaa kikkoja ohjelmien nopeuttamiseen. Tärkeä osa on esimerkiksi turhan työn poisto: vaikkapa jos luku tiedetään jaolliseksi neljällä, ohjelman ei tarvitse tutkia erikseen, onko se jaollinen kahdella. Osa menetelmistä on aktiivisen tutkimustyön kohteita, joihin liittyy avoimia matematiikan kysymyksiä.Pari-kolmekymmentä vuotta sitten taitava ohjelmoija saattoi kirjoittaa monta kertaa nopeammin toimivaa konekieltä kuin hyvä kääntäjä. Nykyään harva edes näkee, ja vielä harvempi ymmärtää, kääntäjän tiivistämää konekieltä.
Tietojenkäsittely on ala, jonka perusteet ovat yksinkertaisia ja matemaattisesti kauniita. Sen voima tulee siitä, kuinka kaiken voi skaalata monta kertaluokkaa isommaksi ja yhdistää muihin rakennuspalikoihin. Jättiläisten hartioille on hyvä rakentaa pelejä, pikaviestimiä ja matikkablogeja.
Kokeiltavaksi ja pohdittavaksi
- Avaa tietokoneen Tehtävienhallinta (Windows) tai Järjestelmän valvonta (Mac) tai vastaava (muut). Tutki sen välilehtiä käyttäen, mitä kaikkea koneessa on käynnissä.
- Ohjelmoinnin harrastaja: kirjoita lyhyt ohjelma valitsemallasi käännetyllä kielellä ja tutustu sen konekieliseen muotoon (tapa riippuu kääntäjästä).
- Jätä palautetta tästä sarjasta kommentteihin. Mistä pidit, mistä et? Olisiko sarja algoritmeista ja tietorakenteista, ohjelmoinnin palikoista, kiinnostava?
Ei kommentteja:
Lähetä kommentti
Kommentit ovat moderoituja — yritän hyväksyä kommenttisi mahdollisimman pian. Voit kirjoittaa kommenttiin LaTeX-koodia tai yksinkertaista HTML-merkintää: lue lisää Kommentointi-sivulta.