122
Tietokone ja käyttöjärjestelmä -luentomoniste v. 0.93 Jyry Suvilehto

Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Embed Size (px)

Citation preview

Page 1: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Tietokone ja käyttöjärjestelmä -luentomonistev. 0.93

Jyry Suvilehto

Page 2: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Esipuhe

Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille T-106.1150 Tietokone ja käyttöjärjestelmä. Moniste ei missään tapauksessaole valmis. Korjausehdotuksia ja rakentavaa kritiikkiä otetaan mielellään vas-taan.

Moniste on jaettu 7 lukuun, joista jokainen käsittelee samaa aihealuet-ta kuin yksi kurssin T-106.1150 luennoista. Jokaisen luvun alussa on lyhyttop-down katsaus luennon sisältöön. Liite-osiossa kerrotaan pikaisesti asioi-ta, jotka eivät välttämättä tule opinnoissa vastaan henkilöille, jotka eivätopiskele tietotekniikan tutkinto-ohjelmassa.

Luennoilla ja monisteessa ei välttämättä käsitellä aivan samoja asioita.Moniste on laadittu siten, että sitä lukemalla on mahdollista saavuttaa kurs-sin keskeiset oppimistavoitteet. Joitakin syventäviä tavoitteita ei voi saa-vuttaa pelkästään monistetta lukemalla, vaan opiskelijalta vaaditaan oma-aloitteisuutta.

Monisteen kuvitus on varsin korutonta. Syy tähän on yksinkertainen:kaikki kuvat on tekijänoikeussyistä tehty itse.

Monisteessa ei ole harjoitustehtäviä, vaan ne tarjotaan kurssilla toistakautta. Ideoita harjoitustehtävistä saa kuitenkin antaa.

c©2009 Jyry SuvilehtoLisenssi: Creative Commons Nimeä-Epäkaupallinen-Tarttuva 1.0 Suomihttp://creativecommons.org/licenses/by-nc-sa/1.0/fi/

i

Page 3: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Kiitokset

Ilman Vesa Hirvisaloa, Sami Kiminkiä, Juho Äyräväistä, Marjukka Kokkos-ta, Jaakko Kotimäkeä ja Timo Töyryä tämä luentomoniste olisi paljon ikä-vämpää luettavaa. Ilman Sanna Suorantaa ja Aleksi Aaltoa monisteessa olisipaljon vähemmän pilkkuja.

Kiitokset myös Axel Eirolalle, Juha Kurjoselle, Ville Immoselle, JarnoHilveniukselle, Paav-o Leinoselle ja Tero Paloheimolle korjausehdotuksistaensimmäisen toteutuskerran perusteella.

Erityiskiitos Jeff Beardille (Wikipedian käyttäjä jjbeard), jonka PublicDomainiin julkaisemia SVG-kuvia logiikkaporteista käytetään luvussa 2.

Kiitos myös Graphviz-työkalun kehittäjille. Kirjassa olisi huomattavastivähemmän kuvia ja enemmän puuduttavaa tekstiä ilman kyseistä ohjelmis-toa.

ii

Page 4: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Sisältö

Esipuhe i

Kiitokset ii

1 Johdanto 11.1 Systeemit ja insinööritieteen perusteet . . . . . . . . . . . . . 11.2 Systeemi ja tietotekniikka . . . . . . . . . . . . . . . . . . . . 61.3 Modernin tietokoneen rakenne . . . . . . . . . . . . . . . . . . 71.4 Käyttöjärjestelmän rakenne . . . . . . . . . . . . . . . . . . . 9

2 Bitistä summaimeen 122.1 Lukujärjestelmät . . . . . . . . . . . . . . . . . . . . . . . . . 122.2 Binäärilukujärjestelmä . . . . . . . . . . . . . . . . . . . . . . 142.3 Oktaali- ja heksadesimaalijärjestelmät . . . . . . . . . . . . . 152.4 Negatiiviset luvut . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.4.1 Etumerkkibitti . . . . . . . . . . . . . . . . . . . . . . 172.4.2 Yhden komplementti . . . . . . . . . . . . . . . . . . . 172.4.3 Kahden komplementti . . . . . . . . . . . . . . . . . . 18

2.5 Reaalilukujen esitys tietokoneessa . . . . . . . . . . . . . . . . 182.5.1 Kiinteän pilkun luvut . . . . . . . . . . . . . . . . . . . 192.5.2 Liukuluvut . . . . . . . . . . . . . . . . . . . . . . . . 192.5.3 Tietokoneiden äärellisyydestä . . . . . . . . . . . . . . 20

2.6 Merkistöt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.6.1 American Standard Code for Information Interchange

(ASCII) . . . . . . . . . . . . . . . . . . . . . . . . . . 222.6.2 ISO-8859-1 ja ISO-8859-15 . . . . . . . . . . . . . . . . 262.6.3 Unicode ja UTF-8 . . . . . . . . . . . . . . . . . . . . 26

2.7 Boolen algebra . . . . . . . . . . . . . . . . . . . . . . . . . . 272.8 Piirisuunnittelu Boolen algebralla . . . . . . . . . . . . . . . . 30

2.8.1 Puolisummain . . . . . . . . . . . . . . . . . . . . . . . 302.8.2 Kokosummain . . . . . . . . . . . . . . . . . . . . . . . 31

iii

Page 5: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

2.9 Virheentarkistus . . . . . . . . . . . . . . . . . . . . . . . . . . 352.9.1 Pariteettibitti . . . . . . . . . . . . . . . . . . . . . . . 372.9.2 Syklinen redundanssitarkastus (CRC) . . . . . . . . . . 372.9.3 Hammingin etäisyys ja koodaus . . . . . . . . . . . . . 38

3 Ohjelmoitavat tietokoneet 403.1 Erityislaskimista ohjelmoitavaan tietokoneeseen . . . . . . . . 403.2 Von Neumann -arkkitehtuuri . . . . . . . . . . . . . . . . . . . 42

3.2.1 Väylä . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.2.2 Muisti . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.2.3 Siirräntäyksikkö . . . . . . . . . . . . . . . . . . . . . . 433.2.4 Suoritusyksikkö . . . . . . . . . . . . . . . . . . . . . . 433.2.5 Käskykierros . . . . . . . . . . . . . . . . . . . . . . . 453.2.6 Käskykanta-arkkitehtuuri . . . . . . . . . . . . . . . . 45

3.3 Ohjelmien kääntäminen, kirjastot ja linkitys . . . . . . . . . . 473.4 Muistihierarkia . . . . . . . . . . . . . . . . . . . . . . . . . . 49

3.4.1 Lokaalius . . . . . . . . . . . . . . . . . . . . . . . . . 503.4.2 Välimuisti . . . . . . . . . . . . . . . . . . . . . . . . . 503.4.3 Muistihierarkia . . . . . . . . . . . . . . . . . . . . . . 51

4 Keskeytyksistä käyttöjärjestelmään 534.1 Keskeytykset . . . . . . . . . . . . . . . . . . . . . . . . . . . 544.2 Alkeelliset prosessit . . . . . . . . . . . . . . . . . . . . . . . . 574.3 Tiedonsiirtotekniikat . . . . . . . . . . . . . . . . . . . . . . . 60

4.3.1 Ohjelmoitu tiedonsiirto . . . . . . . . . . . . . . . . . . 604.3.2 Keskeytyksillä toteutettu tiedonsiirto . . . . . . . . . . 614.3.3 Suora muistisiirto (DMA) . . . . . . . . . . . . . . . . 62

4.4 Virtuaalimuisti . . . . . . . . . . . . . . . . . . . . . . . . . . 624.5 Kohti käyttöjärjestelmää . . . . . . . . . . . . . . . . . . . . . 64

4.5.1 Ydin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654.5.2 Käyttöjärjestelmätyypit . . . . . . . . . . . . . . . . . 65

5 Käyttöjärjestelmän rakennuspalikat 675.1 Putket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675.2 Standardivirrat . . . . . . . . . . . . . . . . . . . . . . . . . . 685.3 Tiedostot ja hakemistorakenne . . . . . . . . . . . . . . . . . . 69

5.3.1 Tiedosto . . . . . . . . . . . . . . . . . . . . . . . . . . 695.3.2 Tiedostotyypit . . . . . . . . . . . . . . . . . . . . . . 725.3.3 Hakemistorakenne . . . . . . . . . . . . . . . . . . . . . 73

5.4 Tiedostojärjestelmä . . . . . . . . . . . . . . . . . . . . . . . . 745.4.1 FAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

iv

Page 6: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

5.4.2 Unix-tiedostojärjestelmät . . . . . . . . . . . . . . . . . 755.4.3 Modernit tiedostojärjestelmät . . . . . . . . . . . . . . 775.4.4 Kiintolevyn osiot . . . . . . . . . . . . . . . . . . . . . 785.4.5 Linkit . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

5.5 Lisälaitteet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795.6 Everything’s a file (Unixin tiedostojärjestelmä ja lisälaitteet) . 805.7 Asiakas-palvelin -malli (Windowsin tiedostojärjestelmä ja li-

sälaitteet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815.8 Käyttäjänhallinta . . . . . . . . . . . . . . . . . . . . . . . . . 81

5.8.1 Autentikaatiotietueet . . . . . . . . . . . . . . . . . . . 835.8.2 Tiedosto-oikeudet . . . . . . . . . . . . . . . . . . . . . 83

6 Käyttöjärjestelmä 856.1 Symmetrinen moniprosessointi ja moniydinprosessointi . . . . 856.2 Säikeet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876.3 Käyttöjärjestelmäytimien tavoitteet ja tehtävät . . . . . . . . 88

6.3.1 Monoliittiset ytimet . . . . . . . . . . . . . . . . . . . 896.3.2 Mikroytimet . . . . . . . . . . . . . . . . . . . . . . . . 896.3.3 Hybridiytimet . . . . . . . . . . . . . . . . . . . . . . . 90

7 POSIX ja shell 917.1 POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927.2 The Unix Programmer’s Manual man . . . . . . . . . . . . . . 927.3 Komentotulkki . . . . . . . . . . . . . . . . . . . . . . . . . . 937.4 Ympäristömuuttujat . . . . . . . . . . . . . . . . . . . . . . . 947.5 Säännölliset lausekkeet . . . . . . . . . . . . . . . . . . . . . . 95

7.5.1 Yksinkertaiset säännölliset lausekkeet (BRE) . . . . . . 967.5.2 Laajennetut säännölliset lausekkeet (ERE) . . . . . . . 977.5.3 Perl ja Python . . . . . . . . . . . . . . . . . . . . . . 97

7.6 POSIX-apuohjelmat . . . . . . . . . . . . . . . . . . . . . . . 977.6.1 Putket . . . . . . . . . . . . . . . . . . . . . . . . . . . 987.6.2 Prosessinhallinta . . . . . . . . . . . . . . . . . . . . . 987.6.3 Tiedostonhallinta . . . . . . . . . . . . . . . . . . . . . 997.6.4 Tiedostojärjestelmä ja lisälaitteet . . . . . . . . . . . . 1007.6.5 Tekstinkäsittely . . . . . . . . . . . . . . . . . . . . . . 101

7.7 Skriptit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

A Liitteet 104A.1 Turingin kone . . . . . . . . . . . . . . . . . . . . . . . . . . . 104A.2 Pino ja Jono . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

v

Page 7: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Viitteet 108

Hakemisto 108

vi

Page 8: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Luku 1

Johdanto

Ensimmäisen luvun aluksi käsittelemme insinööritieteessä usein esiintyviäkorkean tason filosofisia käsitteitä. Nämä käsitteet on hyvä pitää mielessäloppukurssin ja oikeastaan koko opintojen aikana. Alun systeemikäsite jä-tetään tarkoituksella varsin avoimeksi. Systeemejä on monenlaisia, ja niitäpääseekin opiskelemaan TKK:lla esimerkiksi Matematiikan ja systeemiana-lyysin Mat-2 -alkuisilla kursseilla, BECS1-huippuyksikön kursseilla ja monis-sa eri koulutusohjelmien pääaineissa. Tietyt perustermit ja -ajattelumallitovat yhteisiä, mutta systeemilähestymiseen liittyy aina myös paljon sovel-lusalakohtaista tietoa.

Tämä luentomoniste käsittelee tietokonejärjestelmiä. Tietokonejärjestel-mään kuuluu sekä fyysinen, piiriaspekti että tietokonetta hallitseva ohjelmis-to, käyttöjärjestelmä. Luvun lopussa esitellään sekä tietokonetta että käyt-töjärjestelmää nopeasti top-down -lähestymistavalla, jotta top-down oppijoi-den on helpompi rakentaa kokonaiskuva kurssin asiasisällöstä. Luentomonis-te on muuten rakennettu esittelemään asiat bottom-up, joten ensimmäisenluvun esittelyllä pyritään tasapainottamaan tätä rakennetta. Mikäli termittop-down ja bottom-up eivät ole tuttuja, ne esitellään seuraavaksi systeemienyhteydessä.

1.1 Systeemit ja insinööritieteen perusteetInsinööritiede (engineering) tarkoittaa (Merriam-Webster -sanakirjasta va-paasti käännettynä) joko

1. tieteen ja matematiikan soveltamista siten, että aineiden ominaisuudetja luonnossa oleva energia valjastetaan ihmisten hyödyksi

1department of Biomedical Engineering and Complex Systems

1

Page 9: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 1. JOHDANTO 2

2. monimutkaisten järjestelmien suunnittelua ja toteutusta

Tällä kurssilla käsitellään lähinnä jälkimmäisen määritelmän mukaista in-sinööritiedettä. Järjestelmien suunnittelu ja toteutus perustuu selkeästi tie-teisiin ja matematiikkaan, mutta se sisältää myös monia asioita, joita ei olehelppo johtaa takaisin perustieteisiin.

Järjestelmää, joka sisältävää monia toisistaan riippuvaisia osasia ja jokaon selkeästi ympäristöstään erotettava kokonaisuus, kutsutaan systeemiksi(system). Systeemejä voi löytää monista eri tieteenaloista: solu on hyvä esi-merkki biologisesta systeemistä, taloustieteissä esimerkiksi yksittäinen yritystai tietty kaupan ala, kuten terästeollisuus voidaan mieltää systeemiksi. Tälläkurssilla systeemit ovat joko fyysisiä piirejä (tietokoneen osia tai lisälaittei-ta) tai ohjelmistosysteemejä (käyttöjärjestelmä, käyttöjärjestelmän osat jaapuohjelmat).

Systeemien yhteydessä käytetään filosofista käsitettä holismi kuvaamaanajattelutapaa, jonka mukaan systeemillä voi olla niin sanottuja emergentte-jä ominaisuuksia. Emergentit ominaisuudet eivät ole suoraan johdettavissaalisysteemien ominaisuuksista. Esimerkiksi väri on aineen emergentti ominai-suus: yksittäinen molekyyli ei ime mitään tiettyä valon aallonpituutta, muttakun molekyylejä on suuria määriä, ne imevät tiettyjä valon aallonpituuksiaja aineella on väri. Huonosti suunnitellun ja kirjoitetun ohjelman emergent-ti ominaisuus on usein hitaus. Vaikka aliohjelmia ei ole erikseen suunniteltuhitaiksi, kokonaisuus on tarpeettoman hidas.

Systeemejä voidaan tarkastella kahdella eri tavalla. Systeemiä voidaanajatella mustana laatikkona (black box ), jolloin systeemistä tarkastellaan vainsiihen vaikuttavia systeemin ulkopuolisia seikkoja ja systeemin vaikutusta it-sensä ulkopuolelle. Esimerkiksi matemaattisen laskutoimituksen suorittavanohjelman saamat syötteet ja sen antama tulos. Systeemiä voidaan myös aja-tella valkoisena laatikkona (white box ), jonka sisältö tiedetään. Mustaa laa-tikkoa tarkasteltaessa tarkastelu joudutaan rajoittamaan syötteisiin ja tu-loksiin. Valkoista laatikkoa tarkasteltaessa voidaan myös tarkastella laatikonsisällä olevia toteutuskohtaisia yksityiskohtia.

Esimerkiksi kuvassa 1.1 on esitelty hahmontunnistussysteemin perusra-kenne2. Esimerkki hahmontunnistussysteemi on ohjelmisto, jolle annetaankasvokuva ja joka yhdistää kuvan tietokannassaan oleviin saman henkilönkasvoihin ja antaa tuloksena ihmisen nimen.

Tarkasteltaessa systeemiä mustana laatikkona, siitä voidaan mitata vain,kuinka hyvin se tunnistaa kasvoja. Jos taas samaa systeemiä tarkastellaan

2Hahmontunnistusta käsitellään kurssilla T-61.2010 Datasta Tietoon ja Informaatio-tekniikan pääaineessa.

Page 10: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 1. JOHDANTO 3

Musta laatikko

Valkoinen laatikko

b1 b2 b3 b4

Tulos

Mittaus Esikäsittely Piirreirrotus Luokittelu

Syöte

Kuva 1.1: Hahmontunnistussysteemi mustana ja valkoisena laatikkona.

valkoisena laatikkona, voidaan tarkastella myös sen osien toimintaa. Systee-min neljä pääosaa ovat tässä esimerkissä mustia laatikoita (eli niiden toi-mintaa ei tarvitse tai haluta tietää). Joissain tapauksissa voi olla mielekäs-tä vaihtaa jokin systeemin osista toiseen, eri tavoin toteutettuun mustaanlaatikkoon. Voidaan esimerkiksi analysoida kahden eri luokittelutoteutukseneroja koko systeemin toimintaan.

Esimerkin kaltaisissa tapauksissa, joissa systeemiä tarkastellaan kokonai-suutena joka koostuu osasista, puhutaan top-down -strategiasta. Vastakohtatälle lähestymistavalle on bottom-up -strategiasta3. Bottom-up -strategiassalähdetään osasista ja osasia liitetään toisiinsa suurempien järjestelmien ra-kentamiseksi.

Systeemiä (esimerkiksi ohjelmistoa) rakennettaessa käytetään yleisestiniinsanottua V-mallia (V-model). Kuvassa 1.2 on esitelty V-mallin etene-minen. Lähtökohtana on tulevan systeemin toimintaperiaate. Tämän jälkeensysteemin arkkitehtuuri suunnitellaan ensin karkealla tasolla, jonka jälkeenkarkean tason osasten tarkka rakenne suunnitellaan ja toteutetaan. Kun pa-laset on toteutettu, ne yhdistetään ja niiden yhteentoimivuus varmistetaan.Palasten yhdistämistä kutsutaan systeemi-integraatioksi ja se on erittäin tär-keä osa toimivan tuotteen aikaansaamista. V-mallin laskeva sivu vastaa top-down -lähestymistä ja nouseva sivu bottom-up lähestymistä. V-malli voidaanajatella yhdistävän nämä kaksi lähestymistapaa.

3Top-down ja bottom-up ovat yleisiä jäsennysstrategioita. Niistä on hyötyä paitsi jär-jestelmiä suunnitellessa, myös opittua tietoa jäsennettäessä. Jotkut oppivat paremminlähtiessään purkamaan kokonaisuutta palasiin. Toiset taas oppivat paremmin yhdistele-mällä osasia suuremmiksi kokonaisuuksiksi. Tämä opetusmoniste on jäsennetty ensisijai-sesti bottom-up -oppimista tukemaan. Top-down -oppijoiden avuksi tässä käydään tieto-konejärjestelmän rakenne läpi ja sen jälkeen jokaisen luvun alussa esitellään luvun sisältötop-down -lähestymisellä.

Page 11: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 1. JOHDANTO 4

Toimintaperiaate- ja malli

Vaatimukset ja arkkitehtuuri

Tarkka toteutuksen rakenne

Toteutus

Integrointi,testaus

ja verifiointi

Systeemi-integraatio-verifikaatio ja

validointi

Käyttö jaylläpito

Kuva 1.2: Systeemisuunnittelun V-malli

Järjestelmiä suunniteltaessa ja kehitettäessä niistä pyritään tekemään pa-rempia jollakin tietyllä mittarilla. Näiden mittarien valinta vaikuttaa olen-naisesti systeemiin. Esimerkiksi moderneissa suorittimissa yksi vaatimuksistaon varsin usein kellotaajuuden ja käytetyn tehon suhde, koska tietokoneistahalutaan tehdä energiatehokkaampia ja vihreämpiä. Käytännössä aina yksimittari on aika, mutta sen painotus riippuu tilanteesta: joskus systeemin toi-minta on aikakriittistä, joskus se taas ei ole. Joskus taas systeemin suunnit-teluun käytetyn ajan määrä on olennaista, kuten tapauksessa jolloin uudellemarkkina-alueelle pitää päästä ensimmäisenä.

Mittarien yhteydessä puhutaan kustannuksista. Jos jokin teko tai ratkaisuaiheuttaa tietyn mittarin siirtymistä ei-toivottuun suuntaan puhutaan ettäse on kallista, päinvastoin taas halpaa. Raha on yksi erittäin yleinen mittari.Historia tuntee tapauksia joissa raha ei ole ollut tärkein mittari, mutta nämäovat poikkeuksia, kuten Manhattan- ja Apollo-projektit.

Esimerkiksi luvussa 2 käsiteltävällä piiritasolla tietyt laskutoimitukset,kuten kerto- ja jakolasku ovat kalliimpia kuin yhteen- ja vähennyslaskut se-kä bitshift-operaatiot. Kerto- ja jakolaskujen suorittamisessa kuluu huomat-

Page 12: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 1. JOHDANTO 5

tavasti enemmän aikaa kuin yhteen- ja vähennyslaskujen. Tämän johdostamonia tärkeitä algoritmeja on pyritään kehittämään siten, että niiden laske-miseen tarvitaan mahdollisimman vähän kerto- ja jakolaskuja.

Ihmisten kyky käsittää monimutkaisia systeemejä ei ole erityisen hyvä.Ihmiset pystyvät pitämään alle 10 asiaa mielessään yhdellä kertaa ja systee-meissä voi helposti olla jopa satojatuhansia osia, jotka voivat teoriassa toi-mia minkä tahansa toisen osan kanssa yhdessä. Tätä monimutkaisuutta ra-joittamaan määritellään erilaisia rajapintoja. Rajapinnoilla piilotetaan jon-kin allaolevan alisysteemin kompleksisuus. Ohjelmistotekniikassa on paljonohjelmointirajapintoja (Application Programming Interfaces, API ). Useim-mat tietokoneen lisälaitteet liitetään fyysiseen liitäntäväylään, jota pitkin nekommunikoivat tiedonsiirtorajapinnan avulla, jolloin tietokoneen ei tarvitsevälittää lisälaitteen sisäisestä toteutuksesta. Esimerkiksi tietokoneen USB-väylään voi liittää mitä tahansa hiirestä tv-vastaanottimeen ja toiseen tieto-koneeseen. Ainoa vaatimus USB-väylään liitettävälle laitteelle on se, että setäyttää USB-standardin. Biologiassa hermosolujen välillä on rajapintoja, joi-den avulla viesti kulkee hermostoa pitkin. Kaikkia soluja ympäröivä solukalvomuodostaa rajapinnan solun kommunikaatiolle muun systeemin kanssa.

Rajapinnat tarjoavat myös hyvän tavan esittää suuret kokoluokkavaih-telut. Ihmisten on helppo mieltää kokoluokkia millimetristä (10−3m) noinkymmeneen kilometriin (104m), eli vain noin 107-kertaisen kokovaihtelun.Esimerkiksi yksittäisen tietokoneen osien kokoluokka vaihtelee jo suurem-malla skaalalla: suoritinpiirit tehdään 45 nanometrin (10−9) tekniikalla jasuurimmat liittimet ovat kymmenen sentin kokoluokkaa (10−1), eli kyseessäon 108-kertainen ero.

Rajapintojen suunnittelufilosofioita on useita, ja oikean valinta riippuuusein sovelluskohteista. Yksi käyttöjärjestelmäsuunnittelussa käytetty para-digma on niin sanottu oliomalli, jossa erilaisia käsitteitä paketoidaan olioik-si, jotka kuvaavat ontologisia käsitteitä. TKK:n perusohjelmointikursseillaopetetaan oliolähestymistä ohjelmistoihin. Toinen, vastikään pinnalla ollutparadigma on komponenttipohjainen lähestyminen ( Component Based En-gineering, CBE ), jossa jokainen musta laatikko huolehtii jostain tietystämääritellystä tarpeesta. Komponenttipohjainen lähestymistapa on jäämäs-sä taka-alalle uuden, mallipohjaisen lähestymisen , (Model Driven Enginee-ring, MDE ). Mallipohjaisessa lähestymisessä pyritään kuvauskielellä teke-mään malli sovelluskohtaisista käsitteistä ja piilotetaan algoritmiset käsit-teet.

Page 13: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 1. JOHDANTO 6

1.2 Systeemi ja tietotekniikkaSuurin ihmiskunnan aikaansaama tekninen systeemi on kiistatta internet.Vaikka se koostuu eri osista, eikä sitä välttämättä voida mieltää yhdeksi lait-teeksi, on se selkeästi ympäristöstään erotettavissa oleva kokonaisuus. Verkonominaisuuksien ja tiedonsiirron tarkastelu jätetään tietoliikenteen kursseilleja tämän kurssin puitteissa rajoitutaan tarkastelemaan yksittäisiä verkkoonliittyneitä laitteita. Myöhemmissä opinnoissa verkottuneita tietokoneita tar-kastellessa on hyvä ymmärtää yksittäisen koneen toiminta.

Vaikka tietokoneverkot on helppo mieltää miditornikoteloista rakenne-tuista, beigeistä Windows-koneista koostuvaksi homogeeniseksi rakenteeksi,on totuus aivan toinen. Kuvassa 1.3 on esitetty toisiinsa liittyneitä tietoko-neita. Kaikki kuvassa esiintyvät laitteet ovat itseasiassa tietokoneita ja niilläkaikilla on sama käskykanta-arkkitehtuurin toteuttavan tietokoneen perus-rakenne (esitellään luvussa 3). Kurssilla käsitellään PC-koneita esimerkkeinäniiden tuttuuden vuoksi, mutta PC:t muodostavat vain alle prosentin kaikistamaailman ohjelmoitavista tietokoneista.

Pöytätietokone

Reititin

Palvelin

Tukiasema

Pelikonsoli

Matkapuhelin

Kuva 1.3: Verkottuneita tietokoneita

Tietokoneiden hyödyllisyys ja levinneisyys johtuu nimenomaan niiden oh-

Page 14: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 1. JOHDANTO 7

jelmoitavuudesta. Kuvan 1.2 V-mallin mukaisessa systeemien toteutuksessayleensä kalleinta on nousu ylemmälle abstraktiotasolle. Systeemille on help-po suunnitella jokin rakenne ja pienet rakennuspalikat on helppo toteuttaaja jopa testata toimiviksi. Palasten yhdistäminen taas on erittäin vaikeaa,sillä pienimmätkin virheet saattavat kostautua moninkertaisesti. Kokemusosoittaa että virheettömien suunnitelmien teko on käytännössä mahdoton-ta. Jos laitteen toiminnan voi määrittää ohjelmallisesti, sen muuttaminenjälkikäteen on monin verroin halvempaa kuin fyysisen laitteen, esimerkiksituhannen identtisen piirikortin tai vaikkapa taivutetun palkin muuttaminen.Tietokoneohjelmiston varaan suunnitellun systeemin toimintaa voi siis hel-posti muuttaa jos virheitä ilmenee.

Tietokoneohjelmien muunnettavuudesta seuraa helposti kaaos. Jos montainsinööriä päästetään rajoituksetta muokkaamaan ohjelmistoa, sen toimintaaon hyvin vaikea ennustaa, eikä voida taata että se tekee mitä sen pitäisi jatärkeämmin että se ei tee jotain mitä sen ei pitäisi. Tätä kaaosta estämään jahallitsemaan tietokoneissa on erityinen ohjelmisto, käyttöjärjestelmä. Käyt-töjärjestelmä tarjoaa ohjelmoijalle abstraktiotasoja laitteiston hallintaan javastaa laitteiston hallinnoimisesta siten, että ohjelmoija ei pääse rikkomaanmitään kriittistä ja siten, että laitteistosta voidaan saada maksimaalinen hyö-ty.

1.3 Modernin tietokoneen rakenneTietokone mustana laatikkona saa syötteitä käyttäjältä erilaisien syöttölait-teiden (hiiri, näppäimistö, mikrofoni) avulla. Vastaavasti tietokone antaakäyttäjälle tulosteita näyttö- ja tulostinlaitteiden (näyttö, tulostin, kaiut-timet) avulla. Käyttäjän suoraan antaman syötteen lisäksi tietokoneelle voiantaa syötettä fyysisellä medialla, kuten Bluray-levyllä tai USB-muistilla.Useimmat tietokoneet osaavat myös kirjoittaa fyysisille medioille. Lisälait-teita ja niiden kanssa kommunikointia käsitellään luvussa 5. Tietokoneen si-säiseen tilaan vaikuttavat myös tietoliikenneyhteydet4, erityisesti yhteys in-ternetiin 5. Tietokoneilla on käynnistyksestä toiseen säilyvä tila (huom: näinei ole aina ollut), joka on säilötty pysyväismuistiin, useimmiten kovalevylle.

4Tällä kurssilla ei käsitellä tietoliikennettä, vaan sitä käsittelvät T-opiskelijat kurssillaT-110.2100 Johdatus tietoliikenteeseen ja TLT-opiskelijat kurssilla S-72.1130 Telecom-munication Systems.

5Juuri nyt tutkimuksessa kiinnostaa fyysisen tietokone-systeemin ja muun internetinvälisen rajan hämärtäminen, ns. computation offloading , jonka ilmentymiä on muunmuas-sa cloud computing ja pienemmässä määrin grid computing . Niitä käsitellään ohjelmisto-tekniikan DI-vaiheen erikoiskursseilla.

Page 15: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 1. JOHDANTO 8

Yksinkertaistettu kaaviokuva tietokoneesta ja tärkeimmistä lisälaitteista onesitetty kuvassa 1.4.

Tietokone

Syöttölaitteet

Tulostuslaitteet

Pysyväistallennus

Tietoliikenneyhteydet

Kuva 1.4: Tietokone ja siihen liittyviä lisälaitteita

Siirrytään tarkastelemaan tietokonetta valkoisena laatikkona. Jokaisessatietokoneessa on suoritin, joka suorittaa varsinaiset laskutoimitukset. Luvus-sa 2 käydään läpi binääriaritmetiikkaa ja logiikkafunktioita, joiden avullasuunnitellaan yksinkertainen laskin. Suoritin on huomattavan paljon moni-mutkaisempi laskin, mutta toimintaperiaate on sama. Kurssilla esiteltävissätietokoneissa on muistia, jonne suorittimella ajettavat ohjelmat ja niiden da-ta voidaan tallentaa.

Tietokoneessa on suorittimen lisäksi muita osia, joita yhdistävät erilai-set väylät6. Väylä on yleisnimi tiedon siirtotielle, jonka varrella on erilaisialaitteita. Väylien välillä on nopeuseroja, jotka johtuvat väylien varrelle ase-tetuille laitteille ominaisista nopeuksista. Liikennettä väylällä ohjaa yleensäväyläohjain, joka on tyypillisesti liitetty yhtenä lisälaitteena astetta nopeam-malle väylälle.

Tietokoneen perusosat, väylä, suoritin ja muisti löytyvät kaikista kurs-sin määritelmän mukaisista tietokoneista. Tietokoneita muokataan tiettyynkäyttötarkoitukseen liittämällä väylälle muita laitteita.

Tärkeimmät PC-tietokoneen väylät sijaitsevat fyysisellä tietokoneen osal-la, jota kutsutaan emolevyksi. Väylät on emolevyllä jaettu kahteen piirisar-jaan, eteläsiltaan (Southbridge) ja pohjoissiltaan (Northbridge). Niiden ni-met tulevat kaaviosta, joissa suoritin on ylimpänä eli ”pohjoisessa”. Kuvassa1.5 on kuvattu modernin tietokoneen väylähierarkia. Kuvassa esitetyt Front

6Väyliä voi olla vain yksi, kuten 1-Wire -arkkitehtuurissa, mutta tämä on harvinaistaja yhden väylän ratkaisuja käytetään lähinnä erityisratkaisuissa.

Page 16: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 1. JOHDANTO 9

Side Bus ja muistiväylä vastaavat väylää luvussa 3 käsiteltävän von Neu-mann -arkkitehtuurissa. Samassa luvussa kuvattava siirräntäyksikkö vastaakarkeasti eteläsiltaa modernissa arkkitehtuurissa: sen varrelle on liitetty eri-laisia lisälaiteväyliä, kuten

• yleiskäyttöinen Universal Serial Bus eli USB-väylä

• kovalevyjen liittämiseen tarkoitettu Serial ATA eli SATA-väylä

• Peripheral Component Interconnect eli PCI-väylä vanhojen lisälaite-korttien liittämiseksi

• Low Pin Count eli LPC-väylä, johon kiinnitetään vanhoja hiiriä, levy-asemia ja sarja- ja rinnakkaisporttiliitäntöjä.

Prosessori

Pohjoissilta

Front-side bus (FSB)

Muisti

muistiväylä

Eteläsilta

Internal Bus

Näytönohjain

PCI Express

Kiintolevyt

SATA

Vanhat laitteet (sarjaportti, PS/2)

LPC

USB-lisälaitteet

USB

PCI-lisälaitteet

PCI

Kuva 1.5: Modernin tietokoneen väylähierarkia. Näytönohjaimen toimintaaei tällä kurssilla käsitellä. Sitä selitetään kurssilla T-111.4300 Tietokonegra-fiikan perusteet.

1.4 Käyttöjärjestelmän rakenneKäyttöjärjestelmä-käsitteestä useimmille tulee mieleen ensimmäiseksi Win-dowsin graafinen käyttöliittymä (Graphical User Interface, GUI ). Graafis-ten käyttöjärjestelmien ja drag&drop-käyttöliittymien toteutus on kuitenkinverrattain monimutkaista, eikä sitä muutenkaan ole tämän kurssin puitteis-sa olennaista käsitellä. Käyttäjälle näkyvä osuus ei juurikaan vaikuta var-sinaisen, laitteiston toimintaa ohjaavan käyttöjärjestelmän suunnitteluun.

Page 17: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 1. JOHDANTO 10

Tällä kurssilla käyttöjärjestelmää edustaa $ eli Unixin komentokehote, jo-ka on korkein taso jolla käyttöjärjestelmää käsitellään. Luku 7 on pyhitet-ty komentorivin käyttämiselle. Kaikki sitä edeltävä materiaali käsittelee si-tä, mitä komentokehotteen alla tapahtuu. Vaikka kurssin esimerkit ovatkinPC-tietokoneiden käyttöjärjestelmistä, on myös sykemittarien, kännyköiden,reitittimien ja muiden ohjelmoitavien laitteiden käyttöjärjestelmien rakennehyvin samankaltainen.

Käyttöjärjestelmä abstrahoi allaolevaa laitteistoa ohjelmoijalle ja hallin-noi laitteistoa. Kuvassa 1.6 on esitetty aiemmin kuvassa 1.5 esitetty tietoko-neen arkkitehtuuri väritettynä siten, että vihreä väri näyttää ne järjestelmänosat, joihin ohjelmoija päsee käsiksi suoraan7 ja punainen ne osat, joihin pääs-täkseen ohjelmoijan on käytettävä käyttöjärjestelmän tarjoamia palveluja tairajapintoja.

Prosessori

Pohjoissilta

Front-side bus (FSB)

Muisti

muistiväylä

Eteläsilta

Internal Bus

Näytönohjain

PCI Express

Kiintolevyt

SATA

Vanhat laitteet (sarjaportti, PS/2)

LPC

USB-lisälaitteet

USB

PCI-lisälaitteet

PCI

Kuva 1.6: Modernin tietokoneen väylähierarkia. Vihreä edustaa osia, joihinohjelma pääsee käsiksi suoraan. Punainen osia, joihin pääsee vain käyttöjär-jestelmän kautta.

Käyttöjärjestelmää käsiteltäessä kannattaa pitää mielessä, että käyttöjär-jestelmä rakentuu allaolevan fyysisen tietokoneen päälle. Käyttöjärjestelmäon tietokoneen kovalevylle8 tallennettu ohjelma, joka käynnistyksen yhtey-dessä siirretään muistiin. Käyttöjärjestelmä ohjaa logiikkaporteista koostu-van suoritusyksikön toimintaa. Käyttöjärjestelmä rakentuu abstraktiotasoil-le, kuten aliluvussa 3.2.6 esitettävälle käskykanta-arkkitehtuurille, joka pii-

7Itseasiassa ohjelmoija ei edes pääse käsiksi koko muistiin, vaan vain prosessin omaanvirtuaalimuistii. Tästä enemmän luvussa 4.

8Itseasiassa ei aina: käyttöjärjestelmä voidaan hakea käynnistyksen yhteydessä myösverkosta.

Page 18: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 1. JOHDANTO 11

lottaa allaolevan piiritason toteutuksen ohjelmoijalta. Nykyään käskykanta-arkkitehtuuri piilotetaan myös ohjelmoijalta korkeamman tason ohjelmointi-kielten, kuten C:n avulla. Taulukossa 1.1 on esitelty käyttöjärjestelmän ja senallaolevan piiritason toteutuksen abstraktiotasoja. Ensimmäiset neljä tasoakäsittelevät fyysistä toteutusta. Loput ovat ohjelmallisia rakenteita, jotka ontoteutettu raudan päälle. Tasot 5-7 käsittelevät yhden suoritusyksikön jär-jestelmiä, kun taas tasoilla 8-13 voidaan lisätä suoritusyksiköitä tai vaikkapahajauttaa toteutus useammalle koneelle verkon yli.

Taso Nimi Käsiteltävät objektit Esimerkkioperaatioita13 Komentokehote Ohjelmointiympäristö Skriptikielen käskyt12 Käyttäjän proses-

sitKäyttäjän prosessit prosessin tappaminen, py-

säyttäminen ja jatkaminen11 Hakemistot Hakemistot luonti, poisto, haku, listaus10 Laitteet Tulostimet, näytöt, näp-

päimistötAvaus, sulku, luku, kirjoi-tus

9 Tiedostojärjestelmä Tiedostot Luonti, poisto, avaus, sul-ku, luku, kirjoitus

8 Prosessienvälinenkommunikaatio

Putket Luonti, poisto, avaus, sul-ku, luku, kirjoitus

7 Virtuaalimuisti Segmentit, sivut Luku, kirjoitus, haku6 Paikallinen pysy-

väismuistiDatalohkot Luku, kirjoitus, varaus, va-

pautus5 Primitiiviset pro-

sessitPrimitiiviset prosessit, se-maforit

Pysäytys, jatkaminen,odotus, signalointi

4 Keskeytykset Keskeytyksenkäsittelijät Kutsu, estä alemman ta-son keskeytykset, sallialemman tason keskeytyk-set, yritä uduelleen

3 Proseduurit Proseduurit, kutsupino Aseta pinoon, kutsu, palaa2 Käskykanta Käskyjoukko, skalaari- ja

taulukkodata, tulkkilataa, talleta, lisää, vähen-nä, goto

1 Sähköpiirit rekisterit, portit, väylät siirrä, aktivoi, tyhjennä

Taulukko 1.1: Käyttöjärjestelmän rakenneosaset Brownia [1] ja Stallingsia [6]mukaillen.

Page 19: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Luku 2

Bitistä summaimeen

Tässä luvussa käydään läpi digitaalisen tiedon esittämisen perusperiaatteet.Vaikka tieto voidaan esittää käyttäjälle kuvina, videona, tekstinä tai

musiikkina, se tallennetaan aina tietokonejärjestelmässä binäärimuotoisena.Binäärilukujärjestelmä on pieni laajennus myös luvussa käsiteltävään Boolenalgebraan. Boolen algebran totuusarvoja voidaan manipuloida logiikkapii-reillä, jotka luovat pohjan suoritusyksiköiden suunnittelulle. Suoritusyksiköi-tä tullaan käyttämään seuraavassa luvussa esiteltävän yleisen tietokoneark-kitehtuurin sydämenä. Melkein kaikki muutkin tietokoneen osat vähintäänsisältävät jonkinlaisen logiikkapiirin ja useimmat ovat erikoistuneita piirejä.

Luvussa käsitellään osin samoja asioita kuin kurssilla S-88.1110 Digi-taalitekniikan perusteet, joten sen käyneille osa luvusta toimii kertauksena.Kuitenkin esimerkiksi merkistöistä puhutaan huomattavasti laajemmin kuinDigitaalitekniikan perusteissa. Kyseisen kurssin www-oppimateriaali [3] so-veltuu rinnalla luettavaksi kiinnostuneille.

2.1 LukujärjestelmätLuku on matemaattinen käsite, joka mittaa suuruutta, järjestystä tai jota-kin muuta suuretta. Kokonaisluvut tai luonnollisten lukujen joukko on helppomieltää luvuiksi, mutta myös imaginääriluvut tai vaikkapa amerikkalaistyyli-set kurssiarvosanat A,B,C,D,E, F voidaan tulkita luvuiksi. Tämän kurssinpuitteissa käsittelemme kuitenkin vain kokonaislukuja ja tiettyjä luonnollis-ten lukujen osajoukkoja.

Yleisesti käytetty kymmenkantajärjestelmä on levinnyt siksi, että ihmi-sillä on 10 sormea, joten kymmenjärjestelmällä on helppo laskea. Näitä kym-mentä numeroa kuvaavat arabialaiset numeraalit 0-9. Numeroiden esitysta-pa ei riipu kantajärjestelmästä. Yhtä hyvin voitaisiin käyttää kymmentä kir-

12

Page 20: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 13

jainta kreikkalaisista aakkosista kuvaamaan numeroita (ja itseasiassa antiikinkreikkalaiset tekivät näin). Lukujärjestelmän erottaminen lukujen esitykses-tä on tärkeää, sillä tietokoneet käsittelevät lukuja tavalla, joka ei ole yhtäluonnollinen ihmisille ja siksi lukujen kuvaamiseen on tehty ihmisten hah-mottamista helpottavia järjestelmiä.

Kymmenkantajärjestelmässä (ja muissakin kantajärjestelmissä) luvut esi-tetään suhteessa kantaluvun (base) potensseihin:

A =∑aik

i

missä k on kantaluku ja ai ovat luvussa olevat numeroarvot kohdalla ioikealta laskien. Mikäli luvun kanta on yli 10, on tapana ottaa käyttöönaakkosia roomalaisten aakkosten alkupäästä siten että A=11, B=12 ja niinedelleen.

Kannanvaihto

Lukuunottamatta kohta esiteltäviä poikkeuksia, lukujärjestelmän kannanvaihto käsin kannattaa aina tehdä kymmenjärjestelmän kautta koska se onihmisille helpointa mieltää. Lukua x kannassa y merkitään (x)y, missä y il-maistaan aina kymmenjärjestelmässä. Kannan vaihto arbitäärisestä kannastakymmenkantaan tarkoittaa summan A =

∑iai ∗ ki laskemista auki.

Kannan vaihto kymmenkannasta arbitääriseen kantaan tapahtuu luvulleA esimerkiksi seuraavasti:

1. etsi suurin kantaluvun potenssi kb, joka on pienempi kuin A

2. laske montako kertaa c ∗ kb menee A:han, tämä on uuden luvun mer-kitsevin numero

3. laske erotus A− c ∗ kb

• jos se on nolla, muunnos on loppunut. Mikäli et ole viimeisessäpotenssissa, merkitse loppujen kertoimeksi 0.

• jos erotus ei ole 0, siirry tarkastelemaan seuraavaa potenssia k(b−1)

Esimerkiksi jos muutetaan luku 1337 heksadesimaali- eli 16-kantajärjestelmään

1. 162 = 256 on lähin kantaluvun potenssi ja se menee lukuun viisi kertaa,vastaava luku on 0x500

2. 1337− 5 ∗ 256 = 57

Page 21: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 14

3. 161 = 16, menee kolme kertaa lukuun 57, luku on 0x530

4. 57− 3 ∗ 16 = 9

5. 160 = 1, menee 9 kertaa lukuun 9, luku on 0x539

6. 9−9∗1 = 0, nolla eli muunnos on loppunut (ja ollaan myös nollannessapotenssissa eli lopussa)

Toinen tapa lähestyä ongelmaa on alkaa muuntamaan lukua pienimmäs-tä potenssista. Sen etu on helpompi toteutus ohjelmallisesti. Tässä esitetyntavan helppous on se, että se on helpompi intuitiivisesti ymmärtää.

2.2 BinäärilukujärjestelmäBinäärilukujärjestelmän perusyksikköä kutsutaan bitiksi ja sillä voi olla kaksiarvoa: 1 tai 0. Kun bitin arvo on 1, sanotaan että bitti on tosi, true tai päällä.Kun taas bitin arvo on 0 sanomme että bitti on epätosi, false tai pois päältä.

Binäärilukujärjestelmä pohjautuu brittiläisen matemaatikon George Boo-len 1800-luvulla kehittämään algebraan, jossa totuusarvoja yhdistetään loo-gisilla operaattoreilla ja tulos on myös totuusarvo. Boolen algebra, kuten al-gebrat yleensä oli keksimishetkellään abstrakti ja käytännöstä irrallinen kä-site. Vasta 70 vuotta Boolen kuoleman jälkeen Claude Shannon osoitti diplo-mityössään MIT:ssä, kuinka sähköpiireillä toteutetulla Boolen algebralla voi-daan muotoilla ja ratkaista kaikki mahdolliset laskutoimitukset. Shannoninsuunnittelemassa koneessa bitit koodattiin kahdella eri jännitetasolla. Näistämatalampi edusti nollaa ja korkeampi ykköstä. Sittemmin on kehitetty myöspiirejä, joissa nämä arvot toimivat toisin päin.

Binäärilukujärjestelmä on normaali lukujärjestelmä jonka kanta on 2. Bi-näärilukujärjestelmää käytetään kaikissa moderneissa tietokoneissa. Se onhavaittu hyväksi ja helpoksi toteuttaa1.

A =∑

ai2i

Sähkötekniikassa bittejä käytetään yleensä mahdollisimman vähän, koskayleensä tarpeettoman monimutkaisen piirin tekemisestä aiheutuu lisäkustan-nuksia. Tietotekniikan puolella on usein tapana käyttää i:n arvona kakkosenpotensseja, jolloin puhutaan eripituisista sanoista. Yleisimmät sanapituudetovat 4, 8, 16, 32 ja 64 bittiä. Näistä 8 bitin mittainen sana on erityisasemassaja siitä käytetään nimitystä tavu tai oktetti. Tavu on joskus määritelty myös

1Tietokoneen voi toki rakentaa muillekin lukujärjestelmille. Neuvostoliitossa kehitettiin50-luvulla kantaluvun 3 päällä toimiva, ternäärilogiikan tietokone, Setun.

Page 22: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 15

7 bitin mittaiseksi (tästä lisää merkistöissä), joten oktetti-nimitystä käyte-tään kun halutaan yksikäsitteisesti määrätä bittien määrä. 4 bitin mittaistasanaa kutsutaan joskus termillä nibble ja se on tärkeä koska se määritteleeyleisesti käytetyn heksadesimaalijärjestelmän kantaluvun.

Kymmenjärjestelmässä on totuttu siihen, että suurimman kymmenen po-tenssin kerroin on aina vasemmanpuoleisin, koska se helpottaa suuruusluo-kan arviointia (suurin kerroin + numeroiden määrä = suuruusluokka). Tätäkerrointa sanotaan merkitsevimmäksi luvuksi koska se määrää suuruusluo-kan. Käytännössä kaikki tietokonejärjestelmät lukevat yhden tavun siten, et-tä merkitsevin bitti tulee ensin. Eri suoritinarkkitehtuurit käyttävät kuiten-kin erilaista tavujärjestystä (endianness). Little-Endian -koneet tallentavatmonen tavun mittaisen sanan vähiten merkitsevä tavu ensin, kun taas Big-Endian -koneet tallentavat sanan merkitsevimmän tavun ensin ja vähitenmerkitsevän viimeiseksi.

2.3 Oktaali- ja heksadesimaalijärjestelmätIhmisten on vaikea laskea intuitiivisesti lukumääriä yli viiden. Tämän takiabinääriluvun bittejä ryhmitellään usein kolmen tai neljän bitin palasiksi luet-tavuuden nimissä. 23 = 8 ja 24 = 16, joten kolmen ja neljän bitin ryhmiäon myös hyvä esittää 8- ja 16-kantaisissa lukujärjestelmissä. Näitä kutsutaanerityisnimillä oktaalijärjestelmä ja heksadesimaalijärjestelmä. Taulukossa 2.1on taulukoitu luvut 0-31 desimaali-, binääri-, oktaali- ja heksadesimaalijär-jestelmissä.

Oktaalijärjestelmä on nykyään harvinainen, ja sitä käytetään lähinnä jois-sain erikoistapauksissa, kuten Unixin tiedosto-oikeuksia asetettaessa. Siinä neovat käytännöllisiä koska käyttöoikeudet määrittetään kolmen bitin ryhminä.Oktaalilukua merkitään joskus etuliitteellä ’0’, kuten 077 tai 010.

Heksadesimaalijärjestelmä on varsin yleinen ja sitä käytetäänkin kurssinkannalta relevanteissa yhteyksissä paljon. Esimerkiksi muistiviittaukset il-maistaan yleensä heksadesimaalimuodossa. Mikäli binääridata ei ole selkeäs-ti tekstiä tai numeroita, se ilmaistaan heksadesimaalimuodossa sekaannus-ten välttämiseksi. Heksadesimaaliluvun tunnisteita ovat mm. ’0h’, ’0x’ ja #(esim, 0xA0 ja #A0) käyttökontekstista riippuen. Heksadesimaalijärjestel-mässä käytetään yleisesti isoja kirjaimia A-F kuvaamaan numeroita.

Page 23: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 16

DEC BIN OCT HEX0 0 0 01 1 1 12 10 2 23 11 3 34 100 4 45 101 5 56 110 6 67 111 7 78 1000 10 89 1001 11 910 1010 12 a11 1011 13 b12 1100 14 c13 1101 15 d14 1110 16 e15 1111 17 f

DEC BIN OCT HEX16 10000 20 1017 10001 21 1118 10010 22 1219 10011 23 1320 10100 24 1421 10101 25 1522 10110 26 1623 10111 27 1724 11000 30 1825 11001 31 1926 11010 32 1a27 11011 33 1b28 11100 34 1c29 11101 35 1d30 11110 36 1e31 11111 37 1f

Taulukko 2.1: Luvut 0-31 kymmenjärjestelmässä (DEC), binäärijärjestel-mässä (BIN), oktaalijärjestelmässä (OCT) ja heksadesimaalijärjestelmässä(HEX)

Page 24: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 17

DEC etumerkkibitti yhden komple-mentti

kahdenkomplementti

-4 1000 0100 1111 1011 1110 1100-3 1000 0011 1111 1100 1111 1101-2 1000 0010 1111 1101 1111 1110-1 1000 0001 1111 1110 1111 11110 0000 0000 tai

1000 0000000 0000 tai1111 1111

0000 0000

1 0000 0001 0000 0001 0000 0001

Taulukko 2.2: Luvut -4-1 kymmenjärjestelmässä (DEC), etumerkkibitillä, se-kä yhden ja kahden komplementtimuodoissa esitettynä.

2.4 Negatiiviset luvutTähän asti esitetyllä binäärilukujärjestelmällä voidaan ilmaista vain epäne-gatiivisia kokonaislukuja. Usein on mukava pystyä ilmaisemaan myös negatii-visia kokonaislukuja. k:lla bitillä pystytään esittämään 2k eri numeroa ja onmerkintäkysymys, ilmaistaanko niillä pelkästään positiivisia vai myös nega-tiivisia lukuja. Mikäli negatiivisia lukuja esitetään, on tapana jakaa lukualuekahtia ja sopia että toinen puoli tulkitaan negatiivisiksi. Binäärilukujärjes-telmässä esitetään usein negatiivisia lukuja yhden ja kahden komplementtinätai etumerkkibitillä. Taulukossa 2.2 on esitetty negatiivisia lukuja sekä nollaja yksi.

2.4.1 Etumerkkibitti

Etumerkkibitti on intuitiivisin tapa esittää negatiivinen luku. Lisätään sa-nan alkuun bitti ja sovitaan, että päälläoleva bitti toimii miinusmerkkinä.Etumerkkibitin ongelmana on se, että siinä voidaan esittää luku 0 kahdellaeri tavalla (miten?). Tämä on usein haitallinen ominaisuus käytännön järjes-telmissä, koska se pitää ottaa huomioon esimerkiksi vertailussa.

2.4.2 Yhden komplementti

Yhden komplementtijärjestelmässä merkitsevin bitti määrää, onko luku po-sitiivinen vai negatiivinen. Mikäli merkitsevin bitti on 0, luku on positiivinenja mikäli 1, se on negatiivinen. Negatiivista lukua tulkittaessa jokainen mer-kitsevimmän bitin jälkeinen bitti käännetään ja näin saadun luvun katsotaanolevan negatiivinen.

Page 25: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 18

Yhden komplementtijärjestelmällä yhteen- ja vähennyslaskuoperaatioton helpompi toteuttaa kuin etumerkkibitin kanssa. Kuitenkin myös yhdenkomplementtijärjestelmässä nollalla on kaksi eri esitystapaa (mitkä?).

2.4.3 Kahden komplementti

Kahden komplementtijärjestelmässä merkitsevin bitti tulkitaan negatiivi-seksi ja kaikki sen jälkeen tulevat bitit tulkitaan positiivisiksi. Esimerkiksi10101 = −16 + 4 + 1 = −11.

Järjestelmän etuina on mm. se, että nollalla on vain yksi esitystapa. Li-säksi kahden komplementtimuodossa olevien lukujen yhteenlasku toimii kah-den kuten etumerkittömän bitin yhteenlasku eli se on helppo toteuttaa. Ne-gatiivisuutta ei erikseen tarvitse huomioida jos lasketaan luku + (-luku).Tätä käytetään hyväksi aliluvussa 2.8, jossa suunnitellaan laskin, joka suo-rittaa binäärisiä yhteen- ja vähennyslaskuja. Kahden komplementtimuodos-sa on se ongelma, että sen lukualueen alaraja on alempana kuin yläraja.Esimerkiksi kahdeksalla bitillä esitetyt yhden komplementtiluvut ovat välil-lä [−128...127]. Tämän seurauksena negaatio-operaatio toimii väärin yhdelleluvulle ja −(−128) = −128.

Yhden ja kahden komplementin välillä vallitsee riippuvuussuhde. Ne-gatiivisissa luvuissa kahden komplementti saadaan lisäämällä +1 luvun 1-komplementtiesitykseen.

2.5 Reaalilukujen esitys tietokoneessaKokonaislukujen jälkeen on hyvä tarkastella reaalilukuja, sillä ne ovat useim-pien insinöörialojen tärkein työkalu. Reaaliluvut ovat ylinumeroituvasti ää-retön lukujen joukko 2. Tietokoneen muisti on kuitenkin äärellinen ja siksireaalilukuja esitettäessä täytyy tyytyä riittävän hyvään approksimaatioon.Tietokone voi esittää osan reaalilukujen joukosta eli tietyn lukualueen.

Matemaatikot kavahtavat epätarkoilla luvuilla laskemista. Onneksi insi-nöörit ja fyysikot ovat tottuneet tekemään riittävän tarkkoja arvauksia ja sik-si TKK:n matematiikan laitos tarjoaakin varsin hyvää opetusta siitä, kuinkalaskennan epätarkkuutta voidaan arvioida ja rajoittaa mm. matriiseilla las-kettaessa. Myös peruskursseilla opetettavat iteratiiviset menetelmät hankkiaaskel askeleelta parempia ratkaisuja ovat suoraan suhteessa tähän, sillä tieto-koneilla laskettaessa iteraatio on halpaa ja riittää laskea tarkin arvio jonkin

2Ylinumeroituvuuteen palataan mm. T-79.1001 Tietojenkäsittelyteorian perusteet -kurssilla

Page 26: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 19

funktion arvosta lukualueen tarjoamalla tarkkuudella. Käytännössä kaikkilaskimet toimivat tällä periaatteella monimutkaisemmissa operaatioissa.

Reaalilukuja voidaan ilmaista tietokoneessa joko kiinteän tai liukuvan pil-kun lukuina. Näistä liukuvan pilkun lukujä käytetään kun tarkuudelle ei oletiukkoja rajoitteita ja kun summittainenkin tulos on riittävä. Kiinteän pil-kun lukuja käytetään erikoissovelluksissa, kuten sulautetuissa järjestelmissäja ohjelmissa, joissa on tärkeää hallita virheen suuruutta.

2.5.1 Kiinteän pilkun luvut

Kiinteän pilkun luvuissa (fixed point numbers) on ennalta sovittu termi, jollaluku jaetaan. Kymmenjärjestelmässä tämä on helppo ajatella siten, että lukujaetaan jollain kymmenen potenssilla. Esimerkiksi luku 42 jaetaan luvulla sa-ta 42

100= 0.42. Binäärilukujärjestelmässä sama tehdään jakamalla luku jollain

kakkosen potenssilla.Kiinteän pilkun luvussa on normaali lukuosa, jonka jälkeen tulee erityi-

nen merkki, jaospilkku (radix point), joka voi olla piste, pilkku tai mikä ta-hansa muu sovittu merkki. Jaospiste ilmaisee, että sen jälkeen tulevat luvuttulkitaan pilkun jälkeiseksi osaksi. Esimerkiksi luku 4.25 voidaan kymmen-järjestelmässä esittää huutomerkkiä käyttäen 4!25 tai binäärijärjestelmässä100!001 = 103.10−3.

Kiinteän pilkun lukujen etuna on se, että niiden lukualue on yhtenäinenja niillä tehtävissä laskutoimituksissa pyöristysvirhe on helppo arvioida. Siksiniitä käytetäänkin esimerkiksi kirjanpito-ohjelmistoissa ja signaalinkäsittely-piireissä yllätysten välttämiseksi. Kiinteän pilkun lukujen huono puoli on se,että niiden lukualue on hyvin rajallinen.

2.5.2 Liukuluvut

Liukuluvut (floating point numbers)saavat nimensä siitä, että niissä pilkunpaikka ei ole vakio. Liukuluku koostuu kolmesta osasta:

1. etumerkistä

2. määrätyssä kannassa oleva etumerkillinen perusluku b, jota kutsutaanmantissaksi

3. etumerkillinen eksponentti a.

Näistä yhdessä saadaan liukuluvun arvo A = b ∗ ka. Mantissassa kanta mää-rätään yleensä siten, että pilkku osuu merkitsevimmän luvun vasemmalle taioikealle puolelle. Esimerkiksi A = 0.91115 ∗ 1025 on 10-kannassa oleva liuku-luku. Tämän etuna on se, että liukuluvuilla pystyy ilmaisemaan hyvin laajan

Page 27: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 20

skaalan lukuja. Tyypillisessä 64-bittisessä double-tyypin liukuluvussa on 11bitin eksponentti ja 53 bitin mantissa, joten sillä pystyy kuvaamaan lukujasuurinpiirtein väliltä [−10308...10308].

Ongelmana liukuluvuissa on niiden virheissä oleva epävarmuus. Esimer-kiksi hyvin suuria ja pieniä lukuja yhteenlaskettaessa saattaa tulla virheitä.Jos oletetaan että edellisen esimerkin desimaaliluku A = 0.91115 ∗ 1025 onilmaistu viiden luvun tarkkuudella, ja B = 0.11111 ∗ 10−25 niin lukualueenrajoituksista johtuen A+B = A, vaikka tämän pitäisi olla mahdollista jos javain jos B on nolla! Ongelma muodostuu suuremmaksi jos useamman yhteen-laskun tulokseksi pitäisi tulla nolla, mutta tulokseksi tuleekin hyvin pieni,nollan lähellä oleva luku, jolla myöhemmin yritetään jakaa toinen luku. Tä-män takia esimerkiksi liukulukulaskennalla saatujen lujuuslaskujen tuloksetpitää aina tarkistaa järkeä käyttäen ennen esimerkiksi sillan rakentamista.

IEEE 754 -standardi määrittelee kaksi yleisessä käytössä olevaa liukulu-kutyyppiä, yksinkertaisen ja kaksinkertaisen tarkkuuden liukuluvut (float jadouble). Nämä on määritelty aikana, jolloin tietokoneissa oli 32-bittinen suo-ritin, jolloin yksinkertainen laskentatarkkuus merkitsi 32 bitin sanaa. Kak-sinkertainen tarkkuus taas merkitsi 64 bitin sanaa. Kaksinkertaisen tarkkuu-den laskennassa oli se huono puoli, että yksi laskuoperaatio vei 32-bittiseltäsuorittimelta useamman kellosyklin. 64-bittisten liukuluyksiköiden (floatingpoint unit , FPU) yleistyttyä yksinkertaisella tarkkuudella laskeminen on jää-nyt, koska siitä ei enää saa merkittävää nopeusetua.

2.5.3 Tietokoneiden äärellisyydestä

Liukulukujen yhteydessä käsiteltiin jo laskentatarkkuuden rajoituksia. Tie-tokoneet esittävät numeroita aina äärellisellä määrällä bittejä, ja siksi nii-den laskentatarkkuuskin on äärellinen. Teoriassa laskentatarkkuutta voitai-siin laajentaa äärettömäksi, ja esimerkiksi T-106.1220 Tietorakenteet ja Al-goritmit -kurssilla tehdään useinharjoitustyönä äärettömän tarkka liukuluku-laskin. Ikävä kyllä äärettömyyden käsittelyssä tosielämän realiteetit tulevatvastaan varsin nopeasti ja ääretön tarkkuus on vain haitaksi.

Laskentatarkkuuden äärellisyydellä on monia sivuvaikutuksia, joistayleissivistyksen nimissä kannattaa panna merkille seuraavat:

• positiivisilla kokonaisluvuilla laskettaessa: lukualueen suurin luku+1 =0 (johtuu toteutuksesta, syy selviää aliluvussa 2.8)

• 2-komplementtijärjestelmässä suurimman positiivisen luvun jälkeen tu-lee pienin negatiivinen luku ts. 127 + 1 = −128

Page 28: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 21

• kaikki tietokoneen muistissa olevat liukuluvut on mahdollista esittäämurtolukuina!

• (A + B) + C = A + (B + C) ei aina päde liukuluvuilla laskettaessa(hyödyllistä muistaa virheitä metsästäessä)

• yhtäsuuruusvertailu ei välttämättä toimi liukuluvuilla. Tällöin kannat-taa käyttää vertailua 1− ε < a

b< 1 + ε

Matemaattisesti k bitillä ilmaistu lukujoukko yhdessä logiikkapiireillä to-teutettujen yhteen- ja kertolaskuoperaation kanssa on Galois’n kunta (äärel-linen kunta), jonka koko on 2k (kts alaviite 3). Pienimmän mahdollisen kun-nan GF(2):n eli yhden bitin yhteenlaskuoperaatio on kohta esiteltävä loogi-nen XOR ja sen kertolaskuoperaatio on looginen AND. Tämän seurauksetovat varsin järisyttävät, emmekä ala niitä kaikkia luettelemaan tässä. Tä-män yhteyden johdosta tietoteknisissä koulutusohjelmissa opiskellaan paljonjoukko-oppia ja diskreettiä matematiikkaa.

2.6 MerkistötKaikki tietokoneessa oleva data ilmaistaan bittiyhdistelminä, myös aakkoset.Termi merkistö, joka on englanniksi kuvaavammin character encoding tar-koittaa sopimusta, jonka mukaan tietty binääriluku vastaa kirjoitusmerkkiä.Merkistöjen esittely on usein historiapainotteista, koska yhteensopivuussyistämerkistöjärjestelmät on suunniteltu (ainakin jossain määrin) taaksepäin yh-teensopiviksi. Vanhin laajalle levinnyt merkistö on American Standard Codefor Information Interchange (ASCII). Nykyään Suomessa on käytössä ISO-8859-1 ja ISO-8859-15 -merkistöjä sekä uudempaa UTF-8:aa. Merkistöjentunteminen on erinomaisen tärkeää käytettäessä kieliä, joiden aakkosto onjokin muu kuin normaali latinalainen aakkosto A-Z. 4. Eri merkistöjen peri-myshierarkia ja ääkkösten yhteensopivuus on kuvattu kuvassa 2.1. Tekstitie-dostoja voi muuntaa merkistöstä toiseen recode ja iconv .

Merkistöt ovat merkittäviä myös siksi, että niiden muuttaminen ohjel-mista tai protokollista on usein erittäin vaikeaa ja kallista. Esimerkiksi säh-

3Tämä yleistyy kaikille pk missä p on alkuluku ja k on positiivinen kokonaisluku.4TKK:n ATK-keskuksella oli aikaisemmin pitkään erityinen merkistöasiantuntija. Ky-

seinen henkilö oli legendaarinen Jukka K. ”Yucca” Korpela, jonka kotisivuihin [2] viitataanvieläkin parhaina suomalaisina ohjeina mm. web-sivujen tekemisestä. Suosittelemme läm-pimästi. Korpelan työsuhteen päättämisen perusteina käytettiin mm. perustetta ”Eiväthänmerkistöt ole enää ongelma”. Korpelan työsuhteen päättämisestä tiedottavan postauksenotsikko oli ”Jukka Korpelan ty=F6suhde Teknillisess=E4 korkeakoulussa p=E4=E4ttyy.”Aiheesta voi lukea lisää Juhani Anttilan kotisivuilta http://iki.fi/juhani/yucca/

Page 29: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 22

ASCII

ISO LATIN 1

SF-2

UTF-8

ISO LATIN 9

€, muuten sama ääkköset

Lokki{{kk|set

Lokki{{kk|set

Lokki{{kk|set

��kk�set

Kuva 2.1: Merkistöhierarkia. Yhtenäinen viiva kuvaa perimysjärjestystä, kat-koviiva epäyhteensopivuutta.

köpostissa käytettävä SMTP-protokolla käyttää 7-bittistä merkistöä, koskase levisi aikana jolloin 7-bittinen merkistö oli yleisesti käytössä. Jälkikäteenmuuttaminen maksaisi liikaa, ja siksi kaikki sähköpostitse siirrettävä data(myös binääritiedostot) muutetaan radix 64 -enkoodauksella 7-bittisiksi mer-keiksi (jotka sisältävät 6 bittiä varsinaista dataa). Käytännössä esimerkiksisuomenkielisen ISO-8859-15 -enkoodatun teksti vie siirtovaiheessa 25% enem-män tilaa kuin sen tarvitsisi, jos sähköpostiviestit olisivat 8-bittisiä. Tämä onkuitenkin katsottu halvemmaksi kuin kaikkien maailman SMTP-palvelimienmuuttaminen tai protokollan korvaaminen uudella.

2.6.1 American Standard Code for Information Interc-hange (ASCII)

Valtaosa nykyisiin tietokoneisiin johtaneesta kehityksestä on tapahtunutenglanninkielisessä maailmassa, pääosin Yhdysvalloissa. Yksi seuraus tästäon se, että American Standard Code for Information Interchange (ASCII) onensimmäinen laajalle levinnyt merkistö. Se suunniteltiin englannin kielen kir-joittamiseen, minkä johdosta siinä on koodit vain glyyfeille isosta A:sta pie-

Page 30: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 23

neen z:aan, numeroiden sekä englannin kielessä tarpeellisille erikoismerkeille,jotka on taulukoitu vastaavien numerokoodien kanssa taulukossa 2.6.1.

DEC HEX Merkki32 20 Välilyönti33 21 !34 22 "35 23 #36 24 $37 25 %38 26 &39 27 ’40 28 (41 29 )42 2A *43 2B +44 2C ,45 2D -46 2E .47 2F /48 30 049 31 150 32 251 33 352 34 453 35 554 36 655 37 756 38 857 39 958 3A :59 3B ;60 3C <61 3D =62 3E >63 3F ?

DEC HEX Merkki64 40 @65 41 A66 42 B67 43 C68 44 D69 45 E70 46 F71 47 G72 48 H73 49 I74 4A J75 4B K76 4C L77 4D M78 4E N79 4F O80 50 P81 51 Q82 52 R83 53 S84 54 T85 55 U86 56 V87 57 W88 58 X89 59 Y90 5A Z91 5B [92 5C \93 5D ]94 5E ^95 5F _

DEC HEX Merkki96 60 ‘97 61 a98 62 b99 63 c100 64 d101 65 e102 66 f103 67 g104 68 h105 69 i106 6A j107 6B k108 6C l109 6D m110 6E n111 6F o112 70 p113 71 q114 72 r115 73 s116 74 t117 75 u118 76 v119 77 w120 78 x121 79 y122 7A z123 7B {124 7C |125 7D }126 7E ~127 7F DEL

Taulukko 2.3: ASCII-merkistön tulostuvat merkit

Page 31: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 24

Kaikki nämä 95 merkkiä (sisältäen välilyönnin) ja 33 ohjausmerkkiä saa-tiin numeroitua seitsemällä bitillä. Tämä oli vuonna 1963 erittäin hyvä omi-naisuus, sillä seitsemän bitin tavu vie 12.5% vähemmän tilaa kuin 8 bitintavu. ASCII-merkistöstä on myös lähtöisin käsite seitsemän bitin tavusta,jonka takia ”normaalia” 8 bitin tavua kutsutaan oktetiksi mm. protokolla-määrittelyissä.

95 kirjoitettavan merkin lisäksi ASCII sisältää ohjausmerkkejä (seitse-mällä bitillä voi esittää 128 eri arvoa), jotka on listattu taulukossa 2.6.1.Ohjausmerkit kehitettiin aikanaan ohjaamaan kirjoitusta kaukokirjoitinlait-teilla, joten osa niistä liittyy suoraan kirjoittimen ohjaamiseen. Esimerkiksibackspace siirsi kirjoittimen kohdistusta yhden taaksepäin ja mahdollisestilaittoi valkoisen paikan peittämään aikaisemmin kirjoitetun merkin. Tätä pe-rua ovat myös käyttöjärjestelmien erilaiset käytännöt merkitä rivinvaihtoja.Unix käyttää line feed -merkkiä ( LF, \n), kun taas Mac OS 9 käytti carria-ge return ( CR, \r), merkkiä. DOS ja Windows taas perinteisesti käyttävätCR+LF-yhdistelmää. Tämän takia Unixissa kirjoitettu tekstitiedoston rivin-vaihdot todennäköisesti näkyvät väärin Windowsin Notepadissa (WordPadosaa tunnistaa Unix-formatoidun tekstin ja näyttää sen oikein) 5.

Ohjelmoitaessa laiteläheisillä kielillä ohjausmerkit ja niitä vastaavat merkitohjelmointikielissä tulevat varmasti opintojen aikana tutuiksi. On hyvä huo-mata, että ohjausmerkkejä voi syöttää näppäimistöltä terminaaliin pitämälläCTRL-näppäintä pohjassa (jota kuvaa merkki ^). Monet Unixin komento-riviohjelmat kuten wc odottavat syötteen loppuvan End of transmission -merkkiin (^D) ja useimmat ohjelmat saa lopetettua end of text -merkillä(^C). Jos/kun terminaalin asetukset eivät ole kohdallaan ja backspace- jadelete-napit eivät toimi, ne voi korvata ^H ja ^?-merkeillä.

Koska ASCII ei määritellyt skandinaavisia kirjaimia, se ei soveltunut suo-menkieliseen käyttöön. Kaikki tietokonerauta käytti seitsenbittistä merkis-töä, mutta ohjelmat usein tukivat muiden vastaavien merkistöjen käyttöä.Osa erikoismerkeistä korvattiin ääkkösillä jotta saatiin suomalainen versioASCII:sta, ISO-646-SF tai suomalaisittain SF-2. Korvatut merkit olivat [, \,] ja ^isoille kirjaimille ÄÖÅÜ sekä {, |,} ja ~pienille äöåü. Tästä johtuukinvanha käsite lokki{{kk|sist{. Myös varsinaista ASCIIta käyttävät tekstitie-dostot näytettiin tällä merkistöllä ja siksi suomalaisittain Java-ohjelmakoodi

5Tarve muuttaa rivinvaihdot formaatista toiseen esiintyy varsin usein. POSIXiin kuu-luvalla awk -ohjelmalla säännöllisten lauseiden avulla tämä on helppoa. Muunnokset onkuvattu esimerkkinä awk :n käytöstä luentomonisteen loppupuolella, aliluvussa 7.6.5. Po-sixin ulkopuolelta usein käytetään apuohjelmia unix2dos, dos2unix

Page 32: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 25

DEC HEX Symboli Kuvaus Näppäimistösyöte0 00 NUL Null-merkki1 01 SOH Start of Heading ctrl-A2 02 STX Start of Text ctrl-B3 03 ETX End of Text ctrl-C4 04 EOT End of Transmission ctrl-D5 06 ENQ Enquiry ctrl-E6 06 ACK Acknowledgement ctrl-F7 07 BEL BELL ctrl-G8 08 BS Backspace ctrl-H9 09 HT Horizontal Tab ctrl-I10 0A LF Line Feed ctrl-J11 0B VT Vertical Tab ctrl-K12 0C FF Form Feed ctrl-L13 0D CR Carriage Return ctrl-M14 0E SO X-On/Shift Out ctrl-N15 0F SI X-Off/Shift In ctrl-O16 10 DLE Data Line Escape ctrl-P17 11 DC1 Device Control 1 ctrl-Q18 12 DC2 Device Control 2 ctrl-R19 13 DC3 Device Control 3 ctrl-S20 14 DC4 Device Control 4 ctrl-T21 15 NAK Negative Aknowledgement ctrl-U22 16 SYN Synchronous Idle ctrl-V23 17 ETB End of Transmit Block ctrl-W24 18 CAN Cancel ctrl-X25 19 EM End of Medium ctrl-Y26 1A SUB Substitute ctrl-Z27 1B ESC Escape ctrl-[28 1C FS File Separator ctrl-\29 1D GS Group Separator ctrl-]30 1E RS Record Separator ctrl-^31 1F Unit Separator ctrl-_

Taulukko 2.4: ASCII-merkistön ohjausmerkit

olisi (Java on ajallisesti tuoreempi kuin SF-2) joskus näyttänyt seuraavalta:class HelloWorld ä

public static void main (StringÄÅ args) äSystem.out.println("Character sets rule, Ön this text is on a new line");å

å

Page 33: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 26

2.6.2 ISO-8859-1 ja ISO-8859-15

Koska ASCII-merkistö selkeästi vaikeutti useiden eurooppalaisten kielienkäyttöä ja koska Eurooppa oli markkina-alueena tärkeä, piti kehittää parem-pi merkistö. European Computer Manufacturers Association (ECMA) kehit-ti vuonna 1985 uuden merkistön nimeltä ECMA-94, joka kattoi lähes kaikkieuroopassa käytettävät merkit. Myöhemmin International StandardizationOrganization (ISO) otti tämän merkistön osaksi omaa standardiaan, ja siksisitä kutsutaan nimellä ISO-8859-1 tai ISO Latin 1.

Suomalaisittain ISO Latin 1 oli hieman puutteellinen, koska siitä puut-tui tiettyjä translitterointimerkkejä. Eurosymbolin vakiinnuttua kehitettiinjatkoversio ISO-8859-15, joka sisältää euromerkin € ja lisäksi lisättiin ve-näjänkielessä translitterointiin käytettäviä merkkejä (esimerkiksi šampanjavoidaan vihdoin kirjoittaa korrektisti translitteroituna). ISO-8859-15 tunne-taan myös nimellä ISO Latin 0 tai ISO Latin 9, ei kuitenkaan ISO Latin15.

Molemmat Latin-standardit ja Latin 1:n pohjalta kehitetty Windows-1252 ovat taaksepäin yhteensopivia seitsenbittisen ASCIIn kanssa. Vastaa-vasti SF-2 ei ole yhteensopiva ISO Latinin kanssa (aiemmin mainitut lok-ki{{kk|set). Toisaalta Latinien ääkköset eivät näy oikein seuraavaksi esitel-tävän Unicoden kanssa.

2.6.3 Unicode ja UTF-8

ISO Latin -merkistöt sopivat valtaosalle indoeurooppalaisia kieliä, mutta aa-sialaisia kieliä ne eivät tue, vaan niitä varten on omat, rinnakkaiset merkis-tönsä. Ohjelmien kehittäminen siten, että ne tukisivat useita erilaisia merkis-töjä, on kallista. Siksi jo 1980-luvulla alettiin kehittää Unicode-standardia,joka harmonisoisi merkistöjen esittämisen siten, että ohjelmistojen olisi hel-pompi tukea useita merkistöjä.

Unicode määrittelee koodiavaruuden 1 114 112 merkille, siten, että ensim-mäisen heksakoodi on 0x0 ja viimeisen 0x10FFFF. Koodit on jaetty tasoille,joiden koko on 216 merkkiä. Yleisimmin kielissä käytetyt merkit ovat ensim-mäisellä tasolla, jonka nimi on Basic Multilingual Plane (BMP). Koodejamerkitään ”U+” ja merkin koodi heksana. BMP:llä olevia koodeja voidaanmerkitä vain neljällä heksalla, jolloin esimerkiksi ”U+0041” vastaa isoa A-kirjainta. Unicoden koodiavaruus on erittäin iso suhteessa ihmiskunnan tä-mänhetkisiin tarpeisiin. Aasialaisissa kielissäkään ei ole useita kymmeniä tu-hansia kirjoitusmerkkejä (ihmiset eivät muistaisi niitä kaikkia). Siksi Unico-deen on ollut mahdollista lisätä paljon harvinaisia merkkejä ja myös vähän

Page 34: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 27

käytettyjä kieliä6.Unicode-standardin mukaisista merkistöistä laajimmin käytetty on UTF-

8, jossa jokainen ASCII-merkki esitetään yhdellä oktetilla ja muut merkitvaihtopituuskoodattuina 2-4 oktetilla. Kaikki varteenotettavat uudet ohjel-mistot tukevat UTF-8:aa, mutta vielä monessa vanhemmassa järjestelmässätörmää ISO Latin -merkistöihin. Esimerkiksi tätä luentomonistetta kirjoi-tettaessa paras LATEX-ympäristö ohjelmakoodin latomiselle, lstlisting ei tueerikoismerkkejä UTF-8 -muotoisessa syötteessä, minkä johdosta luvun 7 oh-jelmakoodissa ei ole ääkkösiä. Vaihtuvapituisuus vaikeuttaa ohjelmien kir-joittamista hieman, ja on yksi syy käyttöönoton hitaudelle7.

2.7 Boolen algebraKuten aiemmin mainittiin, Boolen algebra on laskemista totuusarvoilla 1 ja0. Algebrassa on kolme perusoperaatiota eli funktiota joilla totuusarvoja voiyhdistää, JA (AND , x∧ y), TAI (OR, x∨ y) ja EI (NOT ,¬x). Näitä operaa-tioita yhdistelemällä saadaan aikaan monimutkaisempia loogisia lausekkeita.Koska piirisuunnittelussa näistä funktioista käytetään englanninkielisiä ni-miä, käytämme niitä tässä luentomonisteessa.

Oheisista totuustauluista (taulukko 2.5 ja Vennin kaavioista (kuva 2.2)löytyy funktiot eri tavoin esiteltynä. Totuustaulu näyttää varsinaisessataulukko-osassa mitä arvoja funktio saa eri syötteillä. Vennin kaavio taasnäyttää millä syötteillä funktio on tosi ja millä ei.

Kannattaa huomata, että puhekielestä totutun vastaisesti OR on tosimyös silloin kun molemmat sen syötteet ovat tosia. Tulevat insinöörinalut

6Aivan kaikkea ei Unicodeenkaan oteta. Star Trek -universumista tutun klingonin rii-mujärjestelmää (plqaD) ei suostututtu ottamaan osaksi standardia. Unicode kuitenkinmäärittelee yksityisiä alueita, joita saa käyttää omiin, epävirallisiin tarkoituksiin (vrt.IP-avaruuden varaukset sisäverkoille), joten myös klingonia on mahdollista kirjoittaa jalukea Unicodella, kunhan hankkii käsiinsä Unicode konsortiosta täysin erillisen ConSc-ript Unicode Registryn osoitukset. Samasta rekisteristä löytää osoitukset myös Ferengille,Tengwarille, Cirthille ja Solresolille.

7Jarkko Oikarisen 1986 kehittämä Internet Relay Chat-protokolla ei tue merkistön il-moittamista ja siksi jokaisen IRC-kanavan onkin yhteisesti sovittava, mitä merkistöä silläkäytetään. Vuosituhannen ensimmäisen vuosikymmen puolivälissä oli suurta skismaa siitä,käytetäänkö kanavalla vanhaa hyvää ISO Latin X -merkistöä vai vaihdetaanko UTF-8:n.Kinastelu jatkui vuosia, mm. siksi että osa asiakasohjelmista ei tukenut UTF-8:aa. Nyttem-min esimerkiksi irssi -asiakasohjelmaan ja screen-ohjelmaan on lisätty tuki automaattiselleUnicoden tunnistuksella ja käännölle, mikä on vähentänyt ongelman näkyvyyttä.

Page 35: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 28

Taulukko 2.5: Totuustaulut AND, OR ja XOR-funktioille(a) AND (∧)

x y x AND y0 0 00 1 01 0 01 1 1

(b) OR (∨)x y X OR y0 0 00 1 11 0 11 1 1

(c) XOR (⊕)x y x XOR y0 0 00 1 11 0 11 1 0

(d) NOT (¬)x NOT x0 11 0

AND NOT

OR XOR

Kuva 2.2: Vennin diagrammit AND-, OR-, NOT- ja XOR-funktioille

yleensä keksivät jossain vaiheessa peruskoulusivistystään tämän OR-funktiontulkinnan kiertääkseen vanhempien ohjeet, kuten ”Voit ottaa kakkua tai jää-

Page 36: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 29

Perusoperaatio NAND-toteutusAND (∧) a ∧ b = (a|b)|(a|b)OR (∨) a ∨ b = (a|a)|(b|b)XOR (⊕) a⊕ b = (((a|b)|a)|((a|b)|b))NOT (¬) ¬a = a|a

Taulukko 2.6: Boolen algebran perusoperaatiot pelkän NAND-operaationavulla toteutettuina.

telöä”. Kokemus tietää kertoa, että loogiseen OR-funktioon vetoaminen eiauta, jos jää kiinni molempien ottamisesta.

Perusoperaatioita voidaan myös ajatella normaalina matematiikkana.AND-funktio on loogisesti kertolasku, koska a ∗ b = 0 jos ja vain josa = 0∨ b = 0. OR-funktiossa täytyy muistaa että 1 + 1 = 1. NOT-funktiotamerkitään usein B’ tai B.

Kytkentäalgebran teoreemat toimivat intuitiivisesti normaalien las-kusääntöjen mukaan, lukuunottamatta ns. De Morganin kaavaa.

Boolen algebran perusoperaatioden avulla voidaan määritellä myös muitaoperaatioita, joista yleisin eli eksklusiivinen OR [exclusive OR, XOR, x⊕y =((x∨y)∧¬(x∧y))] on muista operaatioista tunnetuin ja käytetyin. Se ratkaiseeedellämainitun (kakku OR jäätelö) monitulkintaisuuden olemalla tosi, jostoinen syötteistä on tosi mutta epätosi jos molemmat ovat. XOR on myösyhteenlasku modulus 2, ja toteutammekin pian (kohdassa 2.8, kuvassa 2.4)XOR:n ja muistibitin avulla summaimen.

Piirisuunnittelun kannalta mielenkiintoisia ovat NAND-operaatio [Shef-ferin viiva, x|y = ¬(x∧y)] ja NOR [ei erikoismerkkiä, määritellään ¬(x∨y)].Näiden kahden avulla voidaan toteuttaa Boolen algebran perusoperaatiot.Myös XOR ja AND yhdessä riittävät muiden perusoperaatioiden toteuttami-seen. Esitämme näistä yhden esimerkkinä taulukossa 2.6 ja toisen tekeminenjää harjoitustehtäväksi.

Logiikkakaavojen esittäminen

Logiikkakaavoja voidaan esittää usealla eri tavalla. Totuustaulut ovat yksin-kertaisia lukea, mutta niiden ongelma on se, että yhden muuttujan lisääminenlausekkeeseen kasvattaa neliön sivua ja siten pinta-alaa neliöllisesti. Venninkaaviot alkavat olla vaikeaselkoisia jo 4 muuttujan lausekkeissa 8. Loogisetlausekkeet ovat melko helppolukuisia, mutta niissä hierarkkisen rakenteen

8Wikipediasta löytyy esimerkkejä Vennin kaavioista yli kolmelle muuttujalle

Page 37: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 30

esittäminen on vaikeaa. Siksi monimutkaiset lausekkeet esitetään yleensä lo-giikkakaavioiden avulla.

Logiikkakaavioissa jokainen looginen funktio kuvataan logiikkaportilla.Logiikkaporttien syötteitä ja tulosteita yhdistetään toisiinsa viivoilla. Lo-giikkaportteja voidaan esittää usealla eri tavalla, joista yleisimpä ovat AN-SI/IEEE Standardi 91-1984 sekä IEC 60617-12, jotka on esitetty kuvas-sa 2.3. Ensinmainitun etuna on helppolukuisuus. ANSI-kaaviosta tottunuthenkilö pystyy yhdellä vilkaisulla hahmottamaan kaavion paremmin kuinIEC-kaaviosta. Kurssin esimerkkikaaviot esitetään IEC-standardin mukaisi-na, koska IEC ei vaadi muotojen muistiin painamista, vaan jokaisessa laati-kossa olevasta merkinnästä pystyy terveellä järjellä päättelemään, mikä port-ti on kyseessä. Kaavioiden osaaminen ei sinänsä kuulu kurssin ydinalueeseen,joten mahdollisissa tenttikysymyksissä riittää osata piirtää laatikoiden sisälleloogisia termejä (OR, AND, NAND) ja yhdistää niitä viivoilla toisiinsa.

Logiikkakaavioista on hyvä huomata muutama yksityiskohta. Negaatiotakuvataan ANSI-standardissa valkoisella pallolla ja IEC-standardissa valkoi-sella kolmiolla. Umpinainen pallo taas kuvaa molemmissa kaavioissa haarau-tumista.

2.8 Piirisuunnittelu Boolen algebrallaKuten binäärilukujen yhteydessä aliluvussa 2.2 mainittiin, Boolen algebraoli hyödytöntä kunnes kehitettiin tapa toteuttaa logiikkaportit sähköpiirei-nä. Tämän toteutuksen fyysisen puolen jätämme sähköinsinööreille emmekäkäsittele sitä tällä kurssilla9.

2.8.1 Puolisummain

XOR-funktiota esiteltäessä mainittiin, että XOR vastaa yhteenlaskua binää-rilukujärjestelmässä. Kuitenkin jos lasketaan kaksi totta yhteen, pitäisi pys-tyä siirtämään muistibitti (carry bit) eteenpäin. Yksinkertainen piiri, jokatoteuttaa tämän on kuvassa 2.4 esitetty puolisummain. Se ottaa syötteinätotuusarvot A ja B, laskee niiden summan S ja antaa muistibitin C (carry)ulos. Puolisummainta kuvataan sen englanninkielisellä lyhenteellä HA. (halfadder)

9Asiasta kiinnostuneet voivat käydä S-87 -professuurin kursseja.

Page 38: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 31

ANSI IEC

AND

OR

NOT

NAND

NOR

XOR

XNOR

&

≥1

1

&

≥1

1

1

Kuva 2.3: ANSI ja IEC -piirrosmerkit logiikkaporteille

2.8.2 Kokosummain

Puolisummain ei riitä, vaan yhteenlaskiessa pitää osata ottaa myös sisääntu-leva muistibitti. Kuvassa 2.4 esitetty kokosummain ottaa syötteinä arvot A,B ja muistibitin (carry in) CI. Se palauttaa summan S ja muistibitin (car-ry out) CO. Kokosummainta kuvataan sen englanninkielisellä lyhenteellä FA(full adder).

Kokosummaimen tärkein ominaisuus on se, että niitä voidaan ketjuttaayhteen pidempien lukujen yhteenlaskua varten. Kuvan 2.5 kahden kaksibit-tisen luvun summaimessa on käytetty hyväksi sitä, että kokosummaimen ra-kenne on tunnettu, joten sitä ei tarvitse piirtää. Sisääntuleva muistibitti C0on tässä tapauksessa tarpeeton, mutta seuraavassa esimerkissä sitäkin käy-tetään.

Page 39: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 32

1

&

AB S

C

1

&

AB 1

&

S

CI

≥1

Puolisummain (HA)

Kokosummain (FA)

CO

Kuva 2.4: Puolisummain ja kokosummain

C1

C0

S0

A0 B0

FA

S1

A1 B1

C2

C1 FA

Kuva 2.5: Kaksibittisten lukujen rinnakkaissummain

Yhteenlaskun lisäksi yhtä tärkeä lasku on vähennyslasku. Summain-vähennin (adder-subtractor) toteuttaa kahdelle luvulle joko yhteen- tai vä-hennyslaskun riippuen totuusarvosta D. Kun D on tosi, suoritetaan vähen-nyslasku. Summaimen toimintalogiikka perustuu siihen aliluvussa 2.4 mai-nittuun totuuten, että positiivisen ja negatiivisen luvun yhteenlasku toimii

Page 40: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 33

kahden komplementtimuodossa kuten kahden positiivisen luvun yhteenlasku.

B1

A1

B0

A0

C0

C1

C2

S1

S0FA

FA

1 1

≥1

&

&

1

1 1

≥1

&

&

D

1

Kuva 2.6: 2 bitin summain-vähennin

Kuvan 2.6 summain-vähentimessä luku B muutetaan sen kahden komple-menttimuotoon seuraavalla kaavalla: käännetään kaikki binääriesityksen bi-tit NOT-operaatiolla ja lisätään yksi. Ykkösen lisäys toteutetaan syöttämälläyksi ensimmäisen FA:n sisääntulevaksi muistibitiksi (C0).

Katkoviivoilla erotettu piiri taas on niinkutsuttu multiplekseri eli mux ,joka esitetään kokonaan koska sitä ei ole aikaisemmin esitelty. Riippuen sensyötteen D arvosta multiplekseri antaa jommankumman syötteistään ulos.Jos D on 0, annetaan alkuperäinen luku B, jos taas D on 1, annetaan NOT B.Suurennos multiplekseristä on kuvassa 2.7. Muxia käytetään mm. puhelinlii-kenteessä yhdistämään monta äänisignaalia samaan puhelinjohtoon eri aikoi-hin. Analogialaitteissa käytetään aikajakomultipleksausta (time division mul-

Page 41: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 34

tipleksing, TDM), joka menee kurssin aihealueen ulkopuolelle. TDM:ään pa-lataan kuitenkin puhelinverkkoja käsittelevässä kurssissa, joka on tietotekni-koille T-110.2100 Johdatus Tietoliikenteeseen ja sähköteknikoille S-72.1130Telecommunication Systems.

1 1

≥1

&

&

DX1

X2

O

Kuva 2.7: Multiplekseri

Yhteenlaskun lisäksi tärkeä laskutoimitus on kertolasku. Kertolasku to-teutetaan piirisarjatasolla jo ala-asteelta tutulla allekkainlaskulla. Binääri-luvuille kertolasku on sama kuin AND-operaatio, joten kertolaskun toteu-tuksen monimutkaisuus tulee summien laskemisesta. Jakolaskua kurssilla eikäsitellä.

Normaalien laskutoimitusten lisäksi siirto-operaatiot (shift , bitshift)ovat tärkeitä binääriaritmetiikassa. Näistä yleisin on aritmeettinen siirto-operaatio, jossa tavun siirtäminen yhdellä oikealle vastaa positiivisen koko-naisluvun jakamista kahdella (mitä tapahtuu parittomille luvuille?). Siirtä-minen yhdellä vasemmalle taas vastaa kertomista kahdella.

Aritmeettisessa siirto-operaatiossa siirretään sanan sisällä bittejä oikealletai vasemmalle siten, että mahdolliset sanan ”reunan yli” menevät bitit hä-vitetään ja uudet bitit ovat kaikki nollia. Oikealle siirrettäessä kaikki uudetbitit saavat alkuperäisen luvun ensimmäisen bitin arvon, jotta luvun etu-merkki ei muuttuisi siirto-operaatiossa.

Tietokoneet ja piirit toimivat siten, että logiikkaportit tuottavat tietyn tu-loksen kun niiden läpi ajetaan kellopulssi. Emme tällä kurssilla käsittele kel-lopulsseja aaltoina tai käsittele sitä, tapahtuuko laskenta pulssin nousevallavai laskevalla reunalla10. Rekistereitä käytetään säilyttämään laskennan tilakellopulssista toiseen. Ilman rekistereitä laskennalla ei voisi olla mitään tilaa,mikä on hieman ikävä asia monimutkaisempia laskutoimituksia suorittaessa.Yksinkertainen rekisteri tallettaa yhden tavun (tai vain bitin) kellopulssin ylija antaa sen ulostulonaan kunnes laitteesta katkaistaan virta.

10Sähkötekniikkaa lukevat tutustuvat näihin muualla ja tietoteknikoiden ei tarvitse tie-tää niistä paljoakaan.

Page 42: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 35

2.9 VirheentarkistusTietoteknikot usein ajattelevat tietokonetta fyysisestä maailmasta erillisenä.Vaikka tietokoneen toiminta korkeammille tasoille abstrahoituna onkin kovinvahvasti irti fysiikan laeista, on se matalalla tasolla silti riippuvainen fysii-kasta. Sähköisten laitteiden yksi ominaisuus on se, että ne saattavat ottaahäiriötä ympäristön magneettikentistä.

Kun bitti siirtyy erilaisilla siirtoteillä, on aina mahdollista että jokin häi-riö aiheuttaa bitin pyörähtämisen 0 → 1 tai 1 → 0. Tämä johtaa siihen,että laskennan tulos on virheellinen, mikä ei ole toivottavaa. Tätä vartenjoillain siirtoteillä kannattaa käyttää virheentarkistusta ja mahdollisesti vir-heenkorjausta. Esimerkiksi suorittimen sisällä matkat ovat niin pieniä, ettävirheen todennäköisyys on erittäin pieni, joten tarkastusta ei usein toteute-ta 11. Toisaalta tietoliikenteessä virheentarkastusta toteutetaan monella eritasolla, koska siirtoteillä virheet ovat yleisiä. Virheen havaitseminen on hel-pompaa kuin sen korjaaminen. Jos tiedon uudelleenhakeminen on halpaa, eiusein yritetä korjata virhettä vaan haetaan tieto uudestaan. Toisaalta jos tie-don uudelleenhakeminen on vaikeaa (tai jopa mahdotonta), pyritään virheetmyös korjaamaan.

Siirtotien virheherkkyyttä kuvataan Bit Error Ratiolla eli BER-luvulla.Luku kuvaa nimensä mukaan sen, kuinka suuri osuus biteistä luetaan vir-heellisinä joltain siirtotieltä. BER ilmoitetaan negatiivisina kymmenen po-tensseina: BER 10−3 tarkoittaa, että yksi tuhannesta bitistä kääntyy.

Virheiden havaitsemiseen ja korjaamiseen käytetään erilaisia koodeja.Koodi on viestinnässä käytettävä termi, joka kuvaa muuntosäännöstöä. Koo-din avulla siirrettävät koodisanat muutetaan itse informaatioksi.

Hyvä esimerkki ovat NATOn puhelinaakkoset (Alfa, Bravo, Char-lie...Zulu). Niissä yksi koodisana on yksi sana. Jokaisen sanan on tarkoitusvälittää yhden kirjaimen verran varsinaista informaatiota. Lisäksi, koska sa-noja on paljon ja kirjaimia vähän, sanat on vielä valittu siten, että yksikäänsana ei juurikaan muistuta toista. Puolikkaastakin kuullusta sanasta pystyypäättelemään, mikä sana on kyseessä. Koska NATO on monikansallinen yh-teenliittymä, on sanat vielä lisäksi valittu sellaisiksi, että kaikkien peruskou-lun käyneiden NATOn jäsenmaiden kansalaisten pitäisi ne tunnistaa (muistinhelpottamiseksi).

Toinen esimerkki ovat opiskelijanumerot. Opiskelijanumero on kaikilla vii-me vuosikymmeninä opintonsa alkaneilla viisinumeroinen. Lisäksi opiskelija-numeron perään lisätään tarkastuskirjain. Ohessa staattinen (miksi se voiolla staattinen?) Java-metodi, joka palauttaa opiskelijanumeron tarkastus-

11Tarkastus toteutetaan erittäin kriittisissä järjestelmissä

Page 43: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 36

kirjaimen.

public static char tarkastuskirjain(int opiskelijanumero){char[] valikoima =

{’A’,’B’,’C’,’D’,’E’,’F’,’H’,’J’,’K’,’L’,’M’,’N’,’P’,’R’,’S’,’T’,’U’,’V’,’W’};return valikoima[opiskelijanumero %19];

}

Tarkastuskirjaimina ei käytetä kaikkia aakkosten kirjaimia. Sekaannus-ten välttämiseksi välistä on poistettu ne kirjaimet, jotka saattaisivat näyt-tää liikaa numeroilta (G, I, O jne.). Kun opiskelijoiden tuloksia kirjataanja opiskelijanumerot muutetaan analogisesta muodosta digitaaliseen, kouluntietojärjestelmät eivät suostu kirjaamaan tuloksia opiskelijanumeroille, joi-den tarkastuskirjain ei ole sopusoinnussa numeron kanssa. Käytännössä tä-mä aiheuttaa harmia opetushenkilökunnalle, koska monilla opiskelijoilla ontapana sutaista opiskelijanumeronsa moniselitteisesti tai epäselvästi. Toisaal-ta opiskelijat eivät itse tiedosta tätä, koska virheenkorjausjärjestelmä yleen-sä estää virheen tulemisen opiskelijan tietoon asti. On kuitenkin kohteliastakirjoittaa opiskelijanumero selvällä käsialalla.

Käytännön elämästä on helppo keksiä koodeja ja virheentarkastuksenja -korjauksen sovelluksia12. Binäärimuotoisen datan virheenkorjaus pohja-tuu vahvasti matematiikkaan. Tällä kurssilla esitellään virheentarkastusme-netelmistä pariteettibitti ja CRC-tiivistealgoritmi sekä virheentarkastus ja-korjausmenetelmistä Hamming-koodaus. Hamming-koodaus ja Hamming-matriisit saattavat tulla vastaan myös perusmatematiikan kursseilla. CRC:nja muiden tiivistefunktioiden toimintaperiaatteeseen pääsee tutustumaan esi-merkiksi Mat-1.2991 Diskreetin matematiikan perusteet -kurssilla, joka sopiihyvin TIK ja TLT-ohjelmien tieteen metodiikan opinnoiksi. Tiivistefunktiot(hash functions) ovat tärkeitä paitsi virheentarkastuksessa, myös tietoraken-teiden toteutuksessa, ja niitä käsitellään tarkemmin T-106.1220 Tietoraken-teet ja Algoritmit -kurssilla. Yksisuuntaisten tiivistefunktioiden päälle raken-

12Esimerkiksi yksi tekniikan perusopetuksen tarkoitus on opettaa kaikille opiskelijoil-le yhteinen koodisto. Shannonin informaatioteorian mukaan jaetun koodiston määrä jailmaisuvoima on suoraan verrannollinen tiedonsiirtokapasiteettiin, kun tiedonsiirtoväylän(puhe, teksti) kapasiteetti on vakio. Insinöörijargon ja kaikkien muidenkin alojen ammat-tisanastot palvelevat tätä tehokkaamman tiedonsiirron tarkoitusta. Koulussa opetetaannimenomaan niitä vaikeita asioita, joiden sisäistämiseen saattaa mennä päiviä tai jopakuukausia, mutta jotka kertaymmärryksen jälkeen pysyvät muistissa pitkään. Diplomi-insinöörin ja AMK-insinöörin ero on siinä, että AMK-insinööriopiskelijaa koulutetaan ym-märtämään ensisijaisesti oman alansa jargonia ja termistöä riittävästi, jotta tämä kykeneesynteesiin omaksumastaan. Teekkaria koulutetaan ymmärtämään myös matematiikan, fy-siikan (ja kemian) käsitemaailmaa, jotta hän kykenee synteesiin näiden ja oman erikoisa-lansa välillä.

Page 44: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 37

tuu myös suuri osa modernia kryptografiaa, joten ne tulevat vastaan myöstietoturvaan erikoistuville.

2.9.1 Pariteettibitti

Virheentarkastusalgoritmeista parillisuus- eli pariteettibitti on intuitiivisin jayksinkertaisin. Sopimuksella jokaiseen tavuun lisätään bitti alkuun tai lop-puun ja sovitaan että tavussa on aina joko parillinen (tai pariton) määräykkösiä (tai nollia).

Kun luodaan tavu, tarkastetaan onko tavussa pariton vai parillinen mää-rä bittejä ja asetetaan pariteettibitti joko päälle tai pois valinnoista riippuen.Kun vastaanotetaan tavu, tarkastetaan onko tavussa pariteettibitteineen pa-rillinen määrä ykkösiä. Mikäli ei ole, tavu on muuttunut matkalla.

Pariteettibitin hyvä puoli on sen yksinkertaisuus. Sen huono puoli on se,että se on sokea kahden, neljän tai yleensä parillisen bittimäärän muuttumi-sille. Toinen huono puoli on se, ettei pariteettibitti kerro missä kohtaa tavuavirhe tapahtui.

Vanhoissa modeemeissa usein käytettiin pariteettibittiä havaitsemaan vir-heet.

2.9.2 Syklinen redundanssitarkastus (CRC)

CRC on lyhenne sanoista Cyclic Redunancy Check . Matemaattisesti CRC pe-rustuu äärellisyyden yhteydessä aliluvussa 2.5.3 mainittuihin Galois’n kun-tiin ja niiden yhteneväisyyteen polynomien jakolaskun modulo 2 kanssa. Po-lynomi on helppo esittää vektorina (miten?).

Koko viesti kuvitellaan yhdeksi pitkäksi luvuksi, jota lähdetään ja-kamaan ennalta sovitulla jakajalla jakokulmassa. Jakojäännös on CRC-tarkastussumma ja sitä verrataan erikseen saatuun tarkastussummaan. Jossummat ovat samat, viesti on hyvin todennäköisesti siirtynyt muuttumat-tomana. Käytännössä tarkistuksen tehokkuus riippuu siitä, kuinka hyvä japitkä polynomi on. Paraskaan polynomi ei ehkä huomaa polynomin pituistentai sitä pidempien ketjujen muuttumista. Esimerkiksi nelibittistä polynomiapystyy huijaamaan asettamalla viestin neljä viimeistä bittiä sopivasti.

Kannattaa huomata, että pariteettibitti on itseasiassa yksinkertaisinCRC-tarkastuskoodi x+ 1.

CRC-koodit ovat varsin monimutkaisia ja niitä on paljon erilaisia. CRC-koodeja käytetään yleisesti, koska niiden laskennan toteuttaminen logiikka-piireillä on helppoa ja halpaa. Tämän kurssin puitteissa niistä tarvitsee tie-tää, että perustuvat diskreettiin matematiikkaan ja osata selittää yleisellätasolla niiden toiminta.

Page 45: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 38

2.9.3 Hammingin etäisyys ja koodaus

Hamming koodauksessa tärkeä käsite on Hammingin etäisyys. Hamminginetäisyys on formaalisti se korvausoperaatioiden määrä, jolla merkkijono (tie-tokoneissa binääriluku) voidaan muuttaa toiseksi.

Etäisyysesimerkkejä:

• etäisyys merkkijonojen ”0000” ja ”0101” välillä on 2, koska jälkimmäinenmerkkijono saadaan korvaamalla ensimmäisestä toinen ja neljäs 0, siisyhteensä kaksi merkkiä

• sanojen ”vapaus” ja ”vastuu” välinen etäisyys on 3 (p→ s, a→ t, s→ u)

Hammingin etäisyys on metriikka tietynpituisille merkkijonoille. Sitä käy-tetään monessa informaatioteorian sovelluksessa ja myös hahmontunnistuk-sessa ja koneoppimisessa. Esimerkiksi verkkokauppa Amazonin yhden henki-lön tilaushistoria voidaan ilmaista totuusarvojonona, jossa on tietty paikkajokaiselle Amazonin myymälle kirjalle. Arvo on tosi jos henkilö on ostanutkyseisen kirjan. Tällöin kahden henkilön ostajaprofiilien samankaltaisuudenmittana voidaan käyttää näiden profiilien välistä Hammingin etäisyyttä. Pro-fiililtaan samankaltaisille henkilöille kannattaa tarjota muiden samankaltai-sen ostamia kirjoja. Todellinen algoritmi on tehokkuussyistä jonkin verranmonimutkaisempi. Aiheeseen palataan kurssilla T-61.2010 Datasta Tietoonja monilla informaatiotekniikan pääaineen kursseilla.

Hamming-koodi on laajennus pariteettibittiin ja se tarjoaa myös virheen-korjausta. Hamming-koodauksessa rakennetaan binäärikoodi, joka käyttääriittävän montaa pariteettibittiä, jotta jokaista dataa koodaavaa bittiä tar-kistavien pariteettibittien yhdistelmä on uniikki. Tällöin yhden bitin virhevoidaan myös korjata haluttaessa.

Hamming-koodaus voidaan yleisesti rakentaa seuraavien periaatteidenmukaisesti:

1. n databittiä voidaan koodata k pariteettibitillä kun n+ k + 1 ≤ 2k.

2. numeroidaan databitit binääriluvuilla

3. kaikki luvut joissa on vain yksi bitti päällä ovat tarkastusbittejä, muutovat databittejä

4. laske pariteettibitit

• pariteettibitti 1 lasketaan kaikista niistä biteistä, joiden paikkanu-merossa on vähiten merkitsevä bitti päällä (ts. parittomat bitit)

Page 46: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 2. BITISTÄ SUMMAIMEEN 39

• pariteettibitti 2 lasketaan kaikista luvuista joissa on toinen bittipäällä

• pariteettibitti 4 (kolmas pariteettibitti) lasketaan kaikista luvuistajoiden binäärilukuesityksessä on kolmas bitti päällä jne.

Hamming-koodit voidaan esittää myös matriisialgebran avulla. Formaa-listi tarvitaan matriisit G ja H, joista G generoi Hamming-koodeja. Kun si-tä kerrotaan oikealta binäärivektorilla, saadaan tulokseksi sana koodattunaasiaankuuluvalla Hamming-koodauksella. Vastaavasti matriisi H tunnistaaHamming-koodeja. Kun koodattu kerrotaan H:lla oikealta, saadaan tulok-seksi datavektori, joka on 0, jos virheitä ei ole tapahtunut. Jos virheitä ontapahtunut, tulos kertoo binäärilukuna sen bitin paikan, joka oli virheellinen.

Hamming-koodit pystyvät vaihtoehtoisesti joko korjaamaan yhden vir-heen tai havaitsemaan kaksi. Niiden toteuttaminen rautatasolla on varsinyksinkertaista, ja monet muistipiirit käyttävät sitä. On suunnittelukysymys,kannattaako muistissa mielummin korjata yksi virhe vai havaita kaksi virhet-tä.

Page 47: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Luku 3

Ohjelmoitavat tietokoneet

Suoritusyksikkö on pohjimmiltaan laskin, johon on toteutettu lisäominai-suuksia. Suoritusyksikköä ohjataan aliluvussa 3.2.6 esiteltävällä käskykanta-arkkitehtuurilla , joka mahdollistaa ohjelmien tekemisen suoritusyksikölle jasitä ohjaavalle ohjausyksikölle. Tämä ohjelmoitavuus tekee suorittimesta niinmonikäyttöisen: sen voi ohjata tekemään jotain muuta ilman fyysisiä muu-toksia laitteen rakenteeseen. Ohjelmointi on konesuunnittelua helpompi jahalvempi tapa soveltaa olemassaolevaa ratkaisua uuteen ongelmaan. Ohjel-moitavan laitteen etuna on myös se, että se voi itse muuttaa omaa ohjel-maansa.

Tietokonetta ajateltaessa tulee helposti ajateltua työpöydän vieressä sei-sovaa PC-tornia. Yli 99% tässä luvussa kuvatun ohjelmoitavan tietokoneenmallin mukaisista laitteista on jotain muuta kuin PC-laitteita. Kännykät,kellot, autot ja jopa talot sisältävät sulautettuja järjestelmiä, joiden suunnit-teluperiaatteet ja ominaisuudet ovat samat.

Tässä luvussa käydään läpi modernien ohjelmoitavien tietokoneiden pe-rusrakenteet, suorittimen rakenteet ja sen erilaiset rekisterit, muistit, sekäkäskykanta-arkkitehtuurin. Lisäksi katsotaan suorittimen toimintaa yhtä käs-kyä suorittaessa ja tutustutaan laitteisto-osien välisen tiedonsiirron nopeu-teen (tai paremminkin hitauteen).

3.1 Erityislaskimista ohjelmoitavaan tietoko-neeseen

Olemme aliluvussa 2.8 käyneet läpi summain-vähentimen toteutuksen logiik-kaporttitasolla. Kyseiseen summain-vähentimeen olisi helppo lisätä kertolas-ku ja jakolasku. Tällaista laskinta kutsutaan yleisesti nelilaskimeksi. Laski-melle syötetään operandit ja haluttu laskutoimitus ja laskin näyttää tuloksen

40

Page 48: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 3. OHJELMOITAVAT TIETOKONEET 41

näytöllä. Nelilaskinten sisällä on yksinkertainen aritmeettis-looginen yksikkö(Arithmetic Logic Unit , ALU).

Ensimmäiset tietokoneet olivat luonteeltaan hyvin pitkälti ALUmaisia jane oli suunniteltun tiettyihin tarkoituksiin. Charles Babbagen 1800-luvullasuunnittelema differenssikone oli täysin mekaaninen laite, joka laski polyno-mien arvoja ja toimi kahvaa kääntämällä. Colossus-konetta käytettiin toisenmaailmansodan aikana murtamaan saksalaisten käyttämiä koodeja. Näidenkoneiden hyöty oli vain rajallinen, sillä ne eivät olleet Turing-täydellisiä.

Turing-täydellisyys on tietotekniikan keskeisimpiä termejä. Sitä käsitel-lään tarkemmin liitteessä A.1. Turing-täydellisyys on tärkeää, sillä Turing-täydellinen kone pystyy laskemaan kaiken sen, mikä on mahdollista laskea.

Ensimmäiset piirrokset Turing-täydellisille koneille teki äskenmainittuCharles Babbage. Hänen suunnittelemaansa analyyttistä konetta ei koskaanvalmistettu. Tämä ei kuitenkaan estänyt Babbagen palkkaamaa Ada Love-lacea kirjoittamasta maailman ensimmäisiä tietokoneohjelmia suunnitteluas-teella olevalle analyyttiselle koneelle.

Ensimmäiset tunnetut Turing-täydelliset tietokoneet rakennettiin 1940-luvulla. Saksalaisen insinöörin Konrad Zusen suunnittelema Z3 oli Turing-täydellinen, mutta se tuhoutui täysin liittoutuneiden pommituksissa. SenTuring-täydellisyys todistettiin vasta 1998. Yleisimmin esimerkkinä käytettytietokone on ENIAC (Electronic Numerical Integrator And Computer), jo-ka valmistui 1946 ja sillä laskettiin vetypommin valmistamiseen tarvittavialaskuja.

ENIACin suurin puute oli se, että sille ei pystynyt tallentamaan ohjelmia.Ohjelmien syöttäminen tehtiin vivuilla ja se vei päiviä. ENIAC-projektiinkesken kaiken mukaan liitetty John von Neumann konsultoi myös seuraavan,EDVAC (Electronic Discrete Variable Automatic Computer) tietokoneen ra-kentamista. Hänen julkaisemansa ”First Draft of a Report on the EDVAC”kuvaa ensimmäisen tietokoneen, jossa sekä ohjauskäskyt että data tallennet-tiin samaan muistiin.

Tämä arkkitehtuuri on sittemmin vakiintunut ja sitä kutsutaan nimellävon Neumann -arkkitehtuuri. Kilpaileva termi on yleismuistiin tallennettavanohjelman arkkitehtuuri (stored program computer architechture).

Kilpaileva arkkitehtuuri on niinkutsuttu Harvardin arkkitehtuuri, jossaohjelmakäskyt ja data on tallennettu eri medioille ja niitä varten on eri väy-lät, joita pitkin ne siirretään suorittimelle. Harvardin arkkitehtuuria käyte-tään usein erikoispiireissä, kuten signaalinkäsittelysuorittimissa sekä joissainpienissä mikrokontrollereissa.

Page 49: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 3. OHJELMOITAVAT TIETOKONEET 42

3.2 Von Neumann -arkkitehtuuriVon Neumann -arkkitehtuurin kantava ajatus on järjestelmäväylä. Yksinker-taisessa koneessa on neljä osaa: ohjausyksikkö (Control Unit , CU), suori-tusyksikkö (excecution unit), muisti ja siirräntäyksikkö (input-output).

Nykyisen tietokoneen suoritin (Central Processing Unit , CPU) sisältääsekä suoritusyksikön että ohjausyksikön. Yksinkertaisimmillaan suoritusyk-sikkö voi olla pelkkä ALU.

Prosessori

Muisti

I/O-moduuli

PC

IR

MAR

MBR

IO AR

IO BR

Suoritusyksikkö

Väylä0

.

1

.

3

.

... a

käsky

a+1

käsky

a+2

käsky

... b

data

b+1

data

b+2

data

... n-2

.

n-1

.

Puskuri ... ... ...

Kuva 3.1: von Neumann -arkkitehtuuri yksinkertaisimmillaan

3.2.1 Väylä

Järjestelmäväylä mahdollistaa suoritusyksikön, muistin ja lisälaitteiden väli-sen viestinnän. Kaikki laitteet ovat väylän varrella ja voivat lukea siitä vies-tejä ja kirjoittaa sinne viestejä. Suoritusyksikön kannalta ero keskusmuistinja lisälaitteiden välillä on vain osoitteessa: osa viittaa muistiin ja osa lisälait-teisiin. Dataa voidaan siirtää väylää pitkin suoritusyksikön rekistereihin janiistä takaisin muistiin tai lisälaitteille.

Väylässä siirretään tietoa. Tiedonsiirto voi olla rinnakkaista, jolloin lii-täntää pitkin voidaan siirtää yksi bitti. 64 bitin sanan siirtämiseen tarvitaan64 liitäntää. Siirto voi olla myös sarjamuotoista, jolloin yksi sana voidaansiirtää palasina yksi kerrallaan.

Suoritusyksikkö voi kontrollikäskyllä kertoa väylän varrella olevalle lait-teelle haluavansa tietyn osoitteen. Tämän jälkeen lisälaite siirtää tiedon da-takanavalla oleviin liittimiin ja viestii kontrollikanavaa pitkin, että tiedon voilukea näistä liittimistä. Kontrolliviestit ja muistiosoitteet voidaan toteuttaasamoilla liitännöillä tai jokaiselle omilla liitännöillä (fyysisesti eri langoilla).

3.2.2 Muisti

Muisti sisältää ohjelman suoritukseen tarvittavat käskyt ja laskennassa käy-tettävän datan. Muistia on helppo ajatella yhtenä hyvin pitkänä nauhana,

Page 50: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 3. OHJELMOITAVAT TIETOKONEET 43

jossa on sanoja peräkkäin. Aiemmin mainitussa teoreettisessa Turingin ko-neessa muisti on toisesta päästään loppumaton nauha. Ikävä kyllä, sellaistaei ole käytännössä mahdollista toteuttaa, joten kaikki tietokoneet ovat vainmelkein ekvivalentteja Turingin koneen kanssa.

Muistiin osoitetaan useimmiten yhdellä sanalla, ja tämän johdosta 16- ja32-bittisissä käyttöjärjestelmissä on selkeä raja suurimmalle muistimääräl-le. Osoitteen binäärisyydestä johtuu myös se, että muistin määrä on kahdenpotenssin moninkerta.on N tavun muistin ensimmäinen osoite on 0 ja vii-meinen N − 1. Tästä erotuksesta syntyy ohjelmoinnin yleisin sudenkuoppa,ns. off by one -virhe, jollaisen jokainen pääsee tekemään vähintään kerranohjelmoinnin peruskurssilla.

Tietokoneissa käytettävä muisti on tyypiltään haihtuvaa, eli sen sisältöhäviää, kun koneesta katkaistaan virta 1. Siksi muisti ei sovi pysyvään tiedontallennukseen, vaan tieto tallennetaan jollekin lisälaitteelle, kuten kovalevylletai vaikkapa paperitulosteelle.

3.2.3 Siirräntäyksikkö

Siirräntäyksikkö (Input/Output, I/O-yksikkö) hoitaa tiedonsiirron lisälait-teiden kanssa. Tälläisiä lisälaitteita voivat olla näyttölaite, tulostin, näppäi-mistö, verkkolaite tai vaikkapa peliohjain. Lisälaitteille on tyypillistä, että nekäsittelevät tietoa hitaammin (tai joskus hetkellisesti nopeammin) kuin var-sinainen tietokone. Siksi siirräntäyksikössä on puskureita tiedon väliaikaistasäilytystä varten.

Käytännössä kaikissa tietokonejärjestelmissä on järjestelmäväylä, suoritinja muistia. Lisäksi niihin on liitetty erilaisia lisälaitteita, jotka mahdollistavattietokoneen käytön erilaisissa sovelluksissa. Näitä laitteita on monia, eikäniitä ole tarpeen käsitellä tietokoneiden perusrakenteen yhteydessä, joten nepiilotetaan siirräntäyksikön käsitteen taakse tässä yhteydessä. Käytännössäuseimmista järjestelmistä ei edes löydy yhtä yksikäsitteistä siirräntäyksikköä,vaan sen tehtäviä hoitaaa monta alijärjestelmää.

3.2.4 Suoritusyksikkö

Suoritusyksikkö suorittaa käskyjä yksi kerrallaan. Kontrolliyksikkö lukee käs-kyn ja käskyyn liittyvän datan muistista ja kutsuu suoritusyksikköä. Kuvassa3.1 on piirretty suoritusyksikön perustoimintojen kannalta olennaisia rekiste-reitä. Suoritusyksikkö suorittaa operaatioita rekistereissään olevalle datalle.

1Itseasiassa sisältö ei häviä välittömästi. Sen pystyy vielä lukemaan joitakin minuut-teja tai tunteja myöhemmin erikoislaitteilla. Tämä on varsin hiljattain pinnalle noussuttietoturva-aukko, jota ei useimpien järjestelmien suunnittelussa ole otettu huomioon

Page 51: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 3. OHJELMOITAVAT TIETOKONEET 44

Data haetaan rekistereihin muistista ja operaation tulos kirjoitetaan takaisinmuistiin.

Prosessorissa on monenlaisia rekistereitä, jotka voivat olla näkyvissä pro-sessoria käytettäessä (esimerkiksi ohjelmalle). Jako ei ole tarkka, sillä eriprosessorit sallivat ohjelmien muokata eri rekistereitä. Yleensä ohjelmoijallenäkyvissä ovat:

• Datarekisterit sisältävät nimensä mukaan laskennassa käytettäviä nu-meroita.

• Usein kokonaisluvuille ja liukuluvuille on eri rekisterit.

• Osoiterekisterit sisältävät käytettäviä muistiosoitteita. Esimerkiksi:

– indeksirekisteri sisältää tiedon käytettävissä olevan muistin alim-masta osoitteesta. Tämän avulla kaikki muistiosoitteet tulkitaanindeksirekisterin arvo + muistipaikan numero = muistin todelli-nen osoite

– pino-osoitin sisältää tiedon senhetkisestä pinon suoritustilasta

Kaikissa prosessoreissa on myös rekistereitä ehtokoodeille (condition co-de, flag). Nämä ovat yksittäisiä totuusarvoja, joita prosessori asettaa käskynsivuvaikutuksena. Esimerkiksi nollalla jako tai ylivuoto saattavat aiheuttaajonkin ehtokoodin muuttamisen todeksi. Tämä on merkkinä siitä, että lasku-toimituksen tulosta ei kannata käyttää. Ohjelman tilasana ( Program StatusWord, PSW ) sisältää ehtokoodit sekä tiettyjä lisäbittejä, jotka kertovat on-ko ohjelma etuoikeutettu ja muita ohjelman keskeyttämiseen ja jatkamiseentarpeellisia tietoja. Tästä lisää luvussa 4.

Kuvan 3.1 esimerkin prosessorissa on seuraavat prosessorin toiminnankannalta olennaiset rekisterit:

• MAR (Memory Address Register) sisältää sen muistiosoitteen, johonseuraava luku/kirjoitusoperaatio kohdistuu

• I/O BR (I/O Buffer Register) sisältää sanan, joka lisälaitteen kanssaviestitään suuntaan tai toiseen

• PC (Program Counter) sisältää seuraavaksi haettavan käskyn osoitteen

• IR (Instruction Register) sisältää viimeksihaetun käskyn

Näitä rekistereitä käytetään käskykierroksen esimerkissä..

Page 52: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 3. OHJELMOITAVAT TIETOKONEET 45

3.2.5 Käskykierros

Suoritusyksikkö toimii siten, että se hakee muistista käskyn ja suorittaa sen.Yksinkertaistetussa mallissamme tämä tapahtuu yhden kellosyklin aikana,mutta jotkin modernit suorittimet ovat superskalaareja eli ne voivat suorit-taa useamman käskyn yhden syklin aikana. Toisaalta jotkin monimutkaisetoperaatiot saattavat viedä useampia kellosyklejä (esimerkiksi 64-bittisten lu-kujen laskutoimitukset 32-bittisellä suoritusyksiköllä).

Kaksi ensimmäistä vaihetta, käskyn haku ja sen tulkinta muodostavatkäskykierroksen hakuvaiheen, joka on aina sama. Jälkimmäiset kaksi vaihet-ta muodostavat suoritusvaiheen, joka riippuu siitä, millainen käsky on suori-tettu.

Operandit haetaan joko suoritusyksikön sisäisistä yleiskäyttöisistä rekis-tereistä tai rekistereistä ja muistista arkkitehtuurista riippuen. Käskyä suori-tettaessa saatetaan myös lukea tai kirjoittaa dataa muistiin tai lisälaitteelle.Lisäksi käsky voi muuttaa suoritusyksikön suoritustilaa (esimerkiksi PC:narvon muuttaminen). Joissakin arkkitehtuureissa kaikki edellämainitut ovaterillisiä operaatioita.

Modernit suorittimet toteutetaan usein liukuhihnamaisesti (pipeline) si-ten, että useampi käsky on yhtä aikaa ajossa. Liukuhihnassa joka kellosyklilläyksi käsky haetaan, toista tulkitaan, kolmatta suoritetaan ja neljännen tuloskirjoitetaan rekisteriin. Tämä parantaa huomattavasti koneen suorituskykyä,mutta vaikeuttaa elämää jos esimerkiksi ehtolauseen jälkeen siirrytään toi-seen kohtaan ohjelmaa.

Kuvan 3.1 esimerkkisuoritin toimii seuraavasti:

• kierroksen alussa ohjelmalaskurin (PC) määräämä käsky haetaan muis-tiin käskyrekisteriin (IR)

• PC:n arvoa nostetaan yhdellä

• käsky tulkitaan ja sen operandit haetaan

– operandeja saattaa joutua odottamaan jos ne ovat muistissa

• käsky suoritetaan

• käskyn tulos tallennetaan johonkin rekisteriin

3.2.6 Käskykanta-arkkitehtuuri

Edellämainitun käskykierroksen toteuttavaa koneen rakennetta kutsu-taan käskykanta-arkkitehtuuriksi (Instruction Set Architecture, ISA).

Page 53: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 3. OHJELMOITAVAT TIETOKONEET 46

Haku Suoritus

Käskynhaku

Käskyntulkinta

Käskyntoteutus

Tuloksentalletus

Ohjelmanloppu

Ohjelmanalku

Kuva 3.2: Haku-suoritus (fetch-execute)-sykli

Käskykanta-arkkitehtuuri on kurssin kannalta tärkeä abstraktio. Kaik-ki ohjelmakoodi tietokoneessa toimii käskykanta-arkkitehtuurin käskyil-lä. Korkeamman tason kielillä tehdyt ohjelmat muunnetaan käskykanta-arkkitehtuurin komentojonoiksi ennen ajamista.

Käskyssä on aina niinsanottu operaatiokoodi eli opcode. Opcode kertoomikä käsky sen jälkeen tuleville operandeille (tai tulevalle operandille) pitääsuorittaa. Operandien määrä riippuu käskystä. Se voi olla 1, esimerkiksi hyp-pykäskyssä, jolla muutetaan PC:n arvo operandin arvoksi. Se voi olla kaksiesimerkiksi käskyssä, jossa lasketaan yhteen rekisterien R1 ja R2 arvo ja si-joitetaan tulos rekisteriin R1 (ensimmäinen operandi) tai se voi olla kolmekäskyssä, jossa lasketaan rekisterien R1 ja R2 summa rekisteriin R3.

Käskyn rakenne

0x00

Operaatiokoodi 0x10

0x11

1. Operandi 0x28

0x29

2. Operandi 0x40

Kuva 3.3: Operaatiokoodin rakenne

Kuvan 3.3 esimerkissämme operaatiokoodi on 16 bittiä pitkä eli käsky-kanta tukee maksimissaan 65536 erilaista käskyä. Molemmat operandit ovat24 bittiä pitkiä, eli jos operandi on muistiosoitus, niin sillä voidaan osoittaa1677216 sanaan muistia. Koska koko käsky on 64-bittinen, oletetaan 64 bi-tin sanapituus. Tällöin operandin osoittaman muistialueen koko on noin 870megatavua. Käytännössä maksimiraja osoitukselle on käskysanan pituus. On

Page 54: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 3. OHJELMOITAVAT TIETOKONEET 47

olemassa muistiosoitustyyppi ”hae tässä rekisterissä olevan arvon osoittamaarvo muistista”, jolloin suorittimen sanapituus on maksimiarvo, johon muis-tissa voi osoittaa. 32-bittisillä suorittimilla tämä on 4 gigatavua, mikä on jostandardi tehokkaammissa koneissa. 64-bittisillä suorittimilla vastaava mää-rä on 16 eksatavua eli 17.2 miljardia gigatavua.

Käskykannan laajuus on yksi merkittävimpiä kysymyksiä uusia suoritti-mia suunniteltaessa. Piirisuunnittelijat voivat toteuttaa minkä tahansa hy-vinmuotoillun matemaattisen menetelmän piirisarjatasolla, jolloin laskutoi-mituksen tekemiseen menee yksi käsky. Tällaiset arkkitehtuurit toteuttavatmyös muistista luvun ja sinne kirjoituksen samalla Näitä suoritinarkkiteh-tuureja kutsutaan CISC -arkkitehtuureiksi ( Complex Instruction Set Com-puter ). Tunnetuin esimerkki tätä arkkitehtuuria käyttävistä suorittimista onx86 -perhe, joka dominoi PC-markkinoita.

Yksinkertaisemmat piirit toteuttavat muistista luvun ja sinne kirjoituk-sen erillisinä käskyinä. Tällaiset piirit on huomattavasti helpompi toteuttaa,mutta niiden ohjelmat ovat pidempiä. Tätä RISC -arkkitehtuuria (ReducedInstruction Set Computer ) käytetään mm. Nokian mobiililaitteista löytyvis-sä ARM-suorittimissa, Playstation 3:n Cell-suorittimissa, Xbox 360:n hiemanmuokatusta Cell-suorittimissa sekä Sunin palvelimissa käytettävissä SPARC-suorittimissa.

CISC-suorittimia suosittiin aikaan, jolloin kääntäjätekniikka oli vielä var-sin alkeellista. Tietokoneista pyrittiin tekemään sellaisia, että ne tukevatkorkeamman tason ohjelmointikieliä käskykantatasolla. Sittemmin kääntä-jätekniikka on edistynyt huimasti ja RISC-arkkitehtuurilla päästään samoi-hin tai parempiin tuloksiin yksinkertaisemmasta toteutuksesta huolimatta.Myös tallennustila on halventunut muistipiirien halpenemisen myötä, jotenRISC-ohjelmien suurempi koko ei ole enää mainittava haitta. Laajalle levin-nyt x86-arkkitehtuuri toimii kuitenkin vielä CISC-periaatteella ja ohjelmientaaksepäinyhteensopivuuden takia kaikkien x86-perheen suorittimien täytyytehdä samoin.

3.3 Ohjelmien kääntäminen, kirjastot ja linki-tys

Ensimmäiset tietokoneohjelmat tehtiin käyttämällä koneen käskykanta-arkkitehtuuria suoraan ja koodaamalla käsin konekäskyjä. Tämä on kuitenkinerittäin epätehokasta, joten kehitettiin korkeamman tason ohjelmointikieliä.Näissä ohjelmoija voi kuvata haluamansa ohjelman ilmaisuvoimaisemmillakielillä, jotka voidaan koneellisesti muuttaa käskykanta-arkkitehtuurin kone-

Page 55: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 3. OHJELMOITAVAT TIETOKONEET 48

käskyjen jonoksi.Ohjelman muuttamista konekielelle kutsutaan kääntämiseksi ja sen suo-

rittavaa ohjelmaa kutsutaan kääntäjäksi 2. Kääntäminen tuottaa tuloksenakäännetyn ohjelman, binäärin. Binäärillä on määrätty rakenne, jotta käyttö-järjestelmä osaa lukea sen ja tehdä siitä prosessin muistiin.

Kun uusi suoritin on suunniteltu, sille toteutetaan ensimmäiseksi kääntä-jä, joka osaa tehdä suorittimen ymmärtämää koodia. Ensimmäiset kääntäjätyleensä toimivat jollakin toisella arkkitehtuurilla, mutta tuottavat uuden suo-rittimen ymmärtämää konekieltä. Tätä kutsutaan ristiinkäännökseksi (crosscompilation).

Oman kääntäjän toteuttaminen on tärkeää siksi, että vain oma kääntä-jä osaa hyödyntää uuden suoritinarkkitehtuurin erityisominaisuuksia. Kaikkix586-yhteensopivat suorittimet osaavat ajaa Pentiumille käännettyä koodia,mutta silloin uudempien suorittimien erikoisominaisuudet ja uudet käskytjäävät käyttämättä. Samoin kaikki ARMv6-prosessorit osaavat ajaa ARMv5-prosessorikannalle käännettyjä ohjelmia, mutta uudemman version uudistus-ten hyödyntämiseen tarvitaan sille tehty kääntäjä.

Esimerkiksi kannettavissa laitteissa on usein erityispiirejä joidenkin lait-teelle ominaisten toimintojen toteuttamisen. iPodin akunkesto perustuu sii-hen, että siinä on hyvin heikko yleissuoritin, mutta MP3- ja Applen AAC-formaatteja purkavat vähävirtaiset erityispiirit. Siksi niillä on käytännös-sä mahdoton kuunnella avoimella Ogg Vorbis-koodekilla pakattua musiik-kia. Toisena esimerkkinä minikannettavissa yleistyvät erikoispiirit HD-videonpurkua varten, sillä HD-laatuisen videon purkaminen on ainoa paljon lasken-tatehoa vaativa tehtävä, jota asiakkaat tuntuvat tarvitsevan. Ohjelmoinnis-sa ratkaisuja yleisiin ongelmiin3 paketoidaan kirjastoiksi. Kirjasto on joukkovalmiita aliohjelmia, jotka ratkaisevat jonkin yleisen ongelman. Esimerkiksimatriisilaskentaa varten yleisesti käytetään BLAS-kirjastoa (Basic Linear Al-gebra Subsystem) ja useimpien mediaformaattien purkamiseen on kirjastot,joita soitto-ohjelmat käyttävät. Kun ohjelma kirjoitetaan, sen lähdekoodissaviitataan sen tarvitsemiin kirjastoihin. Tarkemmin ottaen viitataan kirjas-tofunktioiden määrittelyihin (headers). Esimerkiksi stdio.h -kirjasto tarjoaa

2Kääntäjätekniikka on oma erikoistumisalansa, jota voi opiskella T-106-professuurinalla kurssikaupalla.

3Insinööritieteissä yleisesti ja tietotekniikassa erityisesti laiskuus on hyvä asia. Itse eikannata lähteä alusta asti ratkaisemaan jo ratkaistua ongelmaa, ellei sitä tee oppiak-seen. Diplomi-insinöörien koulutukseen kuuluu perinteisesti se, että ensin itse rakennetaansuo, johon sitten mennään rämpimään kun suon ominaisuudet tunnetaan. Yksi diplomi-insinöörikoulutuksen sivutuotteita onkin se, että useimmat diplomi-insinöörit vihaavat ru-tiininomaisten ja ratkaistujen ongelmien uudelleenratkaisua (ellei ratkaisua toteuteta jol-lain tavoin paremmin kuin aikaisemmin). Oikeassa maailmassa kustannustehokkuussyistäkäytetäänkin muiden tekemiä ratkaisuja.

Page 56: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 3. OHJELMOITAVAT TIETOKONEET 49

määrittelyt C-kielisille ohjelmille standardivirtojen käsittelyyn.Käännön yhteydessä käyttäjä voi määritellä, haluaako kirjastot linkitet-

tävän staattisesti vai dynaamisesti. Mikäli kirjastot linkitetään staattisesti,kirjastoaliohjelmat liitetään ohjelman binääriin ja ohjelman voi siirtää toi-selle koneelle, jolla kirjastoja ei ole. Jos taas kirjastot linkitetään dynaami-sesti, kirjastoaliohjelmia ei liitetä binääriin, vaan käyttöjärjestelmä kopioi netoisesta tiedostosta, kirjastosta, prosessin muistialueelle prosessia käynnistet-täessä. Esimerkki kirjastotiedostoista ovat Windowsissa käytettävät dynaa-miset linkkikirjastotiedostot (Dynamic Link Library, DLL), joiden tiedosto-pääte on dll.

Staattisen linkityksen suurimpia etuja on se, että ohjelma on kokonai-nen binäärissä ja se voidaan levittää yhtenä binäärinä. Lisäksi staattisessalinkityksessä binääriin tarvitsee liittää vain ne aliohjelmat, joita ohjelma oi-keasti käyttää. Dynaamisessa linkityksessä ohjelmiston asentaminen on haas-tavampaa. Toisaalta useat prosessit voivat käyttää samaa muistiin ladattuakirjastoa. 4

3.4 MuistihierarkiaKorkealla taajuudella toimimaan rakennettujen piirien valmistus on hyvinkallista, koska virhemarginaalit ovat pieniä. Lisäksi virheettömästikin raken-netut piirit pitää pystyä jäähdyttämään. Fysiikasta tuttu lämmöntuoton jatehonkulutuksen suhde kertoo, että paljon lämpöä tuottavat piirit syövätpaljon sähköä, mikä tekee niiden käytöstä kallista.

Tästä syystä nykyaikaista, usean gigatavun (tai edes usean megatavun)keskusmuistia ei tehdä toimimaan samalla kellotaajuudella kuin suoritinta.

4Ei-tekninen mutta merkittävä ero staattisen ja dynaamisen linkityksen välillä on li-sensointi. Aliohjelmarutiinien kopioiminen ja levittäminen osana binääriä on tekijänoi-keudellisesti eri asia kuin niiden tarpeen ilmaiseminen prosessia käytettäessä. EsimerkiksiGNU General Public -lisenssit (GNU General Public License, GPL) vaativat, että GPL-lisensoituja kirjastoja käyttävät ohjelmat tulee julkaista saman lisenssin alla eli niidenlähdekoodi tulee tarjota sitä pyytäville (mahdollisesti muodollista maksua vastaan).Tekijänoikeuslait yleensä antavat tekijälle oikeuden asettaa ehtoja teoksiensa kopioin-

tiin. Tietokoneohjelmat rinnastetaan kirjallisiin taideteoksiiin ja käytännössä kaikki ohjel-mistokirjastot ylittävät teoskynnyksen eli tekijänoikeuslaki koskee niitä. Staattisen linki-tyksen kohdalla uuden ohjelman tekijä kiistatta kopioi osia kirjastosta omaan teokseensaja lisenssiehdot pätevät ja kirjaston tekijä saattaa olla oikeutettu korvauksiin. Dynaami-sen linkityksen tapauksessa tämä ei ole yhtä selvää ja tämänhetkinen oikeusoppineidennäkemys aiheesta on ”riippuu monesta jutusta ja kukaan ei osaa varmaksi sanoa ilmanennakkotapausta”. Tietotekniikkaan liittyvää suomalaista ja kansainvälistä lainsäädäntöäja oikeuskäytäntöä käydään läpi kurssilla T-76.5632 Tietotekniikkaoikeus ja aiheesta onoma A3-moduulinsa ohjelmistotuotannon ja -liiketoiminnan pääaineessa.

Page 57: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 3. OHJELMOITAVAT TIETOKONEET 50

Esimerkiksi kesäkuussa 2009 käyttöönotetussa tietokoneessa on neliydinsuo-ritin, jonka ytimet toimivat 2,83 GHz taajudella, kun taas järjestelmän muistitoimii 800 MHz taajuudella. Tästä voidaan laskea, että kuluu vähintään 4suorittimen kellosykliä hakea tietoa muistista. Mikäli käskyssä määritetäänettä operandi sijaitsee muistissa eikä suorittimen sisäisessä rekisterissä, käs-kyn tulkinta jää odottamaan tarpeellisen operandin saamista muistista. Mitäenemmän tätä tapahtuu, sitä suuremman osan ajasta suoritin käyttää pelk-kään odottamiseen. Jos kaikki käskyt osoittavat muistiin, odottaa suoritin yli75% ajasta 5.

3.4.1 Lokaalius

Syy siihen, että muistihierarkialla on vaikutusta ohjelmien suoritukseen onlokaalius.

Lokaalius jaetaan kahteen käsitteeseen, spatiaaliseen ja temporaaliseen.Spatiaalinen lokaalius tarkoittaa sitä, että on erittäin todennäköistä, ettäkaksi muistissa peräkkäistä sanaa kuuluvat samaan ohjelmaan. Temporaali-nen lokaalius taas tarkoittaa sitä, että ohjelmalla on tapana käsitellä tiettyäosaa muistista aktiivisesti jonkin aikaa ja sen jälkeen siirtyä käsittelemääntoista osaa muistista.

Mitä lokaalimpi ohjelma, sitä enemmän sen suoritusta voidaan nopeut-taa välimuisteilla. Empiirinen kokemus tietää kertoa, että sekä temporaalinenettä spatiaalinen lokaalius ovat hyvin yleisiä normaaleissa ohjelmissa. Tä-män takia on tehty välimuistihierarkia nopeuttamaan tyypillisten ohjelmientoimintaa. Jos ohjelmat ovat epätyypillisiä, välimuistihierarkian olemassaolosaattaa pahimmillaan hidastaa ohjelman toimintaa.

3.4.2 Välimuisti

Välimuistit ovat pieniä muisteja, jotka on mahdollista saada toimimaan tie-tokoneen suorittimen kellotaajuudella tai hyvin lähellä sitä. Välimuistihierar-kia on yleensä jaettu kahteen eri tasoon, L1 ja L2 (Level 1 ja 2) -tasoihin. L1on huomattavasti pienempi kuin L2, mutta toisaalta siltä on nopeampaa ha-kea kuin L2-tasolta. Jotkin laitteistovalmistajat käyttävät myös kolmostason

5Todellisuudessa odottamiseen käytetty aika on jopa pidempi, koska muistipiiriltä hake-minen ei tapahdu välittömästi. Lisämuistia ostavat saattavat törmäävät mystisiin kolmentai neljän luvun sarjoihin (esim. 5-5-5-15), jotka kuvaavat muistipiirin nopeutta. Luvuis-ta ensimmäinen, column address strobe (CAS ) latency kertoo montako väylän kellosykliämuistipiiriltä menee hakea käytössä olevalta muistialueelta tietue väylälle. Jälkimmäiset3 lukua kertovat kauanko piiriltä menee vaihtaa käytössäolevaa muistialuetta (muistipiiriton jaettu alueisiin).

Page 58: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 3. OHJELMOITAVAT TIETOKONEET 51

välimuistia L3.

Prosessorin rekisterit L1 cache1-3 sykliä

tavu tai sanaL2 cache5-20 sykliä

sanaKeskusmuisti20-200 sykliä

blokki

Kuva 3.4: Välimuistihierarkia

Lokaaliuden hyödyntämiseksi tarvittavan datan ympäriltä siirretään var-muuden vuoksi muutakin dataa muistiin. Koska useimmat ohjelmat ovat mel-ko lokaaleja, L1- ja L2- muistien koot ovat erittäin olennaisia suorittimentoimintatehokkuudelle 6.

Välimuistissa olevat tiedot aiheuttavat haasteita siksi, että tieto kopioi-daan muistista välimuistiin, mutta se on yhä muistissa. Jos välimuistissa ole-vaa tavua muokataan ja sen jälkeen esimerkiksi toinen ohjelma hakee muistis-ta alkuperäisen arvon, saattaa syntyä vaikeasti ennustettavia ja ei-toivottaviasynkronointiongelmia. Tätä ratkaisemaan on kehitetty välimuistikoherenssi-protokollia (cache coherency protocols). Näistä puhutaan hieman lisää kunkäsitellään moniydinsuorittimia ja monisuoritinkoneita.

3.4.3 Muistihierarkia

Välimuisti on katoavaa muistia, eli sinne talletetut asiat katoavat, jos tie-tokoneesta katkaistaan virta. Siksi tietokoneissa on myös pysyväismuistia,useimmiten kovalevyn muodossa.

Pysyväismuisti on huomattavasti välimuistia hitaampaa, mutta toisaaltakaikkea sen sisältöä ei ole tarkoituskaan saada käyttöön nopeasti. Tietoko-neella käytettävät ohjelmat ja niiden tarvitsema data tallennetaan pysyväis-muistiin, josta ne ladataan tarvittaessa muistiin. Olennaista on, että ohjel-mia ei tarvita usein suhteessa suorittimen kellotaajuuteen. Silloin harvoinkun niitä tarvitaan, niiden siirtoaika on hyväksyttävissä.

6Esimerkiksi valmistaja Intel tekee usein vain yhdenlaisia suoritinpiirejä, koska niidensuunnittelu ja valmistusprosessin käynnistäminen on kallista. Valmistetun suoritinpiirinnimellinen nopeus määritetään testien perusteella ja suoritin asetetaan toimimaan vaintällä nopeudella. Osaan asennetaan vähemmän L2-välimuistia ja niitä myydään halvem-malla, Celeron-nimisinä. Celeron-kannettava hankitaan tyypillisesti kotoa poismuuttavalleopiskelijalle, koska suorittimessa säästämällä saadaan samalla hinnalla paremmat lisäva-rusteet, kuten enemmän muistia ja isompi kiintolevy. Kuitenkin L2-välimuistin rajoittunei-suus tekee vastaavalla taajuudella toimivasta Celeronista selkeästi samalta liukuhihnaltatullutta normaalia suoritinta hitaamman ja koneella on ikävä ”tehdä tietokonegrafiikanharjoitustöitä”.

Page 59: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 3. OHJELMOITAVAT TIETOKONEET 52

Kovalevyjen tarjoaman pysyväismuistin lisäksi on olemassa vielä hitaam-pia tallennusmedioita, kuten esimerkiksi nauhamuistia tai verkkotallennus-ta, sekä irrallisia tallennusmedioita, jotka eivät ole jatkuvasti kiinni koneessa(esimerkiksi Bluray levy tai USB-kovalevy). Näille tyypillistä on hitauden li-säksi se, että ne tarjoavat varmempaa tai ainakin tietokoneesta riippumaton-ta tallennusta. Tämä on usein tärkeää, kun tallennettava tieto on arvokasta.Esimerkiksi kotitehtävä, jonka tekemiseen menee 10 tuntia on hyvä tallentaasiten, että se ei häviä jos tietokoneen sammuttaa tai jos se menee rikki (jotekovaiheessa).

Prosessorin rekisterit

L1 cache

1-3 sykliä

L2 cache

5-20 sykli

Keskusmuisti

20-200 sykliä

Pysyväismuisti

Miljoonia syklejä

Nauha-asema,Verkkolevy

Miljardeja syklejä

irtokovo

Kauan

Kuva 3.5: Muistihierarkia

Page 60: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Luku 4

Keskeytyksistäkäyttöjärjestelmään

Kaikki tässä luvussa käsiteltävät asiat on toteutettu piirisarjatason ja ohjel-mistotason rajapinnassa. Operaatioille olennaisia toiminnallisuuksia on kai-verrettu piisirulle, mutta kustannussyistä ne osat, joita saattaa olla tarpeel-lista muuttaa on toteutettu ohjelmallisesti. Tämän luvun rakenteita, kutenkeskeytyksiä ei yleensä tarvitse suoraan kutsua ohjelmakoodista, mutta senolemassaolo ja toteutus on hyvä tuntea.

Kuten muistihierarkian yhteydessä aliluvussa 3.4.3 todettiin, yhtä ohjel-maa ajava suoritin käyttää hyvin suuren osan ajastaan tiedon siirtymisenodottamiseen. Tämä havaittiin jo ensimmäisiä tietokoneita rakennettaessa1940- ja 1950-luvuilla. Tähän asti on puhuttu hyvin alkeellisista tietokoneis-ta, jotka ajavat vain yhtä ohjelmaa.

Tietokoneesta on enemmän hyötyä jos sillä ajetaan montaa ohjelmaa yh-tä aikaa siten, että aina yksi ohjelma on ajossa ja muut odottavat vuoroaan.Kuvat 4.1 ja 4.2 havainnollistavat kahden usein tiedonsiirtoa odottavan oh-jelman ajoa peräkkäin ja limittäin.

Useamman ohjelman vuorottelun voi toteuttaa monella tavalla. Helpoin-ta on toteuttaa vuorottelu piiritasolla niin sanottujen keskeytysten myötä.Jotta taas tiedetään, mikä kaikki ohjelmasta pitää tallettaa kun se jätetäänodottamaan, tarvitsemme prosessin käsitettä.

Luvun alussa käsitellään keskeytyksiä, jotka ovat olennaisia moniajokäyt-töjärjestelmissä. Keskeytyksien avulla voidaan toteuttaa tiedonsiirto lisä-laitteilta tehokkaammin ja niinsanottujen kellokeskeytyksien avulla voidaanmahdollistaa useamman ohjelman ajaminen ”yhtä aikaa” samalla tietokoneel-la. Näitä ajettavia ohjelmia nimitetään prosesseiksi ja ne esitellään aliluvus-sa 4.2. Jokaiselle ajossa olevalle prosessille halutaan esittää oma, yhtenäi-nen muistialue ja tämän toteuttamiseksi esitellään virtuaalimuisti-niminen

53

Page 61: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 4. KESKEYTYKSISTÄ KÄYTTÖJÄRJESTELMÄÄN 54

rakenne aliluvussa 4.4. Keskeytysten käsittelyyn ja prosessien välisten etu-ristiriitaongelmien ratkaisemiseen tarvitsemme käyttöjärjestelmän käsitettä,jota valotetaan hieman aliluvussa 4.5.

Ohjelma 1

Ohjelma 2

Prosessoriodottaa

A2

Prosessoriodottaa

A4

Prosessoriodottaa

A5

A1

A3

B1

Prosessoriodottaa

B2

Prosessoriodottaa

B3

Kuva 4.1: Esimerkki kahden ohjelman ajosta ilman keskeytyksiä

4.1 KeskeytyksetKeskeytyksiä on neljää eri päätyyppiä:• Ohjelmalliset keskeytykset syntyvät ohjelman suorittamisen tuloksena,

niitä on kahta päätyyppiä

Page 62: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 4. KESKEYTYKSISTÄ KÄYTTÖJÄRJESTELMÄÄN 55

Ohjelma 1

Ohjelma 2

A1

A2

I/O-operaatio

B1

A3

A4

I/O-operaatio

B2

A5

I/O-operaatio

B3

I/O-operaatio

I/O-operaatio

Kuva 4.2: Esimerkki kahden prosessin ajosta kun suoritin tukee keskeytyksiä.

– virhetilanteet, kuten nollalla jako, ohjelmalle varatun muistialueenulkopuolelle viittaaminen (segmentation fault)

– ohjauskäskyt, käyttöjärjestelmään paluukäsky tai vapaaehtoinenodottamaan jääminen

• Ajastinkeskeytykset syntyvät suorittimessa olevan ajastimen avulla.Niitä käytetään esimerkiksi palauttamaan suoritus säännöllisesti käyt-töjärjestelmään.

• I/O-keskeytykset kertovat suorittimelle, että jokin siirto-operaatio onvalmis tai päättynyt virheeseen, jotta tätä tietoa odottava prosessi voi-daan taas ottaa suoritukseen.

Page 63: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 4. KESKEYTYKSISTÄ KÄYTTÖJÄRJESTELMÄÄN 56

• Rautatason virheet voivat myös aiheuttaa keskeytyksiä, esimerkiksi josvirhesietoinen muisti havaitsee virheen muistissaan olevissa tiedoissa

Keskeytyksiä varten suorittimeenn tarvitsee lisätä rekisterejä. Ensinnä-kin tarvitaan rekisteri, jonka arvoa muisti tai I/O-laitteet voivat muokatamerkiksi siitä, että keskeytys on tapahtunut. Lisäksi tarvitaan rekisteri sil-le, miltä laitteelta keskeytys on tullut, sekä mahdollisesti rekistereitä, joihinvoidaan valmiiksi laittaa I/O-laitteen tuottamaa tietoa (esimerkiksi näppäi-mistönpainallusta vastaava koodi). Jotkin suorittimen tehtävät voivat ollaaikakriittisiä tai esimerkiksi samalta laitteelta saattaa tulla keskeytyksiä niintiheään, että edellisiä ei ehditä ottaa vastaan. Tarvitaan siis myös rekisteri,joka kertoo voidaanko keskeytys ottaa vastaan.

Haku Suoritus

Keskeytyskäsittely

Käskynhaku

Käskyntulkinta

Käskyntoteutus

Tuloksentalletus

Keskeytykset kielletty

Tarkista onko keskeytystäaloita keskeytyskäsittely

Keskeytykset sallittu

Ohjelmanloppu

Ohjelmanalku

Kuva 4.3: Käskykierros keskeytyksillä

Käskyn suoritettuaan suoritin tarkastaa, onko sille tullut uusia keskey-tyksiä. Mikäli suoritin on tilassa, jossa se ei vastaanota keskeytyksiä, se jatkaatoimintaansa keskeytyksistä huolimatta. Keskeytyksen aiheuttanut lisälaitejatkaa yrittämistä, kunnes se saa tiedon siitä, että keskeytys on otettu vas-taan. Suoritin ilmoittaa keskeytyksen lähettäneelle laitteelle, kun se ottaakeskeytyksen käsittelyyn.

Mikäli suoritin voi vastaanottaa keskeytyksiä ja sellainen on, se siirtyykäsittelemään keskeytystä. Aluksi ohjelman tilaa kuvaavat rekisterit ja oh-jelmalaskuri (PC ) siirretään ohjauspinoon (control stack) ja asetetaan kes-keytykselle määritelty PC:n arvo, eli käytännössä siirrytään käyttöjärjestel-mässä olevaan keskeytyskäsittelijään. Käyttöjärjestelmän keskeytyskäsittelijätallentaa muut prosessin tilaa käsittelevät tiedot kuten rekisterit ja käsitteleekeskeytyksen. Kun keskeytys on käsitelty, käyttöjärjestelmä palauttaa pro-sessin tilatiedot ja PC:n arvot, ja alkuperäisen ohjelman suoritus jatkuu.Tätäajossa olevan prosessin tilan siirtämistä suorittimen rekistereistä muistiin jatoisen prosessin tilan siirtämistä tilalle kutsutaan kontekstin vaihdoksi (con-text switch).

Page 64: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 4. KESKEYTYKSISTÄ KÄYTTÖJÄRJESTELMÄÄN 57

Esimerkiksi tätä opasta kirjoitettaessa kun näppäintä painetaan, I/O-moduuli luo keskeytyksen. Suoritin suorittaa suoritusvuorossa olevan käs-kyn, havaitsee keskeytyksen ja siirtää PSW:n ja PC:n ohjauspinoon ja siirtyyennaltamääriteltyyn kohtaan virtuaalimuistissa. Muistipaikassa on käytössäolevan koneen käyttöjärjestelmän (Linuxin) ytimen merkkilaitteiden käsitte-lyrutiini. Rutiini siirtää tarvitsemansa määrän rekisterien arvoja alemmantason välimuistiin, lukee keskeytyksen mukana tulleen merkin ja tallettaasen muistissa sijaitsevaan merkistöpuskuriin. Tämän jälkeen rutiini siirtääaikaisemmin poistamansa rekisterien arvot paikoilleen ja lopuksi palauttaaohjauspinon päältä PSW:n ja PC:n arvot ja palaa alempaan ohjelmaan.

Toisessa esimerkissä innokas fuksi koodaa fuksivuotensa keväällä AS-0.1101 -kurssilla C-ohjelman. Hän ei vielä oikein hallitse C:n muistinvaraus-kirjaston käyttöä, ja niinpä käännetyssä ohjelmakoodissa tulee eteen käsky,joka viittaa ohjelmalle varatun muistialueen ulkopuolelle. Suorittimen oh-jausyksikkö yrittää purkaa muistiviittausta, ja tämä aiheuttaa poikkeuksen,koska viite ei ole alueella, johon saa viitata. Suoritin ei jatka fuksin koodaa-man ohjelman suoritusta vaan siirtyy käsittelemään keskeytystä. PSW ja PClaitetaan talteen ohjauspinoon ja PC asetetaan osoittamaan käyttöjärjestel-mäytimen virheenkäsittelyaliohjelman alkuun. Ohjelma siirtää kaikki rekiste-rit muistiin ja alkaa analysoida virhettä. Virhe on laatua, jollaiseen ohjelmansuoritus kuuluu keskeyttää, joten aliohjelma poistaa rekisterien arvot muis-tista, ylimmät PSW:n ja PC:n ohjauspinosta. Sitä edeltävät PSW ja PC viit-taavat fuksin käyttämään komentotulkkiin (shell). Lisäksi virheenkäsittely-aliohjelma siirtää tietovirtaa pitkin virheviestin ”segmentation fault” kommu-nikaatioputkeen komentotulkille virheviestiksi. Lopulta komentotulkin PSWja PC ja niihin liittyvät rekisterien tiedot siirretään suorittimen rekisterei-hin ja komentotulkin suoritus jatkuu. Tulkki huomaa saaneensa virheviestin,jonka se tulostaa fuksille, joka pahoittaa mielensä.1

Osa keskeytysten käsittelystä siis tapahtuu ohjelmallisesti. Nyt aletaankinsiirtyä fyysisen arkkitehtuurin tarkastelusta arkkitehtuurille rakennettujenohjelmallisten systeemien tarkasteluun.

4.2 Alkeelliset prosessitOhjelma on joukko levylle tallennettuja ohjelmallisia käskyjä, jotka on tar-koitettu suoritetavaksi peräkkäin. Lisäksi ohjelmaan voi liittyä dataa, kutenvakioita.

1Esimerkin ei ole tarkoitus dissata fuksien ohjelmointitaitoja. Se perustuu itseasiassatositapahtumiin ja kurssihenkilökunnan kokemuksiin.

Page 65: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 4. KESKEYTYKSISTÄ KÄYTTÖJÄRJESTELMÄÄN 58

Kun ohjelma suoritetaan, ohjelma kopioidaan muistiin ja sitä kutsutaanprosessiksi. Prosessi on siis yksinkertaisimmillaan yksi esiintymä tai instanssiohjelmasta. Samasta levyllä olevasta ohjelmasta voidaan luoda useita proses-seja samaan aikaan tietokoneen muistiin.2. Kun ohjelman tiedot siirretäänmuistiin ja prosessi luodaan, se on aluksi tilassa ”uusi”, josta käyttöjärjes-telmä ottaa sen sopivassa välissä odottamaan suoritusvuoroaan. Sopivassakohdassa käyttöjärjestelmä vaihtaa uuden prosessin suoritusyksikölle ja ajaasitä. Ajo jatkuu kunnes joko prosessille varattu aikaikkuna on päättynyt taikun prosessi tarvitsee varattua resurssia ja jää odottamaan sitä. Odotustila,jota kutsutaan myös blokatuksi tilaksi (blocked state) tarkoittaa sitä, ettäprosessia ei ajeta ennen kuin sen tarvitsema resurssi on saatavilla. Resurs-si, esimerkiksi lisälaite, ilmoittaa käyttöjärjestelmälle tilastaan keskeytyksenavulla ja käyttöjärjestelmä siirtää prosessin unitilasta odotustilaan. Kun pro-sessin suoritus on loppu, käyttöjärjestelmä terminoi eli lopettaa sen ja poistaasen muistista.

Prosessilla on oma muistialueensa, johon se voi kirjoittaa ja lukea ilmanrajoituksia. Käyttöjärjestelmästä riippuen prosessin muistialue voi olla yh-tenäinen tai siellä täällä ympäri muistia. Jälkimmäisessä tapauksessa käyt-töjärjestelmä kuitenkin näyttää prosessille yhteisen muistialueen ja muuttaamuistiviittaukset prosessille näkyvästä muistiavaruudesta oikeaksi. Tämä yh-tenäinen muistialue toteutetaan virtuaalimuistilla, jota käsitellään aliluvussa4.4

Prosessit pystyvät myös luomaan uusia prosesseja, muodostaen prosessi-puun (kuva 4.4). Esimerkin prosessipuussa prosessit on identifioitu prosessi-numeroilla (Process ID, PID). Prosessiin viittaaminen ohjelman nimellä voiolla harhaanjohtavaa, koska samassa järjestelmässä voi pyöriä esimerkiksikaksi firefox-prosessia. PID on yksikäsitteinen.

Joissain tapauksissa prosessien pitää pystyä kommunikoimaan keskenäänyhteisen resurssin käyttöä. Jos esimerkiksi prosessit 2 ja 4 laskevat vuorotel-len toistensa välituloksien perusteella uusia samaan muistipaikkaan (toinenesimerkiksi laskee sisääntulleita tietoliikenneviestejä ja toinen käsiteltyjä),on niiden pystyttävä kommunikoimaan keskenään ja tiedottamaan, että omaosuus on tehty ja on toisen vuoro muokata muistipaikkaa. Tätä varten on to-teutettu semaforeja (eräänlaisia liikennevaloja), joita prosessit voivat jäädäodottamaan. Kun prosessi haluaa kirjoittaa, se tarkistaa onko semafori pääl-

2Ohjelmakoodin kopioimisesta massamuistilta keskusmuistiin väännettiin kättä Suo-men oikeuslaitoksessa 80-luvulla. Nykyinen oikeuskäytäntö on sitä mieltä, että väliaikai-senkin kopion tekeminen, kuten prosessin luonti tai jopa käskyjen siirto keskusmuististasuorittimen välimuistiin on tekijänoikeudellisesti merkittävää, eli siihen tarvitsee oletusar-voisesti luvan. Uudessa tekijänoikeuslaissa (25 j §) säädetäänkin erikseen, että kuluttajallaon lupa tehdä laillisesti hankkimastaan ohjelmistosta sen käyttämiseen tarvittavat kopiot.

Page 66: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 4. KESKEYTYKSISTÄ KÄYTTÖJÄRJESTELMÄÄN 59

1

2 4

3 5

Kuva 4.4: Prosessihierarkia. Prosessi 2 on prosessin 1 lapsi ja sillä on lapsi-prosessit 3 ja 5

lä. Jos se on, se jää odottamaan keskeytystä siitä, että semafori on pois pääl-tä. Kun prosessi aloittaa kirjoittamisen, se ensiksi laittaa semaforin päälle.Tämän jälkeen se suorittaa kirjoitusoperaation ja lopuksi laittaa semaforinpois päältä 3.

1

2 4

3 5 Semafori

Kuva 4.5: Kaksi prosessia kommunikoi semaforin avulla

Tässä yhteydessä esitetty prosessi ei ole vielä täydellinen. Moderneissakäyttöjärjestelmissä prosessit ovat monimutkaisempia ja niihin on talletet-

3Edger Dijkstra todisti että semaforit ovat riittäviä kaikkeen prosessienväliseen kom-munikaatioon. Ne ovat kuitenkin tehottomia, joten monimutkaisempia apuvälineitä on ke-hitetty. Niitä käsitellään lisää kurssilla T-106.4155 Käyttöjärjestelmät sekä T-106.5600Concurrent programming. Tällä kurssilla lähinnä viitataan niihin tasoihin, joilla ongelmiasyntyy.

Page 67: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 4. KESKEYTYKSISTÄ KÄYTTÖJÄRJESTELMÄÄN 60

tu muutakin tietoa, kuten esimerkiksi tieto prosessin omistajasta. Tähänkuitenkin palataan vasta, kun käyttöjärjestelmän suunnitteluperiaatteita onesitelty enemmän.

4.3 TiedonsiirtotekniikatTiedon siirtäminen on hidasta. Tiedonsiirron tehostaminen on helpoin tapanopeuttaa tietokoneiden toimintaa. Von Neumannin koneen rakenteesta joh-tuen lisälaitteet on yleensä liitetty väylään jonkin välisovittimen tai puskurinavulla, koska varsinainen muistiväylä on liian nopea lisälaitteille. Tässä ali-luvussa käsittelemme kolmea yleisimmin käytettyä tiedonsiirtomenetelmää.Menetelmistä kaksi ensimmäistä, ohjelmoitu polling ja keskeytyksillä toteu-tettu blocking ovat usein saatavilla ohjelmoidessa. Esimerkiksi Javan virtuaa-likone tarjoaa sekä pollaavan että blokkaavan ohjelmointirajapinnan tiedon-siirtoon, ja ohjelmoijan tehtäväksi jää valita tilanteeseen tarkoituksenmukai-sempi. Kolmannessa menetelmässä eli suorassa muistisiirrossa muokataanvon Neumannin koneen rakennetta ja lisätään rautatasolle uusia väyliä.

4.3.1 Ohjelmoitu tiedonsiirto

Ohjelmoitu tiedonsiirto (Programmed I/O, PIO) on tiedonsiirtoa, jossa ni-men mukaisesti siirto toteutetaan ohjelmistotasolla, useimmiten käyttöjärjes-telmässä. Ei-käyttöjärjestelmäprosesseilla ei ole oikeutta viitata oman muis-tialueensa ulkopuolelle (muisti ja lisälaitteet ovat eri osissa samaa osoiteava-ruutta). PIOn kantava filosofia on se, että PIO-laitteet eivät keskeytä suo-rittimen toimintaa keskeytyksillä, vaan suorittimen on tarkastettava erikseenonko se saanut tietoa laitteen tilan muutoksesta.

Kun tietoa siirretään ohjelmallisesti, esimerkiksi kirjoitetaan paljon tie-toa levylle (ATA-levyjärjestelmä toimii PIO:lla), käyttöjärjestelmä aloittaakirjoittamalla yhden sanan tai sivun levylle. Kirjoitusoperaation jälkeen setarkastaa onko kirjoitusoperaatio valmis. Ohjelma tarkastaa joka kellopuls-silla onko kirjoitusoperaatio valmis, kunnes operaatio on valmis. Ohjelmakirjoittaa uuden sanan tai sivun levylle, ja alkaa taas tarkistaa onko kirjoitusvalmis. Kuva 4.6 esittää ohjelmoitua tiedonsiirtoa.

Ohjelmoitua tiedonsiirtoa on helppo verrata auton takapenkillä istuviinlapsiin, jotka kysyvät minuutin välein ollaanko jo perillä. Jatkuvasta kysymi-sestä tuleekin tiedonsiirtotavan toinen englanninkielinen nimi, polling I/O.Tiedon siirtäminen tällä tavoin on kallista, sillä suoritin ei voi tehdä mitäänmuuta sillä aikaa kun se odottaa resurssin vapautumista.

Page 68: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 4. KESKEYTYKSISTÄ KÄYTTÖJÄRJESTELMÄÄN 61

Tee

Tarkista

KirjoitusValmis

Ei valmis

Kuva 4.6: Pollausta

4.3.2 Keskeytyksillä toteutettu tiedonsiirto

Intuitiivisin ratkaisu ohjelmallisen tiedonsiirron ongelmiin on vapauttaa suo-ritin muihin tehtäviin ja jäädä odottamaan keskeytystä. Tässä tapaukses-sa prosessi kutsuu käyttöjärjestelmää ja pyytää suorittamaan tiedonsiirto-operaation. Käyttöjärjestelmä siirtää kutsuneen prosessin uneen eli blokkaasen. Käyttöjärjestelmä tekee tämän jälkeen operaatiota aina silloin kun laiteilmoittaa sen olevan mahdollista ja kun koko operaatio on suoritettu, käyttö-järjestelmä siirtää nukkuvan prosessin odottamaan vuoroaan ja poistaa senblokkauksen.

Yllä esitettyä kutsutaan usein blokkaavaksi tiedonsiirroksi. Siirron etunaon se, että siinä suoritin vapautuu tekemään muuta silloin kun se voi. Huo-nona puolena on se, että ei ole mitään takeita siitä, että suoritin päästääunessa olleen prosessin heti käsittelemään tietoa, joten keskeytyksillä toteu-tettu tiedonsiirto ei välttämättä sovi aikakriittisiin tehtäviin.

Page 69: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 4. KESKEYTYKSISTÄ KÄYTTÖJÄRJESTELMÄÄN 62

4.3.3 Suora muistisiirto (DMA)

Tiedonsiirto keskeytysten kautta on tyypillisesti hyvin hidasta. Jokaista siir-toa varten suorittimelle pitää antaa keskeytys ja muiden ohjelmien suorit-taminen odottaa kunnes keskeytys on käsitelty. Tämän ongelman ratkaise-miseksi on kehitetty niinsanottu Direct Memory Access eli DMA-tekniikka.Sitä tukevissa arkkitehtuureissa tietyt lisälaitteet voivat kirjoittaa muistiinilman käyttöjärjestelmän myötävaikutusta ja niiden tarvitsee vain ilmoittaakun siirto on valmis. Siirto tapahtuu erillistä väylää pitkin samaan aikaankun suoritin pyörittää muita prosesseja, esimerkiksi suorittaa monimutkaisialaskutoimituksia.

Prosessori

Muisti

I/O-moduuli

PC

IR

MAR

MBR

IO AR

IO BR

Suoritusyksikkö

Väylä0

.

1

.

3

.

... a

käsky

a+1

käsky

a+2

käsky

... b

data

b+1

data

b+2

data

... n-2

.

n-1

.

Puskuri ... ... ...

NormaaliDMA

Riski

Kuva 4.7: DMA von Neumann -arkkitehtuurissa.

DMA:n selkeä etu on sen nopeus. Esimerkiksi FireWire-lisälaitteet pysty-vät ylivertaisiin siirtonopeuksiin perinteisiin USB-lisälaitteisiin nähden, koskaFireWire-teknologia tukee DMA:ta. Haittapuolena taas on se, että toteutus-teknisistä syistä DMA mahdollistaa tiedon siirtämisen minne tahansa muis-tiin ilman normaaleja käyttöjärjestelmän ja suorittimen tilan aiheuttamiarajoituksia. DMA-lisälaite voi siis vahingossa tai tahallaan aiheuttaa sivu-vaikutuksia mm. käyttöjärjestelmän toiminnassa, ja siksi sitä pidetään useinturvallisuusriskinä.

4.4 VirtuaalimuistiJokainen prosessi toimii omalla muistialueellaan. Käyttöjärjestelmä kasvat-taa tai pienentää muistialuetta sen mukaan, paljonko ohjelma sitä tarvitsee.Tämä muodostaa ongelman, koska jos ohjelman muistitarve ei ole tiedossaohjelmaa käynnistäessä, ohjelmalle ei ole mahdollista varata yhtenäistä muis-tialuetta. Käyttöjärjestelmäihmisille helpoin ratkaisu olisi nostaa kädet pys-tyyn ja vaatia ohjelmoijaa käsittelemään epäyhtenäistä muistialuetta. Tämä

Page 70: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 4. KESKEYTYKSISTÄ KÄYTTÖJÄRJESTELMÄÄN 63

kuitenkin tekisi ohjelmoinnista erittäin vaikeaa ja ohjelmista epätehokkaita.Ratkaisu ongelmaan on virtuaalimuisti.

Virtuaalimuistissa muisti jaetaan sivuihin (page). Sivuanalogia tulee sii-tä, että muistisivu on fyysisen kirjan sivun tavoin yksi yhtenäinen osa tallen-nusvälinettä ja siinä olevat symbolit ovat peräkkäin. Sekä kirjan sivujen ettämuistisivujen paikkaa voidaan vaihdella, kunhan kirjan tai muistin hakemis-toa päivitetään samalla.

Virtuaalimuistin osoiteavaruudessa n bittiä kertovat millä sivulla sana onja loput muistialueen koko− n = m bittiä kertovat missä kohtaa sivua sanaon.

Virtuaalimuistin toteutus tapahtuu sekä piirisarjatasolla että käyttöjär-jestelmässä. Suorittimen muistinhallintayksikkö (Memory Management Unit,MMU ) vastaa virtuaalisten muistiosoitusten muuttamisesta fyysisiksi muis-tiosoitteiksi. Käyttöjärjestelmä luo ja ylläpitää sivutustauluja (page table),joita MMU käyttää fyysisen muistiosoituksen määrittämiseen.

MMU on yleensä osa modernia suoritinta. Suoritintoteutus muunmuas-sa määrää käskykanta-arkkitehtuurin käskyjen ja muistiviittausten pituudet.Tästä syystä myös sivujen koko on suoritinarkkitehtuuririippuvainen. Esi-merkiksi Intelin x86-arkkitehtuurissa sivun koko on 4096 (212) tavua. Tämäninnoittamana myös kuvan 4.8 esimerkissä on neljän kilotavun sivukoko.

Prosessi

MMU

Ohjelma tekee oikeasti

Virtuaalimuisti

0 sivu 1

1 sivu 2

... ...

a sivu a

a+1 sivu a+1

... ...

x-1 sivu n-1

Ohjelma kuvittelee

RAM

0x11000 muuta

0x12000 muuta

0x13000 sivu 1

0x14000 sivu 2

0x15000 muuta

... ...

0x1B000 sivu a

0x1C000 sivu a+1

... ...

MMU korvaa virtuaalisen muistiosoituksen fyysisellä

Levyjärjestelmä

... ...

0xFD000 sivu n-1

0x1BAA6 taas jotain muuta

tarvittaessa

Kuva 4.8: Virtuaalimuisti

Yksi virtuaalimuistin suomista eduista on se, että kaikkien muistisivu-jen ei tarvitse sijaita keskusmuistissa. Jos keskusmuisti on kallista tai sitä onmuuten vähän, voidaan osa sivuista tallettaa erityiseen tiedostoon tai erityi-

Page 71: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 4. KESKEYTYKSISTÄ KÄYTTÖJÄRJESTELMÄÄN 64

selle osiolle massamuistille (swap, swap file, swap partition). Tämä heitto-vaihto on yleistä moderneissa osituskäyttöjärjestelmissä, sillä monia proses-seja ei aktiivisesti käytetä, joten niiden tilan voi huoletta tallettaa levylle.Käyttöjärjestelmä hoitaa kaiken, joten ohjelmoijan ei tarvitse huolehtia oh-jelmansa säilytyspaikasta eikä käyttäjä välttämättä huomaa joidenkin ohjel-mien siirtymisestä uneen 4.

Jos prosessi hakee muistia, joka ei ole sillä hetkellä keskusmuistissa, MMUlähettää suorittimelle sivutusvirhekeskeytyksen (page fault). Tämän sivutus-virheen jälkeen suoritin siirtyy käyttöjärjestelmäprosessiin, joka siirtää tar-vittavan sivun (ja mahdollisesti siihen liittyvän prosessin kaikki sivut) muis-tiin, päivittää sivutaulua ja palaa keskeytyksen aiheuttaneeseen prosessiin.Tällaista sivutusvirhettä kutsutaan kovaksi. Toinen sivutusvirhetyyppi onpehmeä. Se syntyy, kun tarvittava sivu on muistissa, mutta sivutaulussa onmerkintä siitä, että sivun tieto ei ole ajan tasalla eli se on ”likainen”. Tämä onmahdollista esimerkiksi jos sivu tai osa siitä on suorittimen välimuistissa toi-sen prosessin käytössä. Tällaisessa tapauksessa jompi kumpi prosessi joutuuodottamaan kunnes toinen saa käsiteltyä yhteistä muistiavaruutta. On lähesmahdoton ennustaa, kumpi prosesseista suorittaa oman toimenpiteensä en-sin. Pehmeät sivutusvirheet on huomattavasti nopeampi korjata kuin kovat,koska niiden korjaustoimenpiteet eivät tarvitse levyoperaatioita, eli ohjelmanlokaalius vaikuttaa ohjelman nopeuteen.

4.5 Kohti käyttöjärjestelmääKäyttöjärjestelmä on ohjelmisto, joka helpottaa tietokoneen käyttöä. Käyt-töjärjestelmä on rajapinta, jonka kautta käyttäjä voi käyttää tietokoneita.Käyttöjärjestelmä tarjoaa useita peruspalveluja, kuten tekstieditorin, lait-teistoajureita lisälaitteille, tiedostojärjestelmän, työkaluja tiedostojärjestel-män muokkaamiseen ja mahdollisuuden käyttäjille tehdä ja ajaa omia ohjel-mia.

Käyttöjärjestelmän palvelut on perinteisesti jaettu kahteen selkeäänosaan, ytimeen (kernel) ja käyttäjätilaan (userland , user space). Ydin huo-lehtii käyttöjärjestelmän resurssien käytöstä, jakamisesta ja käyttäjätilan oh-jelmat tarjoavat käyttäjälle abstraktiotasoja järjestelmäresurssien käyttämi-

4Käyttäjä huomaa kyllä heittovaihdon jälkiä, esimerkiksi jos selainohjelmaan jättääjoitakin kymmeniä välilehtiä auki yön yli ja sen jälkeen yrittää avata uutta välilehteä:käyttöjärjestelmä on laittanut suuren, ei-aktiivisen ohjelman levylle ja ennen uuden vä-lilehden avaamista prosessi laitetaan nukkumaan kunnes (lähes) kaikki sivut on haettutakaisin muistiin. Käyttäjälle tämä näkyy siten, että selain ei vastaa useisiin sekunteihintai jopa minuutteihin

Page 72: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 4. KESKEYTYKSISTÄ KÄYTTÖJÄRJESTELMÄÄN 65

seksi. Esimerkiksi käyttäjä voi luoda tekstieditorilla teksititiedoston. Tällöintekstieditori on käyttäjäohjelma, joka käyttää ytimen tarjoamia palveluja tie-doston luomiseksi tiedostojärjestelmään ja tiedostoon kirjoittamiseksi. Käyt-täjät voivat myös itse tehdä uusia ohjelmia käyttäjätilaan.

4.5.1 Ydin

Käyttöjärjestelmän ydin hallitsee koneen ja sillä ajettavien prosessien toi-mintaa, joten sillä on määritelmällisesti oikeus tehdä kaikkea tietokoneessa(myös kaikkea tyhmää, mistä syystä käyttöjärjestelmäohjelmointi on haasta-vaa). Muiden kuin käyttöjärjestelmäprosessien oikeuksia taas tulee rajoittaatismalleen siihen, mitä niiden tarvitsee tehdä5. Suorittimen rekistereissä onohjelman tilasana, jonka yksi ehtokoodi määrää tilan, jossa suoritin on. Ti-loja on kaksi, etuoikeutettu ja tavallinen. Etuoikeutettua tilaa käyttää vainkäyttöjärjestelmäydin, ja kyseisen rekisterin arvoa saa muuttaa vain etuoi-keutettu prosessi. Tavallinen prosessi voi yleensä vain käyttää suorittimentavallisia käyttörekistereitä, omaa virtuaalimuistialuettaan ja kutsua käyttö-järjestelmäprosesseja. Mikäli tavallinen prosessi yrittää tehdä jotain, mihinsillä ei ole oikeutta, suoritin siirtää keskeytyksellä suorituksen käyttöjärjes-telmälle.

Moderneissa käyttöjärjestelmissä on tyypillisesti useita käyttäjiä; joissainjopa samanaikaisesti. Käyttöjärjestelmän ja usein nimenomaan ytimen täy-tyy tukea useita käyttäjiä ja näiden oikeuksien hallintaa ja tarkkailua.

Käyttöjärjestelmäsuunnittelussa on erilaisia filosofioita siitä, minkä käyt-töjärjestelmäpalvelujen tulisi sijaita ytimessä ja kuinka suuren sen ulkopuo-lella. Luvussa ?? käsitellään käyttöjärjestelmäytimiä.

4.5.2 Käyttöjärjestelmätyypit

Ensimmäiset käyttöjärjestelmät olivat laskentaorientoituneita eräajojärjes-telmiä (batch operating system). Ne syntyivät tarpeesta koordinoida suorit-timen toimintaa siten, että kalliilla ja harvinaisella tietokoneella pystyttiinsuorittamaan enemmän laskentaa samassa ajassa. Eräorientoituneita järjes-telmiä käytetään yhä esimerkiksi tieteellisessä laskennassa: laskentaklusterienja tieteellisten gridien laskenta on useimmiten eräajolaskentaa.

Eräajojäjestelmässä käsitellään työeriä (job), joiden luonnin yhteydessätyöerän luojalla on mahdollisuus määrittää työn ominaisuuksia, kuten kii-

5Tästä käytetään tietoturvassa termiä principle of least priviledge, pienimpien oikeuk-sien periaate

Page 73: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 4. KESKEYTYKSISTÄ KÄYTTÖJÄRJESTELMÄÄN 66

reellisyys, oletettu ajoaika, oletettu muistintarve ja pisin sallittu ajoaika6.Tämän jälkeen käyttöjärjestelmä laskee määreet ja ottaa ne huomioon töi-den aikataulutuksessa eli scheduling .

Vastaavasti osituskäyttöjärjestelmässä (time sharing system) kaikille pro-sesseille annetaan säännöllisesti aikaa, jonka jälkeen ne laitetaan odottamaanseuraavaa aikavuoroaan. Tähän käytetään suorittimen aikakeskeytyksiä, jot-ka ovat yksi keskeytystyyppi. Jokaiselle ohjelmalle annetaan tietty aika, esi-merkiksi muutama millisekunti aikaa neljä kertaa sekunnissa, jolloin käyttä-jälle syntyy illuusio siitä, että koneessa pyörii monta prosessia yhtä aikaa,vaikka todellisuudessa ohjelmat pyörivätkin yksi kerrallaan, mutta suoritti-men nopeudesta johtuen ne kaikki saavat aikaa niin usein, että käyttäjä eihuomaa eroa.

Osituskäyttöjärjestelmässä aiemmin mainitut rinnakkaisuusongelmat ko-rostuvat, koska aikataulutus on hyvin monimutkainen ja siksi on käytännössämahdotonta ennustaa, missä järjestyksessä eri prosessit saavat suoritusaikaa.Tämä johtaa helposti niin kutsuttuihin kilpajuoksutilanteisiin, joissa ohjelmasaattaa toimia näennäisesti oikein monissa testeissä, kunnes tietty olosuhtei-den ketju aiheuttaa ei-toivottua käyttäytymistä eli ns. bugin. Rinnakkais-ohjelmien täydellinen debuggaus on mahdotonta, ja siksi tärkeät ohjelmatjoudutaan usein todistamaan oikeiksi.

6Tietokoneohjelmat saattavat joutua ikuiseen silmukkaan. Ikuiseen silmukkaan joutu-mista ei voi ennustaa katsomalla ohjelmakoodia ja syötettä, joten siihen on varauduttavamuilla tavoin. Tätä pysähtymisongelmaa käsitellään tarkemmin kurssilla T-76.1001 Tie-tojenkäsittelyteorian perusteet.

Page 74: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Luku 5

Käyttöjärjestelmänrakennuspalikat

Tässä luvussa käsittelemme puhtaasti ohjelmallisia rakenteita. Luvussa esi-tettävät rakenteet tulevat väistämättä vastaan ohjelmoinnissa, ja siksi ne onjokaisen ohjelmoijan hyvä tuntea. Erityisesti prosessienvälinen kommunikaa-tio on alue, jolla pyörä tulee helposti keksittyä uudelleen.

Luvun alussa käsitellään prosessienvälistä kommunikaatiota putkien jastandardivirtojen avulla. Tämän jälkeen tarkastellaan hieman tiedostojentallettamista pysyväismuistiin ja tiedostojen lisäksi tallennettavaa lisätietoatiedostoista. Lopuksi käydään pintapuolisesti läpi kuinka käyttöjärjestelmätunnistaa eri käyttäjät ja hallinnoi näiden oikeuksia.

5.1 PutketPutket (pipe) ovat prosessien välinen viestintäkanava. Putki on yksisuuntai-nen FIFO-tietorakenne1 aivan kuten esikuvansa fyysinen putki. Putkessa voikulkea sisältöä vain yhteen suuntaan ja ensimmäisenä putkeen laitettu siir-rettävä tulee ensimmäisenä ulos putken toisesta päästä. Putkia on kahta eripäätyyppiä, nimetyt ja nimeämättömät. Nimetyt putket pitää erikseen luodajärjestelmäkutsulla ja ne pitää tuhota kun niitä ei enää käytetä. Nimettyjäputkia käytetään prosessien väliseen viestintään (Inter Process Communica-tion, IPC). Esimerkiksi tieteellisessä laskennassa prosessi voi pyytää toistaprosessia suorittamaan jonkun erikoisoperaation. Kuvassa 5.1 on esimerkkitilanteesta, jossa kaksi prosessia kommunikoi kahden nimetyn putken avulla.

Nimeämättömiä putkia käytetään prosessien väliseen kommunikaatioon1FIFO-tietorakenteista lisää liitteessä A.2

67

Page 75: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 68

prosessi 1 prosessi 2

putki1putki2

Kuva 5.1: Prosessin 2 lapsiprosessit kommunikoivat keskenään nimettyjä put-kia käyttäen.

standardoidulla tavalla. Erityisesti nimeämättömiä putkia käytetään stan-dardivirtojen yhdistämiseen.

5.2 StandardivirratKun tietotekniikka oli nuori, yksi tuoreen Unix-käyttöjärjestelmän eduistaedeltäviin yritelmiin verrattuna oli sen kyky piilottaa tiettyjä asioita oh-jelmoijalta. Aikaisemmin näppäimistöltä ja muilta laitteilta lukeminen sekätulostuslaitteille kirjoittaminen piti toteuttaa ohjelmassa. Unixin innovaa-tio olivat standardivirrat. Käyttöjärjestelmä käsittelee syötettä ja antaa si-tä eteenpäin ohjelmalle standardoidussa muodossa. Ohjelman kirjoittajan eitarvitse huolehtia siitä, tuleeko syöte hänen ohjelmalleen suoraan näppäimis-töltä vaiko esimerkiksi toisen ohjelman tulosteena.

Ohjelmoijan työn helpottamisen lisäksi standardivirrat mahdollistavatniin sanotun suodatinmallin, jossa monta ohjelmaa yhdistetään ketjuun si-ten, että edellisen ohjelman standardituloste (stdout) syötetään nimeämä-töntä putkea pitkin seuraavan ohjelman standardisyötteeksi (stdin). Lisäksikaikki ajettavat ohjelmat saattavat tulostaa virheilmoituksia standardivirhe-virtaan standardivirhe (stderr). Nämä kolme standardivirtaa ovat saatavillakäytännössä kaikista käyttöjärjestelmistä jollain tasolla, ja mm. siksi ohjel-moinnin peruskurssilla usein opetetaan käsittelemään näitä kolmea virtaa.Käyttöjärjestelmäspesifien virtojen käsittely ei ole mainittavasti vaikeampaaja standardivirtojen osaaminen tulee varmasti eteen vielä myöhemmin.

Hyvin tyypillinen suodatinmallin käyttö on seuraavassa komentotulkki-käskyssä.

ls -al | grep foo | less

Ensin listataan kaikki työhakemiston tiedostot. Listaus ohjataan grep-ohjelmalle joka etsii merkkijonoa foo syötteestään ja tulostaa kaikki rivitjoilta merkkijono löytyy. Nämä rivit ohjataan less-ohjelmalle, joka jäsentääsyötteen sivuiksi, joilla voi navigoida niin, että kaiken ehtii lukea. Nimeä-

Page 76: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 69

mätön putki kahden komentoriviohjelman välille luodaan ”|” -merkillä, jotakutsutaan intuitiivisesti putkimerkiksi2 (pipe character).

Näppäimistöls -al

stdin

Näyttö

stderr

grep foo

(nimeämätön putki)

stdinstdout

less

stdout

stderr

(nimeämätön putki)

stdinstdoutstderr

Kuva 5.2: Tuloste- ja syötevirtojen ja virhevirran putkitus esimerkissä.

5.3 Tiedostot ja hakemistorakenneKeskusmuisti on häviävää ja siksi tietokoneessa täytyy olla jokin lisälaite, mi-hin tiedot voi tallettaa pysyvämmin. Pysyväistallennusta varten on olemassahalpaa massamuistia, jonne tietoa voidaan tallentaa. Tätä varten on kehitet-ty tiedoston (file) käsite. Tiedostojen tallentamisesta fyysiselle levylle vastaatiedostojärjestelmä (file system).

Tiedostojen jäsentämisessä on olennaista, että tiedostot voidaan ryhmi-tellä hierarkkisesti. Tätä ryhmittelyä varten tiedostot jäsennetään hakemis-tohierarkiaan. Monen käyttäjän käyttöjärjestelmässä tiedostojen käyttöä ontarpeen rajoittaa, jolloin puhutaan tiedosto-oikeuksista.

Tiedostoja voidaan käyttää myös muiden käyttöjärjestelmäkonseptien to-teutukseen. Tästä puhutaan aliluvussa 5.6, jossa esitetään perinteistä Unix-filosofiaa kaiken toteuttamisesta tiedostoilla.

5.3.1 Tiedosto

Tiedosto on tiedon tallennuksen perusyksikkö. Tiedostolle voidaan tehdä tiet-tyjä perusoperaatioita, jotka ovat

• luominen

• avaaminen

• luku2Nimi tulee siitä, että sitä käytetään Unixissa luomaan putkia. Virallinen nimi merkille

on pystyviiva.

Page 77: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 70

• kirjoittaminen

• sulkeminen

• tuhoaminen

Operaatiot on järjestelty hierarkkisesti siten, että sisemmällä tasolla taialempana olevat operaatiot ovat mahdollisia vain, jos ulommalla tasolla jaylempänä olevat operaatiot on tehty. Tiedosto täytyy aluksi luoda ja sillepitää antaa nimi. Nimen avulla prosessi voi avata tiedoston, jolloin käyttö-järjestelmään jää merkki siitä, että joku on avannut tiedoston ja käyttää sitä.Avatusta tiedostosta voi lukea sen osia tai sinne voi kirjoittaa. Tiedoston voimyös avata sekä lukua että kirjoitusta varten. Kun tiedostoa ei enää käyte-tä, se suljetaan, jolloin joku muu voi avata sen. Tiedostoa ei pysty yleensäpoistamaan, jos se on auki eli jonkun prosessin käytössä.

Käytännössä useammalla prosessilla voi olla sama tiedosto auki yhtäai-kaa. Esimerkiksi putki voidaan toteuttaa tiedostona, jota yksi prosessi lukeeja johon toinen kirjoittaa (ja Unixeissa tehdäänkin juuri niin).

Tiedon jäsentämisestä puhuttaessa käytetään neljää eri tason käsitettä:

• kenttä on yksittäinen pala tietoa, esimerkiksi yksittäinen opiskelijanu-mero, esimerkkikuvassa punaisella.

• tietue on kokoelma kenttiä, esimerkiksi opiskelijan nimi ja opiskelija-numero, esimerkkikuvassa vihreällä

• tiedosto on kokoelma tietueita, kuten tiedosto, jossa on kaikkien kurssiakäyvien opiskelijoiden nimet ja opiskelijanumerot

• tietokanta on kokoelma kenttiä, joiden välillä on relaatioita

Tietokanta opiskelijat

opiskelijat.csvEtunimi, Sukunimi, OpiskelijanumeroTeemu, Teekkari, 12345XTommi Turmiola 31013K

taulu etunimi

Teemu

Tommi

taulu sukunimi

Teekkari

Turmiolarelaatio

taulu opiskelijanro

12345X

31013Krelaatio

Kuva 5.3: Opiskelijatiedot Teemu Teekkarista ja hänen maalaisserkustaanTommista CSV-tiedostossa ja relaatiotietokantatauluissa. Huomaa standar-diin kuulumaton, mutta yleinen otsikkorivi CSV-tiedostossa.

Page 78: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 71

Kuvassa 5.3 on esitetty opiskelijatiedot Teemu Teekkarista ja hänen maa-laisserkustaan Tommista CSV -tiedostossa 3 ja relaatiotietokantataulussa.

Tiedoston ominaisuutena on se, että tietueet on tallennettu sekventiaali-sesti. Tiedoston rivin lukeakseen joutuu lukemaan kaikki sitä edeltävät rivit.Tietokanta taas on rakennettu siten, että pelkästään kentät ja niiden välisetrelaatiot on tallennettu ja kannasta on nopea hakea yksi tietty tietue. Vas-taavasti monen tietueen haku tietokannasta ei pääse samoihin nopeuksiinkuin tiedostoa lukiessa. 4 Tietokannat menevät ohi tämän kurssin aihealu-een, mutta niitä käsitellään lisää esimerkiksi kurssilla T-76.1143 Tiedonhal-lintajärjestelmät, joka esittelee lähinnä relaatiotietokantoja (muunlaisiakinon olemassa).

Tiedostoja ja tietokantoja voidaan käyttää samaan tehtävään. Esimerkik-si käyttöjärjestelmän ja eri ohjelmien asetukset tallennetaan Unix-sukuisissajärjestelmissä tiedostoihin siten, että tietyn ohjelman tai käyttöjärjestelmänosa-alueen asetukset ovat yhdessä tiedostossa. Windows-sukuisissa käyttö-järjestelmissä taas on Registry-tietokanta, jonne asetuksia tallennetaan.

Lähestymistapojen skaalautumisessa on selkeitä eroja. Unixissa yhden ai-noan asetuksen selvillesaamiseksi pitää lukea tiedosto vähintään siihen pistee-seen että asetus löytyy, usein jopa kokonaan läpi sen varmistamiseksi, että sa-maan asetukseen ei aseteta uutta arvoa myöhemmin. Tällöin yhden asetuksenhakeminen vie aikaa suhteessa kaikkien ohjelman asetusten kokoon. Window-sin rekisterissä kaikki asetustietueet tallennetaan samaan suureen kantaannimi-arvo -pareina. Kun ohjelma haluaa tietynnimisen asetuksen arvon, sekysyy sitä järjestelmäkutsulla. Arvon hakemiseen kuluva aika riippuu kaik-kien käyttöjärjestelmässä olevien asetusten määrästä, kuitenkin siten ettähakuaika kasvaa alle lineaarisesti, esimerkiksi O(log n). Kun ohjelmat poiste-taan, ne eivät välttämättä poista rekisteristä kaikkea sinne lisäämäänsä. Tä-mä rekisterin paisuminen on yksi osasyy siihen, miksi Windows-asennuksettuntuvat hidastuvan ajan kanssa. Vastaavasti Unixeissa tiedostoja voi lisätävaikka kuinka paljon, mutta silti yksittäisen ohjelman asetustiedosto tuleetiedostojärjestelmästä vakioajassa.

3Comma Separated Value eli CSV on alkeellinen ja helppoutensa takia laajalle levinnyttiedostoformaatti taulukoiden esittämiseen. Jokaisella rivillä esitetään pilkulla erotettunasama määrä kenttiä ja rivinvaihtomerkki määrää uuden tietueen alun. Esimerkissä käyte-tään standardia CSV:tä, jossa erottimena toimii pilkku (,). Suomalaista lokaalia käytet-täessä kuitenkin erottimena käytetään puolipistettä (;). Miksi?

4Facebookissa kaverisi tiedot on tallennettu tietokantaan. Ne on nopea hakea kannastakun haluat niitä. Toisaalta kaverisi kuvasta on tallennettu vain sen osoite, ja kuvat palvel-laan erilliseltä tiedostopalvelimelta, koska ne vievät tilaa ja ne on kustannustehokkaampaaja nopeampaa palvella erikseen

Page 79: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 72

5.3.2 Tiedostotyypit

Kaikki tiedostot eivät ole keskenään samankaltaisia. Niiden sisältämät kentätja tietueet saattavat olla hyvinkin erilaisia ja niiden lukemiseen tarvitaanerilaisia työkaluja.

Joissain järjestelmissä (esim. DOS ) tiedoston tyypin määrää sen kolmi-kirjaiminen pääte. Tällöin tiedoston nimi ja sen pääte erotetaan pisteellä,esim. ”file.exe”. Tiedostoa käsitellään tällöin sen pääteen mukaan. Mikäli tie-dostopääte on ”.exe”, oletetaan kyseessä olevan ajettava tiedosto (executable)jne. Microsoftin käyttöjärjestelmät usein varoittavat, jos tiedoston päätettämuutetaan, sillä päätteen muuttaminen saattaa muutta sitä, miten käyttö-järjestelmä käsittelee tiedostoa.

Toinen filosofia on, että tiedoston tyyppi ei ole tiedostojärjestelmän pään-vaiva. Näin on esimerkiksi Unixissa, jossa tiedostojärjestelmä vain tarjoileetiedoston, ja käyttäjä (tai ohjelmoija) vastaa siitä, että lukee oikeanlaistatiedostoa oikealla tavalla. Unix-filosofiaan kuuluukin se, että tiedostonimis-sä ei ole päätteitä. Unixeissa yleinen file-komento yrittää päätellä tiedostontyypin.

filen filosofian mukaan tiedostot jaetaan kolmeen pääryhmään:

• tekstieditorilla avattavat

• binääritiedostot

• ajettavat binääritiedostot

Näistä kaksi ensimmäistä ovat ilmeisiä ja toistensa vastakohtia. Viimeinentaas on määrätyn standardin muotoinen binääritiedosto, joka sisältää kone-kielitason koodeja. Tietyssä käyttöjärjestelmässä ajettavien ohjelmien täytyyolla tietyn formaatin mukaisia, jotta niitä voi ajaa.

Koska kaikki järjestelmät eivät tue päätteiden pakottamista, suunnitel-laan tiedostoformaatit usein siten, että lukeva ohjelma voi heti aluksi pää-tellä onko kyseessä oikeanlainen tiedosto. Binääritiedostoissa tätä kutsu-taan englanninkielisellä termillä magic number. Esimerkiksi kaikki Javanbytecode-tiedostot alkavat heksadesimaaliluvulla 0xCAFEBABE. Tekstiedi-torilla avattavien tiedostojen alussa voi myös olla vastaavia tietoja. Näistähyviä esimerkkejä ovat Unixissa yleinen tapa kirjoittaa käytettävän komen-totulkin (shell) nimi komentokielisen ohjelman eli skriptin (script) alkuun.Toinen on XML-kuvauskielissä yleinen dokumenttityypin määritys eli DTD.

Joskus tiedostoformaatti saattaa olla erikoismuoto toisesta tiedostofor-maatista. Javan jar-paketit ovat itseasiassa zip-formaattiin pakattu yhdis-telmä määrätyllä tavalla jäsenneltyjä tiedostoja. Virtuaalikone osaa aluksipurkaa paketin muistiin ja käynnistää sen sisältä määrätyn oletusluokan.

Page 80: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 73

5.3.3 Hakemistorakenne

Käyttäjät turhautuvat helposti, jos joutuvat etsimään tiedostoaan kovin pit-kästä listasta, ja osaavat intuitiivisesti ajatella hakemistorakennetta eräänlai-sena säilytysjärjestelmänä aivan kuten vaatekaapin hyllyjä tai muita analogi-sia säilytysjärjestelmärakenteita. Analogia on hyödyllinen myös kun tiedos-toryhmille asetetaan erilaisia näkyvyysmääreitä ja -käyttöoikeuksia. Käyttä-jien on helppo mieltää, että tiettyihin hakemistoihin heillä ei ole oikeuksia jatoisiin on. Loogiset nimeämiskonventiot helpottavat myös tiedostopolkujenmuistamista ja tiedon etsimistä.

Tiedostorakenne on tyypillisesti puumainen. Unixissa tiedostojärjestelmäalkaa niinsanotusta juuresta (root), jota kuvaa merkki ”/”. Juurihakemistonalla on erilaisia järjestelmähakemistoja. Yksi näistä on home, jonka alla useinovat käyttäjien kotihakemistot5. Toinen on usr, jonka alla ovat käyttäjilletarkoitetut, ns. userland-ohjelmat. Osia tyypillisestä Unixin hakemistopuustaon kuvattu kuvassa 5.4.

/

bin/

dev/

etc/

home/

lib/

tmp/

usr/

ttekkkar/

tturmiol/

bin/

games/

include/

lib/

share/

src/

X11R6/

Kuva 5.4: Hakemistopuu

5Tämä ei kuitenkaan ole rajoitus. Kts aliluku 5.8.1

Page 81: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 74

5.4 TiedostojärjestelmäFormaalisti tiedostojärjestelmä on tietokanta, joka sisältää tiedostojen tallen-nukseen, jäsennykseen, muokkaamiseen ja noutamiseen tarvittavia tietoja.

Levyjärjestelmän pienintä osaa nimetään historiallisista syistä sektorik-si. Käytännössä kaikki tallennusmediat olivat pitkään pyöriviä levyjä, jotensektori on ollut tekninen termi kuvaamaan ympyrän kaaren osaa tietyllä etäi-syydellä keskustasta. Nykyisin sektori-termiä käytetään kuvaamaan pienintämäärää tietoa, jonka levyjärjestelmälle voi kirjoittaa tai jonka sieltä voi lukeakerralla.

Tiedostojärjestelmän pitää tallettaa tieto tiedoston sijainnista. Koska tie-dostojen kokoa ei voi ennustaa ja koska tiedoston koko saattaa muuttua senelinaikana, tiedosto täytyy usein kirjoittaa levylle osissa. Useasta peräkkäi-sestä sektorista koostuvaa aluetta levyllä kutsutaan lohkoksi (block). Joskussektoria kutsutaan fyysiseksi lohkoksi (physical block), mutta pelkkä lohko-termi yleensä viittaa suurempaan loogiseen lohkoon.

Koska lohkoja ei yleensä voida laittaa peräkkäin, täytyy tiedostojärjestel-män tallentaa tieto lohkoista, joista tiedosto koostuu. Lisäksi järjestelmääntallennetaan mm. tieto siitä, koska tiedostoa on muutettu. Lisäksi useim-missa järjestelmissä on hyvä tietää kuka tiedoston omistaa ja mitä sillä saatehdä.

Seuraavaksi esittellään kaksi vanhahkoa tiedostojärjestelmää, Windows-maailman FAT-järjestelmä sekä FreeBSD:n tiedostojärjestelmä. Ensiksimai-nittu on korvattu aikoja sitten NTFS:llä (NT FileSystem), mutta se on so-pivan yksinkertainen esimerkiksi kurssille.

5.4.1 FAT

FAT DOS- ja Windows-käyttöjärjestelmissä käytettiin pitkään FAT-tiedosto-järjestelmän (File Allocation Table, tilanvaraustaulukko) eri versioita. FAT12ja FAT16 ovat jo varsin vanhoja, mutta vielä Windows XP:n saattoi asentaaFAT32-osiolle. FAT-järjestelmässä levy on jaettu loogisiin osioihin, joita kut-sutaan klustereiksi (analoginen lohkon kanssa, Microsoft kutsuu usein samojaasioita eri nimillä).

Tilanvaraustaulukko eli varsinainen File Allocation Table sisältää jokai-sesta klusterista lukuohjeita käyttöjärjestelmälle. Jokaista klusteria varten ontallennettu yksi sana (12, 16 tai 32 bitin sana versiosta riippuen). Jos klus-teri on osa tiedostoa, mutta ei viimeinen klusteri tiedostossa, tallennetaanseuraavan klusterin osoite. Jos klusteri on viimeinen, tallennetaan tieto tästävaratulla sanalla. Lisäksi on varattuja sanoja sille, että klusteri on vapaa (ti-lasana pelkkää nollaa) tai että klusteria vastaavalla fyysisellä levyosiolla on

Page 82: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 75

havaittu virhe (bad sector) ja klusteri ei ole käytössä.Jokaisen hakemiston sisältöä kuvaa tiedosto, joka sisältää taulukon. Tätä

kutsutaan hakemistotaulukoksi, ja se sisältää tietoa mm. tiedoston nimestä,päätteestä, tyypistä ja koosta. Tiedoston tyyppi on kuvattu yhdellä oktetil-la, jossa on bittejä tiedoston eri tyyppiominaisuuksille, kuten sille, onko tie-dosto vain luku, piilotettu, järjestelmätiedosto tai alihakemisto (monta voiolla päällä yhtä aikaa). Lisäksi on talletettu tiedoston ensimmäisen kluste-rin osoite. Koko tiedosto on mahdollista lukea, koska FAT muodostaa yksi-suuntaisen linkitetyn listan tiedoston klustereista. Kuva 5.5 esittää FAT16-tiedostojärjestelmän rakennetta.

Alihakemisto on yksinkertaisesti tiedosto, joka sisältää hakemistotaulun,jossa on lueteltu alihakemiston sisältö. Tiedostojen ja alihakemistojen nimenpituus on rajoitettu, se voi olla maksimissaan kahdeksan merkkiä ja kolmemerkkiä tiedostopäätteelle.

5.4.2 Unix-tiedostojärjestelmät

Unixeissa yksittäisen tiedoston tiedot on tallennettu tietorakenteeseen nimel-tä inode (nimen historia on hämärän peitossa, node tarkoittaa englanniksipuun solmua). Inodessa on tallennettuna samat asiat kuin FAT:n hakemisto-taulussa, mutta ne tallennetaan erilliseen tietueeseen jokaista tiedostoa koh-ti. Lisäksi tiedostosta tallennetaan tieto sen omistajasta (FAT-järjestelmissäomistajuus voidaan toteuttaa laajennuksella) sekä tieto siitä, montako viit-tausta kyseiseen tiedostoon on muualta tietojärjestelmästä.

Tiedoston lohkohin viittaamista (Unixissa lohkot ovat lohkoja) ei ole stan-dardoitu, vaan tiedostojärjestelmätoteutus saa päätää sen itse. Lisäksi aiem-minmainitut tiedotkin saa järjestää haluamallaan tavalla.

Esimerkiksi FreeBSD:n tiedostojärjestelmän inode-toteutuksessa (kuva5.6) inoden alussa on tallennettu tiedoston tyyppi, joka voi olla normaali,hakemisto, erityinen (liittymäpiste lisälaitteelle), nimetty putki, kova linkkitai symbolinen linkki.

Normaalien tietojen jälkeen on tallennettu 1-12 suoraa muistiviittausta,jotka osoittavat tiedoston ensimmäisiin lohkoihin. Mikäli tiedosto on suurem-pi kuin 12 lohkoa, on tämän jälkeen viittaus lohkoon, joka sisältää osoittimiaeli viittauksia varsinaisiin tiedostolohkoihin. Tämän jälkeen on vielä kaksin-ja kolminkertaiset lohkorakenteet. Kolminkertaisten osoittimien tietueessa onosoitin osoittimiin jotka osoittavat osoittimiin jotka osoittavat dataan. Tie-dostokoon ja tiedoston sisältämien lohkojen määrän perusteella käyttöjärjes-telmä tietää paljonko tiedostoa voi lukea.

Lopuksi viittausten jälkeen tallennetaan tieto siitä, montako kovaa linkkiätiedostoon osoittaa sekä mahdollisia laajennusten käyttämiä tietueita.

Page 83: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 76H

ake

misto

tau

lu

nim

itie

dosto

pääte

tyyppi

vara

ttulu

otu

1lu

otu

2viim

eksi lu

ettu

mu

okattu

1m

uokattu

21

. klu

steri

koko

tavu

issa

tiedosto

1tx

tvain

luku

, järje

stelm

ä0

x0

01

1:4

5:1

32

1/0

7/1

00

90

1/0

9/1

00

90

0:3

5:4

20

1/0

9/1

00

90

x0

10

40

x0

00

00

00

5

tiedosto

2exe

piilo

tettu

, järje

stelm

ä0

x0

02

2:5

3:3

32

1/0

7/1

00

92

0/0

8/1

00

90

8:1

1:2

02

1/0

7/1

00

90

x1

23

40

x0

10

01

00

0

hake

misto

h

ake

misto

0x0

00

0:3

3:3

32

1/0

7/1

00

91

6/0

8/1

00

91

2:2

1:1

11

5/0

7/1

00

90

x0

10

B0

x0

10

01

00

0

klu

sterin

fyysin

en

oso

iteIn

form

aatio

0x0

10

4D

ata

0x0

10

5D

ata

0x0

10

6V

apaata

0x0

10

7R

ikkin

äin

en

sekto

ri

0x0

10

8D

ata

0x0

10

9D

ata

0x0

10

AD

ata

0x0

10

BTo

isen

tiedosto

n d

ata

a

Tila

nvara

usta

ulu

kko

(FAT

)

Klu

steri

Talle

nte

en

tyyppi

selv

en

nykse

ksi k

irjoite

ttuA

rvo

0x0

10

4K

äytö

ssä0

x0

10

5

0x0

10

5K

äytö

ssä0

x0

10

8

0x0

10

6V

apaa

0x0

10

0

0x0

10

7R

ikkin

äin

en

sekto

rile

vyllä

0xFFF7

0x0

10

8K

äytö

ssä0

x0

10

9

0x0

10

9K

äytö

ssä0

x0

10

A

0x0

10

ATie

dosto

n v

iimein

en

klu

steri

0xFFF8

0x0

10

BK

äytö

ssä0

x0

10

F

Hake

misto

tau

lu

nim

itie

dosto

pääte

tyyppi

vara

ttulu

otu

1lu

otu

2viim

eksi lu

ettu

pvm

mu

okattu

1m

uokattu

21

. klu

steri

koko

tavu

issa

alih

ake

misto

tiedosto

tiedosto

1tx

tvain

luku

, järje

stelm

ä0

x0

01

1:4

5:1

32

1/0

7/1

00

90

1/0

9/1

00

90

0:3

5:4

20

1/0

9/1

00

90

x1

23

40

x0

10

01

00

0

Sam

a o

soite

viitta

a k

luste

riin le

vyllä

ja riv

iin ta

ulu

kossa

Kuva 5.5: FAT16-tiedostojärjestelmän rakenne

Page 84: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 77

Kaikki hakemistossa olevat tiedostot on tallennettu erityiseen tiedostoon,hakemistotauluun. Taulussa on tallennettu tiedostojen ja alihakemistojen ni-met ja niihin osoittavien inodejen numerot. Kaikkien inodejen numerot ontaulukoitu yhteen suureen taulukkoon, josta käyttöjärjestelmä hakee inodennumeron perusteella fyysisen lohkon numeron.

hakemistotaulu

tiedostonimi inode ID

alihakemisto 1234

tiedosto 6789

inode-taulu

inode ID fyysinen blokki

1234 0x12345678

6789 0x23456789

Fyysinen levy

Inoden sisältävä blokki

Blokki 1

...

Blokki 13

Muuta

Muuta

Blokki n

Blokki n+1

Blokki m

Blokki p

Muuta

inode Tyyppi

Omistajat

Aikaleimat

Koko

Suora (0)

Suora (1)

...

Suora(12)

Viittaus

Kaksinkertainen viittaus

Kolminkertainen viittaus

Blokkien määrä

Viittausten määrä

Laajennusattribuuttien koko

Laajennusattribuutit

Osoittimia (oikeasti blokki levyllä)

Osoittimia (oikeasti blokki levyllä)

Osoittimia (oikeasti blokki levyllä)

Osoittimia (oikeasti blokki levyllä)

Osoittimia (oikeasti blokki levyllä)

Osoittimia (oikeasti blokki levyllä)

Osoittimia (oikeasti blokki levyllä)

Kuva 5.6: FreeBSD:n inoden rakenne

5.4.3 Modernit tiedostojärjestelmät

Molemmat esitetyt tiedostojärjestelmät ovat luonteeltaan varsin yksinker-taisia. Moderneissa tiedostojärjestelmissä on paljon lisäominaisuuksia, jotkahelpottavat tiedostojärjestelmien käyttöä.Yksi erittäin merkittävä ominai-suus on journaling eli kirjanpito. Kirjaapitävä tiedostojärjestelmä tallentaaerilliseen tiedostoon tiedon kaikista levylle tehtävistä muutoksista ennen kuinvarsinaista tiedostojärjestelmää ja sen rakennetta muutetaan. Tämän suomaetu on, että jos varsinainen kirjoitusoperaatio epäonnistuu (esimerkiksi kunkäyttäjä katkaisee virran kesken käytön), kirjanpidon avulla voidaan yleensäpalauttaa järjestelmän tila takaisin, eikä tiedostojärjestelmä ole niin herkkähajoamaan.

Muita lisäominaisuuksia ovat parempi tuki tiedostonimien pituudelle ver-rattuna FAT16:een ja tuki nykyisille merkistöille tiedostonimissä, tuki koko-naisen levyosion salaamiselle ja tuki pitkien nollia sisältävien tiedostopalojenkirjoittamattajättämiselle.

Page 85: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 78

5.4.4 Kiintolevyn osiot

Yhdellä kiintolevyllä voi olla useampia osioita, joilla jokaisella voi olla eritiedostojärjestelmä. Tällöin sanotaan että levy on osioitu (partitioned). Eriosilla voi olla esimerkiksi eri käyttöjärjestelmiä tai sitten käyttöjärjestelmävoi haluta eri partitioita eri tarkoituksin. Esimerkiksi Unixeissa on usein eril-linen swap-partitio heittovaihtoa varten.

Osion alussa on käynnistyssektori (boot sector), jonka lukemalla emole-vyn piirille tallennettu käynnistysohjelmisto (BIOS ) osaa käynnistää osiollaolevan käyttöjärjestelmän. Osion alussa voi olla lisätietoja osion ominaisuuk-sista, kuten lohkokoko jne. Sitten tulee jokin käyttöjärjestelmän tallentamataulu lohkojen tiedoista (inode-taulu tai FAT) ja lopulta itse data. Ensim-mäisenä on yleensä juurihakemiston hakemistotiedosto.

Käynnistyssektori Varattua tilaa Varaustaulukko Varaustaulukon kopio Juurihakemistotiedosto Dataosio

FAT16

Käynnistysblokki Superblokki Inode-taulu Datablokkeja

FreeBSD

Kuva 5.7: Erilaisten levyjen partitiointi

Fyysisen levyn alussa on pääkäynnistystietue (Master Boot Record ,MBR). Se sisältää tiedon siitä, miten levy on jaettu osioihin ja minkä osionkäynnistystietue oletusarvoisesti suoritetaan. Tämän takia kun monta käyt-töjärjestelmää on asennettu samalle koneelle tai levylle, täytyy oletuskäyttö-järjestelmän esilataajan (boot loader) tarjota valinta siitä, mikä käyttöjärjes-telmä käynnistetään ja tukea myös muiden käyttöjärjestelmien käynnistystä.

5.4.5 Linkit

Unix-järjestelmät ja modernimmat Windowsit tukevat tiedostojärjestelmänlinkkejä. Linkit ovat tapa vähentää levylle tallennetun datan tarpeetonta re-dundanssia. Jos samaa tiedostoa tarvitaan kahdessa eri paikassa tiedostojär-jestelmässä, samaan tiedostoon voidaan viitata kahdesta eri paikasta linkkienavulla. Linkkejä on kahdenlaisia, kovia (tavallisia) ja pehmeitä (symbolisia).

Kovat linkit (hard links) ovat viittauksia inodeen jossain hakemistotaulus-sa. Tämän takia inode laskee siihen kohdistuvia viittauksia. Aina kun inodenID lisätään johonkin hakemistotauluun, käyttöjärjestelmä lisää inoden viit-tauslaskuria yhdellä. Vastaavasti laskuria lasketaan, jos viittaus poistetaan.

Page 86: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 79

Jos laskurin arvoksi tulee 0, käyttöjärjestelmä päättelee, että tiedostoon eienää viitata missään ja poistaa sen.

Kovilla linkeillä on tiettyjä rajoituksia. Niitä voidaan tehdä vain samantiedostojärjestelmän sisällä, koska ne on toteutettu inode-viittauksian. Kah-della kovalla linkillä hakemistotauluihin on mahdollista tehdä loputon rekur-sio (miten, miksi?), mikä ei yleensä ole suotavaa. Tästä syystä hakemistojenlinkkaaminen ei yleensä ole tuettua kovilla linkeillä.

Symbolinen linkki on erityinen datatiedosto, joka sisältää pelkästään toi-sen tiedoston nimen. Kun symbolista linkkiä käsitellään, käyttöjärjestelmäautomaattisesti purkaa linkin tiedoston nimeksi. Linkki voi olla olemassavaikka sen viittaama tiedosto olisikin poistunut. Tällaista linkkiä kutsutaanorvoksi. Linkki voi osoittaa minne tahansa, millä on tiedostopolku, eli myöstoiseen tiedostojärjestelmään tai hakemistoon.

Tyyppi Omistaja Ryhmä Muut

drpscb rwx rwx rwx

- 111 110 100

- 7 6 4

Kuva 5.8: Unixien tiedosto-oikeudet

5.5 LisälaitteetSuorittimen, muistin ja levyjärjestelmän lisäksi tietokoneeseen voidaan liit-tää mitä moninaisimpia lisälaitteita, kuten optisia levyasemia, äänilaitteita,antureita jne. Käyttöjärjestelmät eroavat paljon siinä, kuinka kommunikaationäiden lisälaitteiden kanssa näytetään käyttäjälle ja ohjelmoijalle.

Yleistä kaikille käyttöjärjestelmille on se, että lisälaitteiden ohjaamiseenkäytetään ajureita (driver). Ajuri on erityinen tietokoneohjelma, joka to-teuttaa tietyn rajapinnan ja kommunikoi sen ja varsinaisen lisälaitteen välil-lä. Ajuri piilottaa lisälaitteelle spesifiset toteutusyksityiskohdat muulta jär-jestelmältä. Kun ajuriohjelma saa kutsun rajapintaan, se siirtää väylää pit-kin lisälaitteelle sen tarvitsemat ohjausbitit tai lukee lisälaitteelta dataa jamuokkaa sitä kutsujaohjelman ymmärtämään muotoon ja siirtää sitä eteen-päin.

Page 87: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 80

Ajurien täytyy pystyä suorittamaan etuoikeutettuja järjestelmäkutsuja,joten ne ovat yleensä osa käyttöjärjestelmän ydintä tai ne ajetaan ytimenoikeuksilla. Virheellisesti toimivat lisälaiteajurit ovatkin yksi erittäin suuritietoturvariski tietokoneissa ja ne aiheuttavat järjestelmän epävakautta6.

5.6 Everything’s a file (Unixin tiedostojärjes-telmä ja lisälaitteet)

Unix-filosofian perustana on se, että kaikki tietokoneen tarjoamat palvelutovat saatavilla tiedostoina tiedostojärjestelmässä. Tiedostojärjestelmä ei eri-tyisesti ota kantaa siihen, minkälaisia tiedostot ovat, vaan allaoleva käyt-töjärjestelmä voi tarjota esimerkiksi USB-tikulta dataa johonkin tiettyyntiedostoon tiedostojärjestelmässä. Tätä kuvaa aiemmin esitelty ”erityinen”-attribuutti inodessa. Unixissa lisälaitteet jaetaan kahteen pääkategoriaan,merkkilaitteisiin (character device) ja lohkolaitteisiin (block device). Merkki-laitteet ovat nimensä mukaisesti laitteita, joilta dataa saa tai joille dataa siir-retään yksi merkki kerrallaan. Esimerkki merkkipohjaisesta syöttölaitteestaon näppäimistö, jolta merkkejä saa sitä mukaan kun käyttäjä niitä kirjoit-taa. Vastaavasti merkkipohjainen tulostinlaite on esimerkiksi vanhanaikai-nen kirjoitin (ei tulostin, kirjoitin), joka kirjoittaa merkkejä yksi kerrallaanpaperitulosteelle. Tiedonsiirto merkkilaitteille tapahtuu laittamalla merkkijonoon, eli FIFO-tietorakenteeseen. Tiedonsiirron erityispiirteenä on se, et-tä kun merkki luetaan jonosta, se häviää siitä. Näinollen merkin voi lukeakerran ja vain kerran.

Lohkolaitteet ovat nimensä mukaisesti laitteita, joilta dataa saa koko-nainen tiedostojärjestelmän lohko kerrallaan, kuten esimerkiksi USB-tikku.Myös kovalevy on lohkolaite ja siihen pätevät samat periaatteet kuin muihinlohkolaitteisiin. Koska lohkot ovat suuria, tiedonsiirto pelkän tarpeen perus-teella aiheuttaa tarpeetonta odotusta. Siksi lohkolaiteiden liikennettä pusku-roidaan (buffer). Puskuroinnissa käyttöjärjestelmä varaa alueen keskusmuis-tista välimuistiksi.

Jotkin lisälaiteet, kuten levyjärjestelmä ja tulostimet tukevat puskuroi-matonta tiedonsiirtoa. Puskuroimaton tiedonsiirto hoidetaan DMA:lla suo-raan lisälaitteelta prosessin muistialueelle.

6Toisaalta liialliset vaatimukset ajurien laadusta saattavat hidastaa järjestelmän käyt-töönottoa. Yksi syy Windows Vistan epäonnistumiseen oli se, että sille tehtävien ajurienpiti olla selkeästi monimutkaisempia (ja parempia) kuin XP:n ajurien.

Page 88: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 81

5.7 Asiakas-palvelin -malli (Windowsin tiedos-tojärjestelmä ja lisälaitteet)

NT-sarjan (NT, 2000, XP, Vista, Windows 7, Windows Serverit) Windowsienydin on rakennettu asiakas-palvelin mallilla (client-server model). Käyttäjänohjelma toimii asiakkaana ja tekee ohjelmointirajapinnan (API ) avulla kut-suja NT:n ytimen I/O Manager -alijärjestelmälle, joka palvelimena toteuttaanämä käskyt (olettaen että ne ovat sallittuja).

Kuten Unixissa, myös NT:n I/O Manager hoitaa tiedonsiirron sekä tie-dostojärjestelmään, että muihin lisälaitteisiin, eli rajapintakutsu on saman-lainen. Erotuksena Unixeista tiedostojärjestelmä ei ole yhtenäinen. Levyjär-jestelmän sisältävät laitteet näkyvät yleensä erillisinä asemina (C:, D: jne.)ja muut laitteet eivät näy ollenkaan tiedostojärjestelmässä7. Yksi I/O Mana-gerin osa, Cache Manager huolehtii siitä, että hitailla tiedonsiirtoyhteyksilläon olemassa puskurit.

Prosessienvälinen kommunikointi, kuten putket on myös toteutettu eritavoin kuin Unixeissa. Erillinen ytimen osa ottaa vastaan prosessikutsuja javälittää ne eteenpäin. Putket eivät siis ole tiedostoja, kuten eivät myöskäänsemaforit.

Asiakas-palvelin mallin etuna on se, että se skaalautuu paremmin monentietokoneen resurssienhallintaan. Kun esimerkiksi ohjelma haluaa kirjoittaatulostimelle, I/O Manager saattaa havaita että kyseinen tulostin on liitettytoiseen lähiverkon koneeseen ja välittää verkon kautta tulostimelle etäprose-duurikutsun (remote procedure call, RPC ). Windows siis tukee paremminläpinäkyvää hajautusta.

5.8 KäyttäjänhallintaUseiden käyttäjien oikeuksien hallinta on olennaista moderneille käyttöjär-jestelmille. Täydellisessä maailmassa käyttäjänhallinta saattaisi olla tarpee-tonta, mutta todellisuudessa käyttäjät haluaisivat tehdä asioita, joihin heilläei ole oikeuksia. Käyttäjät myös tekevät virheitä, joilta muita käyttäjiä pitääsuojata. Tietoturvayhteyksissä käyttäjä oletetaan aina joko pahantahtoiseksitai tietämättömäksi (lopputulos voi olla sama) ja pyritään minimoimaan ei-toivottuihin uhkiin liittyvät riskit. Tietoturvallisuutta käsitellään vähän lisäätietoliikenteen johdatuskursseilla T-110.2100 tietoteekkareille ja T-110.1100

7Järjestelmä tukee kyllä kaikkien levyjen ja osioiden näyttämistä yhdessä, vaikka omi-naisuutta ei käytetäkään usein.

Page 89: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 82

sivuaineopiskelijoille. Lisäksi aiheeseen liittyy kokonainen A3-moduuli tieto-liikenneohjelmistojen pääaineessa.

Kun käyttäjä aloittaa järjestelmän käytön, joutuu hän kirjautumaan si-sään ja (useimmiten) autentikoitumaan. Sekä Unixeissa että Windowsissatämä tehdään yleensä antamalla käyttäjänimi ja salasana, mutta muitakintapoja, kuten älykortti- tai sormenjälkitunnistusta, on mahdollista käyttää.Olennaista on, että kirjautuja väittää olevansa joku tietty järjestelmän käyt-täjä ja että hän todistaa väitteensä sopivalla tavalla. Käyttöjärjestelmän tar-joama kirjautumisohjelma (login prompt) hakee käyttäjätietokannasta todis-teen varmistamiseen tarvittavat tiedot (autentikaatiotietueen) ja vertaa nii-tä käyttäjän antamiin. Jos vertailu onnistuu, kirjautumisohjelma käynnistääkäyttöliittymäprosessin (User Interface, UI). Käyttöliittymäprosessi käynnis-tetään yleensä käyttäjän numerolla ja oikeuksilla.

Käyttöjärjestelmät tunnistavat käyttäjän käyttäjänumeron ( userID,UID) avulla. Käyttäjänumero on kokonaisluku, jolla käyttöjärjestelmäerottelee käyttäjät toisistaan. Käyttäjänumerot saattavat olla käyttöjärjes-telmän pseudosatunnaisia, kuten Windowseissa. Ne voidaan myös käsin aset-taa tarkoituksenmukaisiksi.

Käyttäjänumero 0 on yleensä varattu, ja se on Unixeissa pääkäyttäjän eliroot in UID. Käyttöjärjestelmän ydin voi tehdä mitä tahansa tietokoneessa jakäyttöjärjestelmän ydin tekee kaiken minkä root käskee. Windows-maailmanekvivalentti on ylläpitäjä (Administrator), jolla ei ole yhtä laajoja oikeuksiakuin rootilla. Jotkin asiat ovat kiellettyjä Windowsin ylläpitäjältä ja sallittujavain järjestelmätilille (Local System Account). Pienet käyttäjänumerot (1-99tai 1-999) on yleensä varattu erilaisille järjestelmätileille.

Kun käyttäjä käynnistää prosessin, prosessille asetetaan käyttäjän käyt-täjänumero. Kun prosessi tekee käyttöjärjestelmäkutsun, voi ytimen osa ni-meltä referenssimonitori (reference monitor) numeron avulla tarkistaa, onkoprosessilla lupa käyttää jotain tiettyä objektia, kuten tiedostoa tiedostojär-jestelmässä tai lisälaitetta. Jos referenssimonitori antaa luvan, käyttöjärjes-telmä tarjoilee halutun objektin prosessille. Jos taas ei, käyttöjärjestelmäantaa virheilmoituksen prosessille.

Jos prosessi käynnistää lapsiprosesseja, ne perivät vanhempansa käyttä-jänumeron. Käyttöjärjestelmää voi pyytää vaihtamaan prosessin käyttäjänu-meroa erillisen setuid-käskyn avulla. Esimerkiksi jotkin tiettyä resurssia käyt-tävät prosessit on pakko käynnistää pääkäyttäjänä (jotta esimerkiksi www-palvelin saa kuunnella verkkorajapinnan porttia 80, johon vain pääkäyttäjälläon oikeus sitoa prosessi), mutta käynnistyksen jälkeen niiden UID asetetaanjoksikin vähemmän etuoikeutetuksi, jotta bugi prosessin koodissa ei pääseromahduttamaan koko järjestelmän turvallisuutta.

Käyttäjä kuuluu lisäksi joihinkin ryhmiin (user groups), joilla on myös

Page 90: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 83

tunniste, ryhmänumero. Unixissa yleisiä ryhmiä ovat users, johon kuulu-vat kaikki käyttäjät ja wheel, johon kuuluvilla käyttäjillä on erityisoikeuksia(usein wheelin jäsenet saavat käyttää su-komentoa joka antaa pääkäyttäjänoikeudet).

5.8.1 Autentikaatiotietueet

Unixeissa autentikaatiotietueet tallenetaan tiedostoon. Aikaisemmin kokotietue tallennettiin tiedostoon /etc/passwd. Se sisältää tietoa käyttäjänimis-tä, -numeroista, käyttäjien kotihakemistoista, oletuskomentorivitulkeista jasalasanojen tiivisteistä (tiivisteitä käsiteltiin jo virheiden havaitsemisen yh-teydessä). Nykyisin salasanan tiiviste tallennetaan erilliseen /etc/shadow-tiedostoon, jota vain root saa lukea.

Salasanojen tiivistefunktiot on erityisesti suunniteltu raskaiksi laskea jasellaisiksi, että niissä ei tapahdu törmäyksiä (kaksi syötettä antaa saman tii-visteen). Kun käyttäjä antaa käyttäjänimen ja salasanan, lasketaan annetunsalasanan tiiviste ja verrataan sitä talletettuun. Jos ne ovat samoja, käyttäjäon osannut salasanan oikein (mikä ei vielä tarkoita sitä käyttäjä olisi se, jokaväittää olevansa!). 8

Windowseissa taas autentikaatiotietueet on tallennettu järjestelmän yl-läpitämään autentikaatiotietokantaan. Tietokantalähestyminen tarjoaa pa-rempaa joustavuutta verrattuna tiedostoon. Esimerkiksi Windowsin ActiveDirectory -autentikaatiotietokantoja voi yhdistää ja jakaa eri koneiden kes-ken paljon yksinkertaisemmin kuin Unixien /etc/passwd ja /etc/shadow -tiedostoja pitää synkronoituna. Toisaalta Unixien autentikaatiotietueita onmahdollista (ja helppoa) muokata teksiteditorilla, kun taas Windowsissa tä-mä vaatii erikoistuneen ohjelman 9.

5.8.2 Tiedosto-oikeudet

Tiedostojärjestelmien yhteydessä esitelty FAT16-tiedostojärjestelmä ei suo-raan tue tiedostojen omistajuutta. Tämä johtuu suunnittelufilosofiasta:

8Itseasiassa asia ei ole näin yksinkertainen. salasanan tiivisteen yhteyteen tallennetaanselväkielisenä satunnainen tai puolisatunnainen suolaluku (salt). Sekä suolaluku että sala-sana annetaan tiivistefunktiolle ja funktio laskee tiivisteen. Koska suolaluku on käyttäjä-kohtainen, ei kahden käyttäjän salasanatiiviste näytä samalta, vaikka salasanat olisivatkinsamat. Tämä vaikeuttaa salasanojen murtamista huomattavasti.

9Jos pääkäyttäjän salasana on unohtunut, sen voi helposti asettaa uudelleen, jos ko-neeseen on fyysinen pääsy. CD-levyltä tai USB-tikulta voi käynnistää toisen käyttöjär-jestelmän, joka pääsee käsiksi alkuperäisen käyttöjärjestelmän tiedostojärjestelmään ohitiedostojärjestelmän rajoitteiden.

Page 91: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 5. KÄYTTÖJÄRJESTELMÄN RAKENNUSPALIKAT 84

DOS ja ensimmäiset Windowsit suunniteltiin henkilökohtaisten tietokonei-den (PC) käyttöjärjestelmiksi, jolloin oletuksena oli yksi henkilö per kone.Määritelmällisesti kaikki tiedostot olivat silloin saman käyttäjän. Järjestel-mätiedostot eroteltiin, jotta osaamattomat käyttäjät eivät vahingossa rikkoisikäyttöjärjestelmää.

Unix-perhe ja uudemmat Windowsit (NT-sarja) on suunniteltu monenkäyttäjän koneiksi, joten silloin muunmuassa tiedostojen yhteyteen tarvitseemääritellä kuka ne omistaa ja kenellä on oikeus käsitellä niitä.

Unixeissa tiedoston inode tallentaa tiedon tiedoston omistajan käyttäjä-numerosta. Oikeudet on määritetty kolmella kolmen bitin ryhmällä. Jokai-nen ryhmä koodaa oikeudet lukea, kirjoittaa ja ajaa kyseinen tiedosto tietylleroolille (role). Mahdollisia rooleja on kolme: käyttäjä itse (user), käyttäjänkanssa samassa ryhmässä olevat (group) ja kaikki muut (other). Oikeuksiamuutetaan chmod-komennolla, joka tunnistaa sille annettuja komentoja jokooktaalilukuina tai yhdistelmänä rooli nimiä (u, g, o) ja niille lisättäviä (+)tai vähennettäviä (-) oikeuksia (r,w,x). Kaksi eri asetustapaa ovat olemassamukavuuden vuoksi. Yksittäisen bitin asettaminen päälle tai pois on helpom-paa roolien avulla. Oktettimuodossa taas kaikki tiedoston oikeudet voidaanasettaa kerralla eikä tarvitse huolehtia siitä, mitkä oikeudet tiedostossa ai-kaisemmin olivat päällä.

Kun tiedostoa yritetään käsitellä, käyttöjärjestelmän osa nimeltä referens-simonitori tarkistaa onko lukevan prosessin prosessinumero tiedoston omis-taja tai kuuluuko se tiedoston omistajaryhmään vai onko se muu. Tämänjälkeen vertaillaan asianmukaisen roolin oikeuksia ja niiden perusteella refe-renssimonitori joko sallii tai kieltää käsittelyoperaation.

Page 92: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Luku 6

Käyttöjärjestelmä

Tähän mennessä käyttöjärjestelmän ydintä on käsitelty pintapuolisesti ja seneri tehtäviin on viitattu osasia käsiteltäessä. Ytimestä on puhuttu lähinnämustana laatikkona, joka toteuttaa tiettyjä toimintoja, mutta jonka sisäistärakennetta ei tarkastella. Tässä luvussa tarkastelemme nykyisten käytössäolevien käyttöjärjestelmien ytimien rakenteita. Koska olemme ylenkatsoneettiettyjä modernien tietokoneiden rakenteellisia ominaisuuksia, esittelemmene ja niiden tuen käyttöjärjestelmätasolla.

6.1 Symmetrinen moniprosessointi ja moniy-dinprosessointi

Palvelintietokoneissa on jo vuosia ollut useampia suorittimia. Tässä yhtey-dessä puhuttaessa sana suoritin tarkoittaa mitä tahansa suoritusyksikköä.Sana ydin taas tarkoittaa yhtä useammasta samalle piirilevylle tehdystäsuoritusyksiköstä ja sana prosessori tarkoittaa käsissä pidettävää, emolevyl-le asennettavaa yksikköä. Viimeaikoina myös pöytätietokoneisiin on tullutuseampia suorittimia. Niitä voidaan lisätä monella eri tavalla, esimerkiksiPlaystation 3 -pelikonsolin prosessorissa on kahdeksan ydintä, joista yksi onyleinen ja seitsemän on erikoistunut liukulukulaskentaan, joka on oleellistapelien grafiikkaa laskettaessa.

Toisin kuin Playstation 3:n epäsymmetrinen prosessoriarkkitehtuuri, PC-käytössä moniprosessorikoneet ovat käytännössä symmetrisiä (SymmetricMultiprocessing, SMP). Tämä tarkoittaa sitä, että kaikki prosessorit ovatsamanlaisia ja ne käsittelevät samaa muistia. Tällaisessa arkkitehtuurissa onverrattain helppoa jakaa työ eri prosessorien kesken.

Jos taas samassa prosessorissa on monta ydintä, puhutaan moniydin-prosessoreista (MultiCore Processing CMP). Tällöin samalle prosessorisirul-

85

Page 93: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 6. KÄYTTÖJÄRJESTELMÄ 86

le tehdään useampia (2-4) identtistä prosessoripiiriä L1-välimuisteineen japrosessorit jakavat L2-välimuistin. Joissain toteutuksissa L2-välimuistit ovatydinkohtaisia ja prosessorit jakavat L3-välimuistin jos sellainen on.

Ero prosessoreiden ja ytimien välillä on se, samassa prosessorissa olevatytimet joutuvat kilpailemaan pääsystä L2-tason välimuistiin. Tämän johdos-ta CMP kärsii enemmän von Neumannin pullonkaulasta ja lokaaliuden puut-teesta. Toisaalta useamman prosessorin tekeminen maksaa selvästi enemmänja siksi moniydinjärjestelmiä suositaan kuluttajatason ratkaisuissa. Samaantietokoneeseen voi myös lisätä monta moniydinprosessoria. Tälläinen arkki-tehtuuri on kuvattu kuvassa 6.1.

Prosessori 1

Prosessori 2

MuistiI/O-moduuli

PC

IR

MAR

MBR

IO AR

IO BR

Suoritusyksikkö L1 välimuisti

L2 välimuisti

Väylä

PC

IR

MAR

MBR

IO AR

IO BR

Suoritusyksikkö L1 välimuisti

PC

IR

MAR

MBR

IO AR

IO BR

Suoritusyksikkö L1 välimuisti

L2 välimuisti

PC

IR

MAR

MBR

IO AR

IO BR

Suoritusyksikkö L1 välimuisti

0

.

1

.

3

.

... a

käsky

a+1

käsky

a+2

käsky

... b

data

b+1

data

b+2

data

... n-2

.

n-1

.Puskuri ... ... ...

Kuva 6.1: Kaaviokuva tietokoneesta, jossa on kaksi kaksiytimistä prosessoria

Toisen suorittimen lisääminen ei automaattisesti kaksinkertaista tietoko-neen laskentanopeutta. Suorittimia lisättäessä teoreettista kaksinkertaistustahidastaa kolme eri asiaa: Amdahlin laki, väylä ja välimuistien yhteneväisyys.

Amdahlin laki määrittää suorittimien lisäämisestä syntyvän maksimaa-lisen hyödyn. Laki olettaa, että kaikki laskentakuormat koostuvat kahdestaosasta: rinnakkaistuvista laskutoimituksista ja laskutoimituksista joita ei voirinnastaa. Rinnakkaistuvien laskutoimituksien osuutta merkitään P :llä. Teo-reettista maksimihyötyä merkitään S:llä. Esimerkiksi toisen prosessorin lisää-misen tapauksessa S = 2. Amdahlin laki sanoo, että suoritusnopeus kasvaaparhaimmillaankin kaavalla

1

(1− P ) + PS

Amdahlin laissa käytetään optimistisesti teoreettista maksimihyötyä S.Jos prosessorit tai ytimet ovat saman muisti- ja lisälaiteväylän äärellä, hidas-

Page 94: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 6. KÄYTTÖJÄRJESTELMÄ 87

taa kilpailu niiden toimintaa. On mahdotonta estää tilanteita, joissa useam-pi prosessori tai ydin haluaa tietoa yhtä aikaa. Näissä tilanteissa toinen las-kentayksikkö joutuu odottamaan pidempään kuin optimitapauksessa ja senlaskenta hidastuu.

Jos samaa muistisivua tai -linjaa tarvitaan kahdessa prosessorissa taiytimessä yhtä aikaa, syntyy lisää ongelmia. Tämä välimuistin yhteneväi-syysongelma (cache coherency) täytyy ratkaista tavalla tai toisella. SMP-ratkaisuissa emolevyllä on usein erillisiä piirejä tämän ongelman ratkaisemi-seksi. CMP-ratkaisuissa taas ratkaisulogiikka löytyy prosessorin sisältä.

Yksi ratkaisu välimuistin yhtenäisyysongelmaan ja vielä enemmän virtu-aalimuistin yhteydessä mainittuihin pehmeisiin sivutusvirheisiin on yhtene-väisen välimuistin ei-yhtenäinen muistiarkkitehtuuri (cache coherent Non-Uniform Memory Architechture, ccNUMA). Intelin ensimmäiset NUMA-prosessorit ovat olleet myynnissä loppuvuodesta 2008 asti. Tutkimus näidenprosessorien ominaisuuksista on juuri nyt mielenkiintoisia.

Rautatason yhteneväisyysratkaisut eivät yleensä näy käyttöjärjestelmälleasti, mutta niitä käytiin tässä yhteydessä vain koska niiden olemassaolo onhyvä tiedostaa. Sensijaan prosessorien ja ytimien määrä on erittäin olennais-ta käyttöjärjestelmälle, koska käyttöjärjestelmän täytyy aikatauluttaa pro-sesseja useammalle suorittimelle.

Useamman prosessorin käytöstä syntyvistä ongelmista Amdahlin lain ra-joitus ja välimuistien yhteneväisyysongelma eivät päde jos prosessoreilla aje-taan eri ohjelmia. Tämän takia moniprosessorijärjestelmät yleistyivätkin en-sin palvelimissa, joissa on usein monia toisiinsa liittymättömiä tehtäviä.Niissä useammasta prosessorista on selkeämmin hyötyä. Pöytäkonekäytössäuseamman ytimen näkyvin hyöty on se, että käyttöjärjestelmä voi olla ajossaeri ytimellä samaan aikaan raskaan laskennan kanssa, jolloin kone ei näennäi-sesti hidastu vaikka sillä puretaan videota tai ajetaan Matlab-simulaatiota.

6.2 SäikeetProsessi on suoritusyksikkönä varsin raskas ja taipumaton. Sillä on oma va-rattu muistialueensa jonne muilla prosesseilla ei ole asiaa ja sen takia vies-tintä prosessien välillä on välttämättä hyvin hidasta. Lisäksi moniprosessori-ja moniydinjärjestelmissä useamman asian samanaikainen laskeminen on oi-keasti (eikä vain näennäisesti) mahdollista.

Tätä varten modernit käyttöjärjestelmäprosessit koostuvat säikeistä. Säieon prosessin osa, joka suorittaa tietyn käskysarjan ja jolla on oma tila. Pro-sessi voi käynnistää useampia säikeitä, jotka voivat olla ajossa yhtäaikaisestitai yhden prosessorin osituskäyttöjärjestelmässä eri aikalokeroissa. Säikeet

Page 95: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 6. KÄYTTÖJÄRJESTELMÄ 88

käsittelevät samaa muistiavaruutta ennustamattomassa järjestyksessä, jotenniiden käytössä täytyy varautua ratkaisemaan rinnakaisuusongelmia. Ohjel-man suoritusta voidaan kuitenkin merkittävästi nopeuttaa säikeillä. Säikeenvaihdossa ei mm. tarvitse suorittaa täyttä kontekstivaihtoa, kuten prosessienvaihdossa.

Säikeillä voidaan myös osittain varautua pitkiin odotusaikoihin ja vähen-tää niiden vaikutuksia. Käytännössä kaikki hyvin tehdyt graafisen käyttöliit-tymän ohjelmat on toteutettu siten, että käyttöliittymä ja varsinainen ohjel-man toiminnallisuus ovat eri säikeissä, ja käyttöliittymäsäie välittää käskytvarsinaiselle laskentasäikeelle. Tästä saatava hyöty on se, että käyttöliittymäei jumiudu vaikka ohjelmalla suoritettaisiin raskasta laskentaa.

6.3 Käyttöjärjestelmäytimien tavoitteet ja teh-tävät

Käyttöjärjestelmä on ohjelmisto, joka mahdollistaa tietokoneen käytön.Käyttöjärjestelmän ydin hallitsee muita tietokoneen prosesseja, muistia, vir-tuaalimuistia, pääsyä tiedostojärjestelmään ja yleisemmin lisälaitteita ja nii-den kanssa kommunikoivia ajureita. Käyttöjärjestelmä tarjoaa tietokoneenkäyttäjille palveluja: se ajaa ohjelmia, tarjoaa tiedonsiirtoa lisälaitteidenkanssa, kontrolloi pääsyä tiedostoihin ja järjestelmään yleensä, korjaa virhei-tä ja kerää käyttötilastoja. Käyttöjärjestelmää suunniteltaessa ja toteutet-taessa on hyvä pyrkiä täyttämään seuraavia toiminnallisia ja ei-toiminnallisiavaatimuksia:

• Käyttöjärjestelmän pitäisi helpottaa tietokoneen käyttöä (eli mm. ollavakaa ja monipuolinen).

• Käyttöjärjestelmän pitäisi tehostaa tietokoneen resurssien käyttöä jaolla tehokas ajaa.

• Käyttöjärjestelmää pitäisi olla mahdollista kehittää tehokkaasti ja senosia muuttaa helposti.

• Käyttöjärjestelmään pitäisi olla helppo lisätä tuki uusille laitteille.

• Käyttöjärjestelmään pitäisi olla helppo lisätä tuki uusille käyttöjärjes-telmäpalveluille

• Käyttöjärjestelmän osien vikojen korjauksen ja päivityksen pitäisi ollahelppoa.

Page 96: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 6. KÄYTTÖJÄRJESTELMÄ 89

Ytimen arkkitehtuuriratkaisut tekee haastavaksi se, että osa vaatimuksis-ta on keskenään ristiriitaisia. Erityisesti vaatimus ytimen tehokkuudesta onristiriidassa helpon ylläpidettävyyden ja joskus myös vakauden kanssa.

Ydintyypeissä kaksi pääsuuntausta: monoliittiset ja mikroytimet. Lisäk-si näiden kahden välimaastoon sijoittuvat niinsanotut hybridiytimet, jotkayrittävät yhdistää hyviä puolia molemmista lähestymistavoista.

6.3.1 Monoliittiset ytimet

Monoliittisissa ytimissä kaikki ytimen tehtävät ja niihin liittyvä laskenta suo-ritetaan etuoikeutetussa moodissa. Koko ydin on ladattu muistin alkuun va-ratulle alueelle ja ytimen pääsäie luo säikeitä, jotka suorittavat ytimen kaik-ki tehtävät.Unix-perheen käyttöjärjestelmien ytimet ovat perinteisesti olleetmonoliittisia, vaikka osaa niistä onkin muokattu lähemmäs hybridiytimiä.

Monoliittisen ytimen huono puoli on se, että sitä on hyvin vaikea muo-kata. Kun ydin on valmis, sen sisäisen rakenteen muokkaaminen on erittäinvaikeaa ja aikaavievää, sillä virhe yhdessä osassa ydintä saattaa aiheuttaaoireita aivan muualla. Lisäksi monoliittinen ydin täytyy ladata kokonaisuu-dessaan muistiin, mikä saattaa aiheuttaa ongelmia, mikäli muistin määrä onrajoitettu, kuten esimerkiksi sulautetussa laitteistossa. Toisaalta monoliitti-nen ydin on nopea ja tarjoaa varsin tehokkaan tavan suorittaa asioita.

Monoliittinen ydin on kohtuullisen helppo suunnitella ja toteuttaa1.

6.3.2 Mikroytimet

Mikroytimet ovat monoliittisia huomattavasti tuoreempi keksintö. Kun pro-sessoriarkkitehtuurien sanapituudet nousivat 16 bitistä 32 bittiin (eli 65-tuhatkertaistui), ei tila enää ollut ongelma. Ytimien koko alkoi kasvaa.Mikroydin-filosofia lähtee siitä, että vain ne ohjelmat, jotka on aivan pak-ko ajaa ytimessä, tulee ajaa ytimen etuoikeutetussa tilassa. Näitä ovat virtu-aalimuisti, skedulointi ja etuoikeutettujen prosessien välinen kommunikaatio.Kaikki muu, kuten tiedostojärjestelmät, laitteistoajurit ja käyttäjätilan pro-sessien välinen kommunikaatio toteutetaan ytimen ulkopuolella palveluina.

1Kun Helsingin Yliopiston tietojenkäsittelytieteen ylioppilas Linus Torvalds tunsi tar-vetta vältellä oikeiden opintojen suorittamista, hän alkoi toteuttaa omaa käyttöjärjes-telmäänsä Andrew Tanenbaumin Minix-opetuskäyttöjärjestelmän päälle. Erotuksena Mi-nixiin Linus teki omaan käyttöjärjestelmäänsä monoliittisen ytimen. Kun Linus julkaisitämän ytimenraakileensa usenetin comp.os.minix-ryhmässä hän käynnisti tapahtumaket-jun, joka johti Linux-ytimen kasvuun kaupallisesti varteenotettavaksi käyttöjärjestelmäksi.Vain hieman myöhemmin samassa ryhmässä alkoi kuuluisa väittely Torvaldsin ja Tanen-baumin välillä monoliittisten ja mikroytimien välisestä paremmuudesta.

Page 97: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 6. KÄYTTÖJÄRJESTELMÄ 90

Ydin antaa näille palveluille juuri sen verran oikeuksia kuin ne tarvitsevattoimintansa toteuttamiseksi.

Mikroytimien hyvä puoli on se, että niissä palveluita on mahdollista sam-muttaa ja käynnistää uudelleen tarvittaessa. Tämän ansiosta jos palvelus-sa on bugi, voidaan se uudelleenkäynnistää ilman että koko käyttöjärjestel-mä täytyy ladata uudelleen. Lisäksi jos jotain palvelua ei käytetä, se voi-daan laittaa virtuaalimuistin avulla levylle odottamaan ja tilaa vapautuuei-käyttöjärjestelmäprosesseille.

Haittapuolena mikroytimet ovat monoliittista ydintä hitaampia. Ainasuoritusvuoron siirtyessä ydinprosessilta palveluprosessille täytyy prosesso-rissa suorittaa kontekstin vaihto, jota ei tarvitse tehdä kun suoritusvuorovaihtuu monoliittisen ytimen säikeeltä toiselle.

Mikroydinkäyttöjärjestelmää on helpompi muokata ja laajentaa. Varsi-nainen mikroydin on pienempi ja sen virheettömyyttä on helpompi testata.Palvelut taas toimivat selkeän rajapinnan takana, jolloin jokaisen palvelunsisäistä toteutusta on helppo muuttaa ja saman rajapinnan taakse on helppotehdä vaihtoehtoinen palvelu.

Mikään tunnettu käyttöjärjestelmäydin ei ole puhtaasti mikroydin. Par-haat esimerkit mikroydinkäyttöjärjestelmistä ovat Tanenbaumin Minix-opetuskäyttöjärjestelmä ja GNU Mach, GNU-projektin vastine Linuxin yti-melle.

6.3.3 Hybridiytimet

Hybridiytimet yrittävät yhdistää aspekteja monoliittisista ja mikroytimis-tä. Hybridiytimissä käytetään samanlaista selkeää aliohjelma-arkkitehtuuriakuin mikroytimissä. Erilaisia politiikkoja toteuttavat mekanismit on erotet-tu selkeästi omiksi moduuleikseen, mutta osa moduuleista ladataan ytimenmuistialueelle ja ajetaan ytimen tilassa kun taas osa ajetaan käyttäjätilassa.Allaoleva ajatus on se, että ydin pysyy melko nopeana ja sen rakenne on ku-rinalaisempi kuin monoliittisissa ytimissä, mikä helpottaa jatkokehitystä jamuokkausta.

Mac OS X:n Darwin-ydin on Mach-nimisen mikroytimen päälle rakennet-tu hybridiydin. Windows NT-sarjan ytimet ovat myös hybridejä.

Page 98: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Luku 7

POSIX ja shell

Tähän asti kurssilla on käyty läpi tietokoneen ja käyttöjärjestelmän raken-netta ja saatu aikaan järjestelmä, jota käyttäjien on helppo käyttää. Tässäluvussa keskitymme käyttäjätason työkaluihin erityisesti Unix-sukuisissa jär-jestelmissä, koska valtaosa käyttäjistä lienee sinut MS Windows-pohjaistenjärjestelmien käyttämisessä.

Toistettavassa, mekaanisessa työssä on aina olemassa tietty kipupiste, jon-ka jälkeen mekaanista työtä on ikävä tehdä käsin. Yleensä ensimmäisellä ker-ralla uuden tehtävän suorittaa helpoiten käsin. Jos sama asia pitää tehdäuseammin, tulee helposti vastaaan kynnys, jonka jälkeen asian ohjelmalli-nen ratkaisu on kannattavaa ja aikaa säästävää. Tämän luvun tarkoituksenaon madaltaa tätä kynnystä ohjelmallisten ratkaisujen tuottamiseen Unix-alustoilla ja sitä kautta auttaa opiskelijoita keskittymään opiskelussa olen-naiseen ei-mekaaniseen osuuteen. Luvun sisältö on auttamatta riittämätönasioiden syvempään sisäistämiseen, mutta se on hyvä alku. Luvussa käydäänläpi tärkeimmät hyvin laajalle levinneen POSIX-standardin määrittämät eri-laiset käsitteet ja rakenteet.

Unix-sukuisten järjestelmien suunnitteluun on vaikuttanut voimakkaas-ti aikakausi jolloin ne on suunniteltu. Alkuperäinen Unics-käyttöjärjestelmäjulkaistiin 1969, jolloin keskimääräisellä tietokoneen käyttäjällä oli yliopis-totutkinto fysiikasta tai sähkötekniikasta. Hieman myöhemmin järjestelmiintuli myös erityisesti tietotekniikkaa opiskelleita käyttäjiä. Kaikki käyttäjätolivat pitkälle koulutettuja erikoisasiantuntijoita, ja siksi näiltä saattoi vaa-tia varsin paljon. Asiaa auttoi se, että tietokoneiden käyttötarkoitukset olivattieteellisesti suuntautuneita, algoritmisia laskutoimituksia ja simulaatioita.Siksipä Unix-sukuisten järjestelmien käyttäjät olivat kaikki myös ohjelmoijiaja tämä näkyy käyttöliittymän suunnittelussa.

91

Page 99: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 7. POSIX JA SHELL 92

7.1 POSIX1980-luvun puolivälissä Institute of Electrical and Electronics (IEEE ) ha-vaitsi Unix-sukuisten järjestelmien hajaantuneen emo-Unics -järjestelmästäja alkoi kehittää standardia, jonka määrittelemä ohjelmointirajapinta toteu-tettaisiin kaikkiin käyttöjärjestelmiin, jotta yhdelle järjestelmälle kehitettyohjelma olisi helppo siirtää toiselle järjestelmälle. Standardin nimi oli alunpe-rin IEEE-IX, mutta Richard Stallman ehdotti POSIX-nimeä (Portable Ope-rating System Interface for Unix) helpompana muistaa.

POSIX-standardi määrittää C-kielisen ohjelmointirajapinnan, joka jokai-sen POSIX-yhteensopivan käyttöjärjestelmän tulee täyttää. Lisäksi standardimäärittelee mm. komentotulkkien (shell) yhteisen toiminnallisuuden, sään-nölliset lausekkeet ja joukon yhteisiä komentoriviohjelmia. Käsittelemme täs-sä yhteydessä komentotulkin ja säännölliset lausekkeet sekä yleisimpiä ko-mentoriviapuohjelmia. Jos jokin komento tai apuohjelma ei kuulu POSIX-standardiin, tästä mainitaan erikseen. Joistakin yleisimmistä C-funktioistamainitaan nimi ja toiminto yleissivistävänä lisätietona, joka ei kuitenkaankuulu kurssin ydinalueeseen.

POSIX-standardin merkitys on se, että POSIXin määrittelemiä rajapin-toja ja apuohjelmia käyttäen kirjoitettu ohjelma on mahdollista ajaa kai-killa POSIX-yhteensopivilla alustoilla. Tämä merkitys korostuu Unix-suvunulkopuolelle, sillä käytännössä kaikille muillekin käyttöjärjestelmille on ole-massa lisäominaisuutena asennettava POSIX-tuki. Esimerkiksi MicrosoftinVista-käyttöjärjestelmässä ja Server 2003 ja 2008 -käyttöjärjestelmissä onSubsystem for Unix-based Applications (SUA), jotka mahdollistavat POSIX-yhteensopivien ohjelmien ajamisen.

”Write once, deploy everywhere” on yksi tietotekniikan suurista haasteis-ta, johon POSIX-standardi tarjoaa varsin hyvät mahdollisuudet. Toinen lä-hestymistapa on virtuaalikoneen toteutus eri alustoille, kuten Javassa.

7.2 The Unix Programmer’s Manual manYleisin ja tarpeellisin käsky niin uudelle käyttäjälle kuin kokeneelle konka-rillekin ovat niin sanotut man-sivut (man pages). The Unix Programmer’sManual oli Dennis Ritchien ja Ken Thompsonin vuonna 1971 kirjoittamapaperinen ohjelmointiopas. Hyvin pian oppaan sisältöä alettiin tarjota myössähköisenä, jos toki vielä 80-luvulla paperisen kirjan selaaminen saattoi ollapaljonkin nopeampaa ja kätevämpää.

Ohjekirja jaetaan perinteisesti johdantoon ja kahdeksaan numeroituunosaan, joiden järjestys on yleensä taulukossa 7.1 kuvattu. Osien keskinäinen

Page 100: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 7. POSIX JA SHELL 93

osa sisältö0 johdanto1 yleiset komennot2 järjestelmäkutsut3 C-kirjastokutsut4 lisläitteet ja ajurit5 tiedostoformaatit6 pelit7 muut aiheet8 järjestelmän ylläpito

Taulukko 7.1: Unixin manuaalin rakenne

järjestys vaihtelee jonkin verran alustasta toiseen. On mahdollista että sa-masta aiheesta on olemassa tietoa useammassa osassa, jolloin osan numeroajoutuu käyttämään.

man-käskyn käyttö on yksinkertaisimmillaan

$ man kasky

Käytännössä jokaisesta komentorivityökalusta (myös POSIX-standardiinkuulumattomasta) on olemassa man-sivu. Sivujen formaatti puolestaan onstandardoitu POSIXissa helppolukuisuuden ja yhtenäisyyden nimissä.

man-sivujen käytöstä saa lisää tietoa komennolla.

$ man man

7.3 KomentotulkkiKomentotulkin (shell) symboli on yleisesti $. POSIX-standardin kuvaamaBourne shell (sh) -komentotulkki näyttää käynnistyessään terminaaliin ko-mentokehotteena (prompt) pelkästään merkin $ ja vilkkuvan kursorin. Ko-mentotulkkia käytetään kirjoittamalla sille komentoja, jotka se suorittaa jajoiden aikaansaaman tulosteen se (ehkä) näyttää käyttäjälle. Monet ohjel-mointikielet, kuten Perl, Python tai Scheme tarjoavat myös komentotulkinkielen interaktiivista syöttämistä ja tulkitsemista varten. Tällaisia kieliä kut-sutaan yleisesti tulkatuiksi ohjelmointikieliksi.

Bourne shell on standardisoitu ja saatavilla kaikista Unix-toteutuksista,mutta sen käyttäminen on varsin kömpelöä. Standardisointi on suoritettu hel-pohkoa toteuttamista ajatellen eikä suinkaan käytettävyysaspektista lähtien.

Page 101: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 7. POSIX JA SHELL 94

Tämän takia päivittäisessä käytössä usein käytetään jotain toista, käytet-tävämpää komentotulkkia. BSD-järjestelmissä oletusshell on C Shell (tcsh),kun taas Debian-distribuutiossa ja sen päälle rakennetussa Ubuntussa oletuson Bourne Again Shell (bash) ja TKK:n IT-palvelukeskuksen tämänhetkinenuusille käyttäjille asetettava komentotulkki on Z Shell (zsh).

Komentotulkille annettavat komennot esitetään standardoidulla syntak-silla:

komento [−a ] [−b|−c ] [−d argumentti ] \[−e [ argumentti ] ] operandi1 [ operandi2 ]

Missä komento on jonkin apuohjelman nimi. ”-a” on valitsin tai vipu (op-tion, flag) joka kommunikoi ohjelmalle miten sen tulee toimia. Hakasulkeet”[]” tarkoittavat sitä, että niiden sisällä oleva parametri on valinnainen. Pys-tyviiva ”|” tarkoittaa, että sen erottamat vivut ovat toisensa poissulkevia.Esimerkiksi listan voi järjestää vain nousevaan tai laskevaan järjestykseen, eimolempiin. Vivun -d yhteydessä on pakko antaa argumentti, mutta vivun -etapauksessa se on vapaaehtoista. operandi1 on pakollinen, mutta operandi 2ei. Kenoviiva \mahdollistaa yhden komennon jakamisen usealle riville.

7.4 YmpäristömuuttujatKäyttäjän antamien komentojen lisäksi komentotulkilla on muistissa jouk-ko muuttujia, joita se käyttää komentoja tulkitessaan. Muuttujat ladataanmuistiin kun komentotulkki käynnistetään ja osa niiden tiedosta periytyykomentotulkin käynnistämille ohjelmille. Tulkki lukee käynnistyessään jou-kon tiedostoja, jotka vaihtelevat tulkista riippuen (sh lukee käyttäjän ko-tihakemistosta .profile-tiedoston). Lisäksi on olemassa järjestelmänlaajuisiaoletusarvoja, jotka luetaan ja jotka käyttäjä voi omassa asetustiedostossaansyrjäyttää.

Näitä muuttujia kutsutaan ympäristömuuttujiksi. Kaikki ympäristö-muuttujat on mahdollista nähdä env -apuohjelmalla. Yleisiä ympäristömuut-tujia ovat:

• PATH, merkkijono joka sisältää kaikki ne hakemistot, joista komento-tulkki etsii ajettavaa tiedostoa

• SHELL käyttäjän oletuskomentotulkki

• HOME käyttäjän kotihakemiston juuri

• LANG käyttäjän oletuskieli

Page 102: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 7. POSIX JA SHELL 95

• LC_-alkuiset muuttujat sisältävät tietoa käyttäjän lokaaliasetuksista(desimaalierotin, päivämääräformaatti, oletusrahayksikkö jne)

• PWD sisältää työhakemiston eli hakemiston, jossa ”käyttäjä on”(useimmat tulkit näyttävät työhakemiston osoitteen komentorivillä)

• LOGNAME sisältää käyttäjän sisäänkirjautuessa antaman käyttäjä-tunnuksen

Esimerkiksi käyttäjän näennäinen liikkuminen hakemistorakenteessa toteu-tetaan PWD-muuttujan avulla, jota cd (change directory) käsky muok-kaa. PWD-muuttujan arvon voi lukea pwd (print working directory)-apuohjelmalla.

Ympäristömuuttujat ovat aivan tavanomaisia muuttujia. Niihin (ja mui-hin muuttujiin) viitataan laittamalla dollarimerkki $ muuttujannimen eteen,jotta komentotulkki ymmärtää että kyseessä on muuttuja eikä normaali ko-mento.

7.5 Säännölliset lausekkeetSäännöllisiä lausekkeita käytetään esittämään halutunlaisia merkkijonoja taimerkkien muodostamia tiettyjen rajoitteiden puitteissa säännöllisiä merkki-jonoja. Esimerkiksi suomenkielisen sanan yksikkömuodon eri taivutuspäät-teet voi esittää säännöllisellä lausekkeellaauto(|n|a|na|ksi|ssa|sta|oon|olla|lta|tta|oineen|oin). Kun lauseke kuvaa tietynmerkkijonon, sanotaan että merkkijono täsmää lausekkeen kanssa.

Edellisestä esimerkistä huomataan, että säännölliset lausekkeet eivätole ilmaisuvoimaltaan esimerkiksi luonnollisen kielen tasolla. Säännöllistenlausekkeiden etu on kuitenkin siinä, että niillä ilmaistujen merkkijonojen taimerkkijonoaihioiden etsiminen tekstistä skaalautuu lineaarisesti. 1.

POSIX-standardi määrittelee formaatin säännöllisten lauseiden esittä-miselle. Esimerkiksi apuohjelma grep etsii syötteestään tiettyä säännöllistälauseketta ja tulostaa kaikki rivit, joilta lauseke löytyy.

Komento

cat f i l e . txt | \egrep "auto ( | n | a | na | k s i | s sa | s ta | oon | o l l a | l t a | t ta | o ineen | o in ) "

tulostaa tiedoston file.txt sisällön grep in syötevirtaan, josta grep etsii sananauto taivutusmuotoja.

1Säännöllisten lausekkeiden teho perustuu siihen, että ne voidaan esittää äärellisinäautomaatteina. Automaateista lisää Tietojenkäsittelyteorian perusteet -kurssilla

Page 103: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 7. POSIX JA SHELL 96

POSIX-standardi määrittelee kahdenlaisia säännöllisiä lausekkeita yksin-kertaiset säännölliset lausekkeet Basic Regular Expressions (BRE) ja laajen-netut säännölliset lausekkeet Extended Regular Expressions .

7.5.1 Yksinkertaiset säännölliset lausekkeet (BRE)

Yksinkertaiset säännölliset lausekkeet on tarkoitettu pieniin tehtäviin. Jo-kainen merkki BRE-lausekkeessa on oletusarvoisesti merkki itse. Poislukienseuraavat merkit:

• [ ] -sulkeiden sisällä olevista merkeistä mikä tahansa täsmää. Sulkeidensisällä voi myös ilmaista merkkivälin viivalla. Esimerkiksi [abcd] ja [a-d] ovat sama asia ja sopivat yksittäiseen pienellä kirjoitettuun merkkiina:sta d:hen.

• muoto [^] tarkoittaa mitä tahansa merkkiä joka ei ole sulkeiden sisällä,esimerkiksi [^abcd] täsmää mihin tahansa merkkiin joka ei ole pieni a,b c tai d

• ∗ tarkoittaa nollaa tai useampaa edellisen symbolin yhdistelmää, esi-merkiksi lausekkeeseen ”ab*” täsmäävät merkkijonot ”a”, ”ab”, ”abb”,”abbb” jne.

• . täsmää tismalleen yhteen mihin tahansa merkkiin

• teksti \( ja \) -merkkien välillä tulkitaan alilausekkeeksi, esimerkiksi\(ab\)∗-lausekkeeseen täsmäävät ” ”, ”ab”, ”abab”, ”ababab” jne.

• $ tarkoittaa merkkijonon tai rivin loppua, ”ab$”-lausekkeeseen täsmää-vätkaikki merkkijonot tai rivit joiden viimeiset merkit ovat ab

• ^ tarkoittaa rivin alkua ja toimii kuten edellinen rivin loppu

• \{m, n\} sopii edeltävään ilmaukseen vähintään m, enintään n ker-taa. esimerkiksi ”(ab){2,3}” täsmäävät merkkijonot ”abab” ja ”ababab”muttei ”ab” tai ”abababab”

\-merkki on ns. tilanvaihtosekvenssi tai poistumismerkki, (escape sequence),joka aiheuttaa sen, että merkkiä ei tulkitakaan siten kun se tulkittaisiin nor-maalisti. Esimerkiksi jos tekstistä halutaan hakea hakasulkeita, tulee mer-kit poistua ”\[ \]” jotta niitä ei tulkittaisi hakasuljeilmaisuksi. Vastaavastimiinus-merkin voi poistua hakasuljelausekkeen sisällä, jos haluaa että yksimerkeistä on miinusmerkki eikä merkkivälin kuvaamiseksi ”[a\-d]” sopii yh-teen merkeistä ”a”, ”-” ja ”d”.

Page 104: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 7. POSIX JA SHELL 97

7.5.2 Laajennetut säännölliset lausekkeet (ERE)

BRE-kohdan viimeinen esimerkki kuvastaa yhtä puutetta BRE-lausekkeissa.Vaatimus siitä, että sulkeet tulee poistua joka kerta kun tehdään monimutkai-sempia yhdistelmäilmauksia on ikävä. Siksi laajennetussa ERE-syntaksissa() ja {}-sulkeet tulkitaan päinvastoin kuin BRE-syntaksissa. Lisäksi ERE-syntaksiin on lisätty seuraavat ilmaukset

• ? täsmää edelliseen ilmaukseen 0 tai 1 kertaa

• + täsmää edelliseen ilmaukseen 1 tai useamman kerran

• | yhdistää vaihtoehtoja yhdistelmälausekkeessa, esimerkiksi alkuesi-merkkimme auto-sanan päätteet.

grep ohjelman tulkitsee syötteensä ERE-muotoisena lausekkeena jos silleannetaan parametri -E tai se käynnistetään aliaksella egrep.

7.5.3 Perl ja Python

Perl-ohjelmointikielellä on oma syntaksinsa säännöllisten lausekkeiden kä-sittelyyn. Se on ilmaisuvoimaisempi kuin POSIX-variantit, mutta ei kuu-lu standardiin. Perl-tulkki on kuitenkin mahdollista saada kaikille POSIX-yhteensopiville alustoille, joten jos aikoo tehdä järeämpää tekstinkäsittelyä,kannattaa tutustua Perliin.

Perl on myös tunnettu siitä, että se tukee erittäin monenlaisia ohjelmoin-titapoja ja että sillä kirjoitettu koodi on ”write only” eli siitä ei jälkikäteenole helppoa saada selvää.

Myös Python tukee säännöllisiä lausekkeita, mutta sen syntaksi pakottaakirjoittamaan luettavaa koodia. Python on myös suunniteltu alusta lähtienolio-orientoituneeksi ja sillä on paljon helpompi kirjoittaa modulaarista, yl-läpidettävää koodia.

7.6 POSIX-apuohjelmatSeuraavassa esitellään joukko POSIXin määrittelemiä apuohjelmia ja jois-sain tapauksissa joissa apuohjelmaa ei ole, C-ohjelmointirajapinnan kutsut.Esittelyt on jaoteltu käyttöjärjestelmäosa-alueittain aikaisemmilla luennoillasyntyneen jaottelun perusteella.

Page 105: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 7. POSIX JA SHELL 98

7.6.1 Putket

Nimettömän putken yhteydessä tuli jo esiteltyä, kuinka sellainen luodaan ko-mentotulkissa. Putkimerkillä ”|” voi luoda putken kahden prosessin tulosteenja syötteen välille, vasemmalta oikealle.

$ cat f i l e . txt | l e s s

Nimetyn putken voi luoda mkfifo-komennolla.

$ mkf i fo putk i$ cat putki

Ja samaan aikaan toisessa komentotulkissa

echo "moi" > putki

tulostaa ruudulle ensimmäisessä kehotteessa sanan ”moi”.

7.6.2 Prosessinhallinta

C-rajapinnan funktio excecve(ohjelma, argv[] envp[]) suorittaa ohjelma-merkkijonon osoittaman ohjelman. Komentotulkki kutsuu tätä komentoa,kun käyttäjä antaa sille parametrina tiedoston nimen.

Jotta alkuperäistä komentotulkkia ei korvattaisi ajettavalla ohjelmal-la, komentotulkki käyttää fork()-funktiota haarauttamaan itsestään kopion.fork() luo ajossa olevasta prosessista identtisen kopion ja kopioi alkuperäisenprosessin muistialueen uudelle alueelle virtuaalimuistiin. Ainoa ero prosessienvälillä on se, että lapsiprosessi saa fork()-kutsun paluuarvona arvon 0, kuntaas emoprosessi saa lapsiprosessin prosessinumeron. Tämän avulla prosessivoi tietää olevansa lapsiprosessi tai emoprosessi.

Kun käyttäjä antaa komennon, komentotulkki haarauttaa itsensä ja lap-siprosessi tunnistaa olevansa lapsiprosessi ja kutsuu execve()-funktiota. Mi-käli komento on monimutkaisempi, komentotulkki tekee itsestään useampiahaaroja ja rakentaa näiden välille putkia tai muuta tarvittavaa.

Ensin tulkki etsii PATH-muuttujasta ensimmäisen tiedoston, jonka nimion sama kuin komennon nimi. Sen jälkeen se kutsuu excecve()-funktiota jaantaa parametreina tiedoston nimen ja komennon mahdolliset parametritargv[]-taulukossa ja ympäristömuuttujat envp[]-taulukossa.

Lapsiprosessin ollessa ajossa emoprosessi kutsuu waitpid()-funktiotaodottaakseen kunnes lapsiprosessi loppuu. Lapsiprosessi taas voi lopettaa it-sensä kutsumalla exit(status)-funktiota. Parametrina annettu status kertoosiitä, miten suoritus päättyi. Yleinen konventio on ilmaista virhetilaa arvolla-1.

Page 106: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 7. POSIX JA SHELL 99

. . .i n t pid = fo rk ( ) ;i f ( pid != 0){

// o len l a p s i p r o s e s s i , p i taa tehda j o t a i n}

else {// o len emoproses s ii n t e x i t s t a t u s = waitp id ( pid ) ;}

Usean rinnakkaisen prosessin tapauksessa tietty prosessi voidaan lopet-taa kill (pid)-funktiolla tai kill -apuohjelmalla, joka lähettää lopetuskäskynkyseiselle prosessille prosessinumeron perusteella käyttöjärjestelmän kautta.

7.6.3 Tiedostonhallinta

Tiedostojen avaamiseen on funktio kahva = open(tiedosto, kuinka), sekä sul-kemiseen close (kahva). Ensiksimainitulle voi antaa parametriksi avataankotiedosto kirjoitusta vai lukua varten vaiko kenties molempia. Open-funktiopalauttaa kahvan (file descriptor), joka on kokonaisluku ja jolla samaan avat-tuun tiedostoon voi viitata myöhemmin ohjelmassa. Kahva viittaa paitsi tie-dostoon, myös tiettyyn paikkaan tiedoston sisällä eli se on osoitin tiedostonsisällä. Tiedoston avaamisen jälkeen kahva viittaa tiedoston ensimmäiseenmerkkiin.

Tiedostosta voi lukea n bittiä valmiiksi varatulle muistialueelle eli pus-kuriin read(kahva, puskuri, n) ja sinne voi kirjoittaa puskurista funktiollawrite(kahva, puskuri, n). Funktio lseek (...) siirtää osoitinta, jotta tiedos-toa voi käsitellä vapaavalintaisesta kohdasta.

Komentotulkkia käytettäessä tiedostojen avaamisesta ja sulkemisesta eiyksinkertaisimmassa tapauksessa tarvitse huolehtia. Merkki < lukee sen oi-kealla puolella olevan merkkijonon osoittaman tiedoston ja antaa sen syöt-teenä merkin vasemmalla puolella olevalle ohjelmalle.

l e s s < t i e d o s t o . txt

Vastaavasti merkki > kirjoittaa sen oikealla puolella annetun nimen mu-kaiseen tiedostoon sen vasemmalla puolella olevan komennon standarditulos-tevirran. Yksi nuoli tuhoaa olemassaolevan tiedoston, kun taas >> kirjoittaaolemassaolevan tiedoston loppuun. Jos tiedostoa ei ole, se luodaan. Virhevies-tivirran voi ohjata tiedostoon 2 > -komennolla. Numero ohjausmerkin tai -merkkien edessä on kahva erityiseen tiedostoon, joka on virhevirta (virrathanesitettiin Unixeissa tiedostoina). Syötteen numero on 0 ja standarditulosteen1, mutta ne oletetaan yksinkertaisimmissa komennoissa.

Page 107: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 7. POSIX JA SHELL 100

Numerot 3-9 on varattu käyttäjän avaamia tiedostokahvoja varten. Kahvaavataan esimerkiksi komennolla

exec 3>foo . txt

joka avaa tiedoston foo.txt kirjoittamista varten kahvaan 32. Tämän jälkeentiedostoon voi kirjoittaa

Erityismuoto

grep foo < t i e d o s t o . txt > tu l o s t e . txt

Lukee tiedosto.txt:n grep-apuohjelman syötevirtaan ja ohjaa komennon tu-losteen tuloste.txt-tiedostoon.

Avatut kahvat suljetaan komennoilla

0<&− # su l k e e s t d i n i n2>&− # su l k e e s t d e r r i n

Tiedostojen oikeuksia voi muuttaa chmod -apuohjelmalla. Tiedoston tie-dot taas voi lukea ls-apuohjelmalla, joka lukee tiedostojärjestelmien yhtey-dessä esitellyn inoden sisällön.

Tyhjän tiedoston voi luoda touch-apuohjelmalla. Käsky myös muuttaatiedoston muokkausajankohdan käskyn antohetkeen. rm poistaa tiedoston,rm −f pakottaa poiston ja rm −rf poistaa rekursiivisesti ensin hakemistossaolevat tiedostot ja alihakemistot ja lopulta hakemiston (erittäin vaarallista!).

7.6.4 Tiedostojärjestelmä ja lisälaitteet

Tiedostojärjestelmän muokkaamiseen käytettävistä apuohjelmista ja vastaa-vista rajapintakutsuista mkdir (make directory) ja mkdir(nimi, moodi) luo-vat alihakemiston jonkin hakemiston hakemistotauluun ja vastaavan tyhjänalihakemistotiedoston. rmdir ja rmdir(nimi) vastaavasti poistaa alihakemis-totiedoston ja sen tietueen hakemistotaulusta. On yleensä virhe yrittää pois-taa hakemistoa, joka ei ole tyhjä.

Linkkejä luodaan apuohjelmalla link . Apuohjelma luo automaattisesti ko-via linkkejä tiedostojärjestelmään, mutta osaa myös tehdä symbolisia link-kejä -s vivulla. Linkin voi poistaa apuohjelmalla unlink .

Apuohjelma ls tulostaa kaikkien hakemistossa olevien tiedostojen inodeis-ta tietoa, jos sen parametrina annetaan tiedosto tyyppiä ”hakemisto”.

2Käsky joudutaan suorittamaan exec-komennolla koska komentorivikäsky ei saa alkaanumerolla

Page 108: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 7. POSIX JA SHELL 101

df tulostaa kaikkien koneeseen liitettyjen tiedostojärjestelmien koot javapaan tilan määrän. du puolestaan käy läpi sille parametrina annetun ha-kemiston kaikki alihakemistot ja laskee hakemiston ja sen alihakemistojenviemän levytilan.

Tiedostojärjestelmässä on erityisiä tiedostoviittauksia. Piste ”.” viittaaaina työhakemistoon (jonka voi nähdä pwd -komennolla). Tilde ~ viittaakäyttäjän kotihakemistoon (näet sen komennolla echo $HOME). Tilde jakäyttäjänimi ”~tteekkar” viittaa käyttäjän tteekkar kotihakemistoon.

POSIXiin kuulumaton mutta silti yleinen mount -apuohjelma asentaa(engl. mount) uuden tiedostojärjestelmän osaksi olemassaolevaa tiettyynasennuspisteeseen (mount point). Tämän jälkeen kyseiseen tiedostojärjestel-mään on mahdollista navigoida juuresta ja sitä voi käyttää. mount tarvit-see yleensä tiedon siitä, minkälainen tiedostojärjestelmä on kyseessä, ja sillevoi antaa parametreja, kuten että tiedostojärjestelmä asennetaan vain luet-tavaksi, jolloin kirjoittaminen on mahdotonta. unmount poistaa asennuksentiedostojärjestelmästä.

7.6.5 Tekstinkäsittely

cat lukee sille parametrina annetut tiedostot ja tulostaa ne järjestyksessästandarditulosteeseen.

more (modernimmissa toteutuksissa usein less) ottaa standardisyöttes-sä vastaan tietoa ja tulostaa sitä sivu kerrallaan kun käyttäjä pyytää lisääluettavaa.

tail ottaa sisäänsä standardisyötettä ja tulostaa siitä viimeiset merkit tairivit, riippuen parametreista.

sort järjestää syötteenään saamansa rivit aakkosjärjestykseen.wc (word count) laskee syötteestään rivit, sanat ja merkit.diff vertaa kahta tiedostoa keskenään ja tulostaa niiden väliset erot.awk on yleiskäyttöinen työkalu, jota ohjelmoidaan samannimisellä ohjel-

mointikielellä. Sitä käytetään yleisesti esimerkiksi tekstin muokkaamiseen, jasillä voi esimerkiksi muokata kaikkia tiedostossa olevia rivinvaihtomerkkejä.

#muutetaan DOS−r i v i n v a i h d o t UNIX−r i v i n v a i h d o i k s iawk ’{ sub (/\ r$ / , "" ) ; p r i n t } ’ d o s f i l e . txt > u n i x f i l e . txt#UNIX−>DOSawk ’{ sub (/ $ / , "\ r " ) ; p r i n t } ’ u n i x f i l e . txt > d o s f i l e . txt

Page 109: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 7. POSIX JA SHELL 102

7.7 SkriptitKomentotulkkien vahvuus piilee siinä, että niitä voi skriptata eli niiden käs-kyjä voi ketjuttaa tiedostoon ja kyseisen tiedoston voi ajaa.

Kaikkien hyvinmuodostettujen skriptitiedostojen tulee alkaa rivillä, jo-ka alkaa kommenttimerkillä #, huutomerkillä ja käytettävän komento-tulkin osoitteen hakemistorakenteessa (tulkit sijaitsevat yleensä /bin/-hakemistossa), esimerkiksi #!/bin/sh.

Tämän jälkeen jokainen alkava rivi tulkitaan komennoksi. Risuaitamerkki# tulkitaan siten, että sen jälkeen oleva osa rivistä tulkitaan kommentiksieikä sitä yritetä ajaa.

Samalle riville on mahdollista laittaa useampia komentoja, jolloin ne tuleeerotella puolipisteellä tai muulla merkillä. Komentoja on mahdollista ajaa ali-komentotulkissa, jolloin ne ryhmitellään tavallisten sulkeiden sisälle (komen-to1; komento2;). Alikomentotulkissa tehdyt muuttujien esittelyt tai muutok-set eivät vaikuta muun skriptin käyttämiin muuttujiin. Jos taas komentojahalutaan ajaa siten, että niiden vaikutukset näkyvät, käytetään aaltosulkei-ta komento1;komento2;. Näitä useamman käskyn yhdistelmiä kutsutaan yh-distelmälistoiksi (compound list). Ehtolauseista voi tehdä yhdistelmälistantutuilla and (&&) ja or (||) -operaattoreilla.

Komentotulkki tarjoaa myös riittävät vuonohjauskäskyt. Ehtolauseetpäätetään ehtolauseen aloittavalla merkkijonolla.

#case−eh t o l au s ecase haettava

(hahmo1) yhd i s t e lma l i s t a ; ;(hahmo2 | hahmo3) yhd i s t e lma l i s t a ; ;

e sac#i f−e l i f −e l s e −eh to lauserakennei f yhd i s t e lma l i s t a then

yhd i s t e lma l i s t a[ e l i f y hd i s t e lma l i s t a then yhd i s t e lma l i s t a ]

. . .[ else

yhd i s t e lma l i s t a ]f i

Toistolauseista for suorittaa tietyn komennon kaikille parametrina annet-tavan listan jäsenille. Se siis toimii kuin javan iteroiva for. Vastaava konstruk-tio tunnetaan joissain kielissä myös foreach-nimellä. for-lauseen varsinainentoteutettava osa aloitetaan sanalla do ja lopetetaan sanalla done.

#foreach

Page 110: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LUKU 7. POSIX JA SHELL 103

for a l k i o [ in l i s t a ] doyhd i s t e lma l i s t a

done

Lisäksi kielessä on olemassa kaksi toistolausetta, while ja until, jotka ovatkeskenään melkein identtisiä.

#whi l e t a i un t i l , s y n t a k s i i d en t t i n enwhile yhd i s t e lma l i s t a −1 do

yhd i s t e lma l i s t a −2done

Kumpikin aloittaa tarkastamalla yhdistelmälista-1:n paluuarvon. Whilelopettaa, jos arvo on jokin muu kuin nolla. Until lopettaa, jos arvo on nol-la. Kumpikin suorittaa vuorotellen yhdistelmälista-2:n käskyt ja tarkastaayhdistelmälista-1:n arvon kunnes arvo on sellainen, että toisto lopetetaan.

Page 111: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Liite A

Liitteet

Tässä on lyhyesti selitetty käsitteitä, joita sivutaan usein muualla luentomo-nisteessa, mutta jotka eivät varsinaisesti kuulu tämän kurssin aihealueeseen.Turingin koneita ja automaatteja käsitellään kurssilla T-79.1001 ja tietora-kenteita kurssilla T-106.1220. Nämä ovat tietotekniikan koulutusohjelmassapakollisia, joten niitä voi yrittää käyttää apuna top-down -hahmottamaantulevia opintoja. Lisätietoja Turingin koneista voi lukea esimerkiksi SipserinIntroduction to the Theory of Computation [5]. Tietorakenteisiin voi syven-tyä TKK:n kurssin verkko-opetusmateriaalin [4] avulla.

A.1 Turingin koneLuennoilla usein viitattu Turingin kone on kuvitteellinen symbolienmanipu-lointilaite, jonka pohjalle Alan Turing pohjasi tärkeitä todistuksia erilaistenongelmien ratkeavuduesta mekaanisella laskutoimituksilla. Turingin kone onuniversaali laskentamalli, jolla pystytään niinsanotun Church-Turingin teesinmukaan suorittamaan kaikki mekaanisesti ratkeavat laskutoimitukset. Me-kaanisesti ratkeavuutta ei ole hyvin määritelty, joten Church-Turingin teesiäon mahdotonta todistaa.

Church-Turingin teesin mukaan Turingin kone ja muut mekaaniset lasken-tamallit, kuten Churchin kehittämä lambda-kalkyyli sekä Gödelin-Kleenenrekursiivisesti määritellyt funktiot ovat ekvivalentteja eli niillä pystytäänratkaisemaan sama joukko ongelmia. Kaikki modernit ohjelmointikielet ovatmyös tietokoneiden aiheuttamien rajoitusten puitteissa ns. Turing-täydellisiäeli niillä voidaan ratkaista samat ongelmat kuin Turingin koneella.

Turingin koneet ovat tärkeitä kahdesta syystä: niillä voidaan todistaatiettyjen ongelmien ratkeamattomuus ja niillä voidaan todistaa jonkin tietynongelman kuuluminen tiettyyn laskennan kompleksisuusluokkaan. Komplek-

104

Page 112: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LIITE A. LIITTEET 105

sisuusluokka P tarkoittaa ongelmia, jotka voidaan ratkaista Turingin koneellasyötteen pituuteen nähden polynomina ilmaistavalla määrällä operaatioita.Luokka NP kuvaa ongelmia, joiden ratkaisemiseen polynomisessa ajassa tar-vitaan epädeterministinen Turingin kone (suomeksi täytyisi nähdä tulevai-suuteen). Kuuluisin NP-täydellinen ongelma on kauppamatkustajan ongel-ma, jossa kauppamatkustajan pitää valita lyhin reitti joka käy n eri kaupun-gissa. Paras tunnettu ratkaisu O(2n) laskutoimitusta ratkaisemiseksi.

Populaaritieteessä käsitellään usein P?=NP-ongelmaa eli kysymystä siitä,onko NP-luokan ongelma mahdollista muuttaa P-luokan ongelmaksi (polyno-misessa ajassa). Tämän todistamisesta suuntaan tai toiseen saa Millenium-palkinnon ja miljoona US dollaria rahaa.

Tilarekisteri

q1 q2 q3 q4 q0

Lukupää

Tilasiirtymätaulu

Tila Symboli Symbolioperaatio Nauhaoperaatio Tilaoperaatio

q1 0 1 R q1

q2 0 Poista L q2

q1 1 0 R q3

q1 < 0 R q1

Nauha

> 1 0 1 0 1 1 0 < ...

Kuva A.1: Turingin kone

Turingin kone koostuu viidestä osasta. Siinä on oikeasta päästä loppu-maton nauha, joka sisältää symboleita. Nauhalta symboleita lukee lukupää,joka voi lukea, poistaa tai kirjoittaa symboleita sekä siirtyä nauhalla yhdenaskeleen vasemmalle tai oikealle (tai olla paikallaan). Koneella voi olla ää-rellinen määrä erilaisia tiloja (merkitään yleensä q0, q1). Lisäksi koneeseenkuuluu tilansiirtotaulukko, joka sisältää tiedon asioista, joita kone tekee kunse lukee tietyn symbolin nauhalta ja on tietyssä tilassa.

Symbolistossa täytyy olla kaksi erityistä symbolia, nauhan alku- ja lop-pusymbolit. Loppusymbolin voi poistaa ja sen jälkeen kirjoittaa, koska nauhaon oikeasta päästä loppumaton. Alkupään symbolia ei voi poistaa.

Koneella tulee olla yksi, yksikäsitteinen alkutila, jossa se on kun se lukeeensimmäisen merkin nauhalta. Tiloista yksi tai useampi voi olla hyväksyviä.

Page 113: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LIITE A. LIITTEET 106

Turingin koneella ratkaistavat ongelmat ovat muotoa "päätyykö tällaisellasyötteellä ja tilanvaihtotaulukolla varustettu Turingin kone hyväksyvään ti-laan vai ei?".

Yksi suurimmista ongelmista on kysymys siitä, pääseekö Turingin koneensuoritus koskaan loppuun, eli jääkö se johonkin tilaan vai jääkö se ikuiseensuoritussilmukkaan. Tämä ongelma on osoitettu mahdottomaksi ratkaistayleisessä tapauksessa, ja sen seurauksena ohjelmakoodista on mahdotontamekaanisesti päätellä jääkö se ikuiseen silmukkaan jollain syötteellä. Samantodistuksen avulla voidaan todistaa, että on yleisessä tapauksessa mahdo-tonta päätellä ohjelmakoodista onko se haitallista (vaikka haitallisuus olisi-kin mahdollista määritellä yksikäsitteisesti!). Tästä syystä virustorjuntaoh-jelmistoja valmistavien ohjelmistotalojen tulevaisuus näyttää erittäin vakaal-ta.

A.2 Pino ja JonoTietotekniikassa erittäin usein käytettyjä tietorakenteita ovat pino (stack) jajono (queue). Ne ovat abstrakteja tietotyyppejä, joiden nimi kertoo niidentoimintaperiaatteen. Tietorakenteisiin voi tallentaa mitä tahansa objektejatai tietueita (yleisesti alkioita), ja niille on määritetty tietyt perusoperaatiot,joiden avulla niitä voi käydä läpi.

Pino tunnetaan myös Last In First Out eli LIFO-tietorakenteena. Pinolleon määritetty operaatiot

• create luo uuden pinorakenteen

• empty palayttaa totuusarvon joka kertoo onko pino tyhjä

• push työntää pinoon päälle alkion

• pop poistaa pinon päällimmäisen alkion ja palauttaa viittauksen siihen

Usein on määritelty myös operaatio peek joka palauttaa viittauksen pääl-limmäiseen alkioon poistamatta sitä, mutta se ei ole välttämätön koska sevoidaan toteuttaa tarvittaessa korkeammalla tasolla.

Jono taas tunnetaan First In First Out eli FIFO-tietorakenteena. Sille onmääritelty operaatiot

• create

• empty

• enqueue lisää alkion jonon viimeiseksi

Page 114: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

LIITE A. LIITTEET 107

• dequeue poistaa jonon ensimmäisen alkion ja palauttaa sen

i1

5

Sisään

i2

i3

5

Sisään

i4

Ulos

i5

1

2

3

44

3

2

1

Ulos

Kuva A.2: Sinisellä jono, punaisella pino

Jono-tietotyypille ei yleensä tarvitse erillistä muistisääntöä. Kaikki jo-nottamaan joutuneet ihmiset kyllä ymmärtävät miten jono toimii. Pino-rakenteen mieleenpainamiseen auttaa ajatella opiskelijaruokaloiden lautas-kärryjä, joista voi ottaa päällimmäisen lautasen ja joihin voi laittaa päällelautasia. Molemmat tietorakenteet on visualisoitu kuvaan A.2.

Page 115: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Kirjallisuutta

[1] R.L. Brown, P.J. Denning, and W.F. Tichy. Advanced operating systems.Computer, 17(10):173–190, 1984.

[2] J. Korpela. Datatekniikka ja viestintä -sivusto. verkossa, haettu11.09.2009. http://www.cs.tut.fi/~jkorpela/.

[3] Signaalinkäsittelytekniikan laboratorio. Digitaalitekniikan perusteet www-oppikirja. TKK, 2006. verkossa, http://signal.hut.fi/digis/, viitat-tu 19.8.2009.

[4] L. Malmi, A. Korhonen, and Karavirta V. Tietorakenteiden elektroni-nen oppikirja. verkossa, haettu 11.09.2009. http://trakla.cs.hut.fi/ebook_fi/index.html.

[5] M. Sipser. Introduction to the Theory of Computation. PWS PublishingCompany, 1996.

[6] W. Stallings. Operating systems: internals and design principles. Decem-ber, 2000.

108

Page 116: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

Hakemisto

adder-subtractor, 32Administrator, 82aikataulutus, 87ajuri, 79ALU, katso Arithmetic Logic UnitAmdahlin laki, 86American Standard Code for Infor-

mation Interchange, 22AND, 27API, 5, 81Application Programming Interface,

katso APIArithmetic Logic Unit, 41aritmeettis-looginen yksikkö, 41ASCII, 22asiakas-palvelin malli, 81autentikaatiotietue, 83awk, 24, 101

base, 13bash, 94Basic Multilingual Plane, 26Basic Regular Expressions, 96batch operating system, 65BER, katso Bit Error RatioBig-Endian, 15binääri, 48binäärilukujärjestelmä, 14BIOS, 78Bit Error Ratio, 35bitshift, 4, 34bitti, 14black box, 2

block, 74block device, 80blocking, 60BMP, katso Basic Multilingual Pla-

neBoolen algebra, 14, 27boot loader, 78boot sector, 78bottom-up, 3BRE, katso Basic Regular Expres-

sionsbuffer, 80bug, 82bugi, 66

cache coherency, 87cache coherency protocols, 51carriage return, 24carry bit, 30CAS, 50cat, 101CBE, 5ccNUMA, 87cd, 95Central Processing Unit, 42character device, 80character encoding, 21chmod, 100CISC, 47client-server model, 81cloud computing, 7CMP, 85

109

Page 117: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

HAKEMISTO 110

Complex Instruction Set Compu-ter, katso CISC

Component Based Engineering, kat-so CBE

computation offloading, 7condition code, 44context switch, 56control stack, 56Control Unit, 42CPU, katso Central Processing UnitCR, katso carriage returnCRC, katso Cyclic Redundancy Checkcross compilation, 48CSV, 71CU, katso Control UnitCyclic Redunancy Check, 37

df, 101diff, 101DLL, 49DMA, 62DOS, 72dos2unix, 24double, 20driver, 79du, 101Dynamic Link Library, katso DLL

EDVAC, 41egrep, 97ehtokoodi, 44, 65EI, 27eksklusiivinen OR, 29eksponentti, 19Electronic Discrete Variable Auto-

matic Computer, katso ED-VAC

Electronic Numerical Integrator AndComputer, katso ENIAC

endianness, 15engineering, 1

ENIAC, 41env, 94ERE, katso Extended Regular Expres-

sionseräajojärjestelmä, 65esilataaja, 78eteläsilta, 8etumerkkibitti, 17etäproseduurikutsu, 81European Computer Manufacturers

Association (ECMA), 26excecution unit, 42exclusive OR, 29exec, 100Extended Regular Expressions, 96,

97

FAT, 74, 83hakemistotaulukko, 75klusteri, 74

file, 69file, 72File Allocation Table, 74file descriptor, 99file system, 69fixed point numbers, 19flag, 44float, 20floating point numbers, 19floating point unit, 20FPU, katso floating point unitFront Side Bus, 9full adder, 31

Galois’n kunta, 21GPL, 49graafinen käyttöliittymä, 9Graphical User Interface, katso GUIgrep, 68, 95, 97, 100grid computing, 7GUI, 9

Page 118: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

HAKEMISTO 111

hakemistohierarkia, 69hakemistorakenne, 73half adder, 30Hamming-koodi, 38Hammingin etäisyys, 38Harvardin arkkitehtuuri, 41hash functions, 36heittovaihto, 64heksadesimaalijärjestelmä, 15henkilökohtainen tietokone, 84holismi, 2hybridiydin, 90

I/O BR, 44I/O-yksikkö, 43iconv, 21IEEE, 92inode, 75insinööritiede, 1Institute of Electrical and Electro-

nics Engineers, katso IEEEInstruction Register, katso IRInstruction Set Architechture, kat-

so ISAInternet Relay Chat, 27IR, 44IRC, katso Internet Relay Chatirssi, 27ISA, 45, 63ISO LATIN 1, katso ISO-8859-1ISO LATIN 9, katso ISO-8859-15ISO-646-SF, 24ISO-8859-1, 26ISO-8859-15, 26

JA, 27jaospilkku, 19job, 65jono, 106journaling, 77juuri, 73

kahden komplementti, 18kahva, 99kaksinkertaisen tarkkuuden liuku-

luvut, 20kannanvaihto, 13kantaluku, 13kenttä, 70kernel, 64keskeytys, 53, 54kiinteän pilkun luvut, 19kill, 99kirjanpito, tietojärjestelmässä, 77kirjasto, 48kirjautumisohjelma, 82kokosummain, 31komento, 94komentokehote, 93komentotulkki, 92, 93komponenttipohjainen lähestyminen,

5kontekstin vaihto, 56koodi, 35koodiavaruus, 26koodisana, 35käskykanta-arkkitehtuuri, 40, 45, 63käskykierros, 45, 56käynnistyssektori, 78käyttäjä

kirjautuminen, 82numero, 82ryhmä, 82

käyttäjänhallinta, 81käyttäjäryhmä, 82käyttäjätila, 64käyttöjärjestelmä, 64, 85

ydin, 85kääntäjä, 48kääntäminen, 48

L1, 86less, 68, 101

Page 119: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

HAKEMISTO 112

LF, katso line feedLIFO, 106line feed, 24link, 100linkit, 78

kovat, 78symboliset, 79

linkitysdy naaminen, 49staattinen, 49tekijänoikeusaspekti, 49

lisälaite, 79ajuri, 79DMA, 80lohko, 80merkki, 80

Little-Endian, 15liukuluvut, 19logiikkakaaviot, 30login prompt, 82lohko, 74, 75, 80lokaalius, 50, 64Low Pin Count, 9LPC-väylä, 9ls, 100luku, 12lukujärjestelmä, 12

mallipohjainen lähestyminen, 5man, 92, 93man pages, 92man-sivut, katso manmantissa, 19MAR, 44Master Boot Record, 78MDE, 5Memory Address Register, katso MARMemory Management Unit, katso

MMUmerkistö, 21merkitsevin bitti, 15

mikroydin, 89mkdir, 100mkfifo, 98MMU, 63Model Driven Engineering, katso MDEmoniydinprosessori, 85monoliittinen ydin, 89more, 101mount, 101mount, 101mount point, 101muisti, 42muistibitti, 30muistihierarkia, 49, 51muistinhallintayksikkö, 63multiplekseri, 33musta laatikko, 2mux, 33

NAND, 29nibble, 15NOR, 29Northbridge, 8NOT, 27numeraali, 12

ohjauspino, 56ohjausyksikkö, 42ohjelman tilasana, 44, 65ohjelmointirajapinta, 5, 81oktaalijärjestelmä, 15oktetti, katso tavu, 75opcode, 46operaatiokoodi, 46opiskelijanumeron tarkastuskirjain,

35OR, 27osio, 78osituskäyttöjärjestelmä, 66

page, 63page fault, 64

Page 120: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

HAKEMISTO 113

page table, 63paradigma, 5pariteettibitti, 37PC, 44, 56PCI-väylä, 9Peripheral Component Interconnect,

9Perl, 97PID, 58pino, 106PIO, 60pipe, 67pipeline, 45pohjoissilta, 8polling, 60Portable Operating System Inter-

face for Unix, katso POSIXPOSIX, 92

Windowseille, 92Process ID, katso PIDProgram Counter, katso PCProgram Status Word, katso PSWprompt, 93prosessi, 53, 58

muistialue, 58oikeudet, 82tila, 58vs. ohjelma, 57

prosessinumero, 58prosessipuu, 58PSW, 44puolisummain, 30puskuri, 99puskurointi, 80putket, 67

nimetyt, 67nimeämättömät, 67

pwd, 95, 101Python, 97pääkäynnistystietue, 78pääkäyttäjä, 82

queue, 106

radix point, 19recode, 21Reduced Instruction Set Computer,

katso RISCreferenssimonitori, 84rekisteri, 34, 43relaatio, 70rinnakkaisuus, 58, 66RISC, 47ristiinkäännös, 48rm, 100rmdir, 100role, 84rooli, 84root, 73, 82RPC, 81

salt, 83sana, 14SATA-väylä, 9scheduling, 66screen, 27semafori, 58Serial ATA, 9SF-2, 24sh, 93, 94shell, 57, 92, 93shift, 34siirräntäyksikkö, 43siirto-operaatio, 34sivu, 63sivutustaulu, 63sivutusvirhekeskeytys, 64sivuvirhekeskeytys

kova, 64pehmeä, 64

skripti, 102SMP, 85sort, 101

Page 121: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

HAKEMISTO 114

Southbridge, 8stack, 106standardisyöte, 68standardituloste, 68standardivirhe, 68standardivirrat, 68stderr, 68stdin, 68stdout, 68su, 83summain-vähennin, 32suolaluku, 83suora muistisiirrossa, 60suoritin, 8, 42, 65Suoritusyksikkö, 43suoritusyksikkö, 42swap, 64Symmetric Multiprocessing, katso

SMPsymmetrinen moniprosessointi, 85systeemi, 2systeemi-integraatio, 3system, 2syöttölaite, 7säie, 87säännölliset lausekkeet

laajennetut (ERE), 97yksinkertaiset (BRE), 96

TAI, 27tail, 101tavu, 14tavujärjestys, 15tcsh, 94tiedonsiirto

DMA, 62keskeytyksillä toteutettu, 61ohjelmoitu, 60

tiedosto, 69, 70järjestelmä, 74oikeudet, 83

tyypit, 72tiedosto-oikeudet, 69tiedostojärjestelmä, 69, 74tiedoston tyyppi, 75tietokanta, 70, 74tietue, 70tiivistefunktio, 36tilanvaraustaulukko, 74tilasana, katso ohjelman tilasanatime sharing system, 66top-down, 3touch, 100työerä, 65

UID, 82Unicode, 26Universal Serial Bus, 9unix2dos, 24unlink, 100unmount, 101USB-väylä, 9user groups, 82user ID, katso UIDuserland, 64UTF-8, 26

V-malli, 3V-model, 3vaihtopituuskoodaus, 27valkoinen laatikko, 2virtuaalimuisti, 63von Neumann -arkkitehtuuri, 41vuonohjauskäskyt, 102

case, 102elif, 102else, 102foreach, 102if, 102until, 103while, 103

välimuisti, 50

Page 122: Tietokone ja käyttöjärjestelmä -luentomoniste v. 0jyrsa.iki.fi/jyrsa/static/files/opetusmoniste.pdf · Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille

HAKEMISTO 115

ccNUMA, 87yhteneväisyys, 87

väylä, 42

wc, 24, 101white box, 2

x86, 47XOR, 29, 30

ydin, 64, 65hybridi-, 90mikro-, 89monoliittinen, 89tavoitteet ja tehtävät, 88

yhden komplementti, 17yksinkertaisen tarkkuuden liukulu-

vut, 20yleismuistiin tallennettavan ohjel-

man arkkitehtuuri, katso vonNeumann -arkkitehtuuri

ylläpitäjä, 82ympäristömuuttuja, 94

zsh, 94

äärellinen kunta, katso Galois’n kun-ta