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



Samankaltaiset tiedostot
OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012

811120P Diskreetit rakenteet

Kappale 20: Kantaluvut

Luku- ja merkkikoodit. Digitaalitekniikan matematiikka Luku 12 Sivu 1 (15)

ANSI/IEEE Std

Paavo Räisänen. Ohjelmoijan binaarialgebra ja heksaluvut.

Lukujärjestelmät. Digitaalitekniikan matematiikka Luku 9 Sivu 3 (26) Lukujärjestelmät ja lukujen esittäminen Fe

Liukulukulaskenta. Pekka Hotokka

Ohjelmoijan binaarialgebra ja heksaluvut

Tiedon esitysmuodot. Luento 6 (verkkoluento 6) Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto

Ajattelemme tietokonetta yleensä läppärinä tai pöytäkoneena

Tietotekniikan valintakoe

SISÄLLYS - DIGITAALITEKNIIKKA

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto

C = P Q S = P Q + P Q = P Q. Laskutoimitukset binaariluvuilla P -- Q = P + (-Q) (-Q) P Q C in. C out

Luento 6 Tiedon esitysmuodot

Luento 6 Tiedon esitysmuodot

Ohjelmoinnin perusteet Y Python

5. Laskutoimitukset eri lukujärjestelmissä

Numeeriset menetelmät

Digitaalitekniikan matematiikka Luku 10 Sivu 1 (14) Lukujärjestelmämuunnokset. 2 s s

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Luento 6 Tiedon esitysmuodot

Luento 6 Tiedon esitysmuodot. Tiedon esitys laitteistossa (3)

Ohjelmoinnin perusteet Y Python

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Viivakoodin viiteopas

Java-kielen perusteet

Harjoitustehtäväkierros 1

Luento 6 Tiedon esitysmuodot. Lukujärjestelmät Kokonaisluvut Liukuluvut Merkit, merkkijonot Totuusarvot Kuvat, äänet, hajut(?)

Luento 6 Tiedon esitysmuodot. Tiedon esitys laitteistossa (3)

Tiedon esitysmuodot. Luento 6 (verkkoluento 6) Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto

XML prosessori. XML prosessointi. XML:n kirjoittaminen. Validoiva jäsennin. Tapahtumaohjattu käsittely. Tapahtumaohjattu käsittely.

Ohjelmointi 1. Kumppanit

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

BL40A1711 Johdanto digitaalielektroniikkaan: Johdanto ja lukujärjestelmät

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Tietokone. Tietokone ja ylläpito. Tietokone. Tietokone. Tietokone. Tietokone

Ohjelmoinnin peruskurssi Y1

Matematiikan tukikurssi

Luento 1 Tietokonejärjestelmän rakenne

Palautteita. Tutoriaalit olivat vaikeat! Totta, tentti on onneksi helpompi

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Tiedon esitys tietokoneessa. Jyry Suvilehto T Johdatus tietoliikenteeseen ja multimediatekniikkaan kevät 2010

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Ohjelmoinnin perusteet Y Python

7. Laskutoimitukset eri lukujärjestelmissä 1 / 31

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Matematiikan tukikurssi, kurssikerta 3

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Ohjelmoinnin perusteet Y Python

n! k!(n k)! n = Binomikerroin voidaan laskea pelkästään yhteenlaskun avulla käyttäen allaolevia ns. palautuskaavoja.

painos 3. FI. Nokia ja Nokia Connecting People ovat Nokia Oyj:n rekisteröityjä tavaramerkkejä.

2 Konekieli, aliohjelmat, keskeytykset

Python-ohjelmointi Harjoitus 2

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Ohjelmoinnin peruskurssi Y1

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

2.2 Neliöjuuri ja sitä koskevat laskusäännöt

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Joukot. Georg Cantor ( )

7. Näytölle tulostaminen 7.1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin?

Algoritmit 1. Luento 1 Ti Timo Männikkö

13. Loogiset operaatiot 13.1

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Yhden bitin tiedot. Binaariluvun arvon laskeminen. Koodin bittimäärä ja vaihtoehdot ? 1

Ongelma(t): Mistä loogisista lausekkeista ja niitä käytännössä toteuttavista loogisista piireistä olisi hyötyä tietojenkäsittelyssä ja tietokoneen

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

painos 1. FI. Nokia ja Nokia Connecting People ovat Nokia Oyj:n rekisteröityjä tavaramerkkejä.

4. Lausekielinen ohjelmointi 4.1

Ongelma(t): Mistä loogisista lausekkeista ja niitä käytännössä toteuttavista loogisista piireistä olisi hyötyä tietojenkäsittelyssä ja tietokoneen

5. HelloWorld-ohjelma 5.1

Merkitse kertolasku potenssin avulla ja laske sen arvo.

TIES530 TIES530. Moniprosessorijärjestelmät. Moniprosessorijärjestelmät. Miksi moniprosessorijärjestelmä?

Harjoitustyö: virtuaalikone

LAS-TIEDOSTON SISÄLTÖ LIITE 2/1

4. Lausekielinen ohjelmointi 4.1

4 Yleinen potenssifunktio ja polynomifunktio

3. Kirjoita seuraavat joukot luettelemalla niiden alkiot, jos mahdollista. Onko jokin joukoista tyhjä joukko?

Algoritmit 1. Luento 2 Ke Timo Männikkö

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Ohjelmoinnin peruskurssi Y1

Matematiikan tukikurssi

8 Joukoista. 8.1 Määritelmiä

MS-A0402 Diskreetin matematiikan perusteet

ITKP102 Ohjelmointi 1 (6 op)

Luento 4. Timo Savola. 21. huhtikuuta 2006

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Luento 6 Tiedon esitysmuodot. Tiedon esitys laitteistossa (4) Tiedon esitys (7) Suorittimen ymmärtämä tieto (9) Tietokoneen toiminta, K

Hyvän salasanan tunnusmerkit Hyökkääjästä salasanan pitää näyttää satunnaiselta merkkijonolta. Hyvän salasanan luominen: Luo mahdollisimman pitkä

Transkriptio:

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

Esipuhe Tämä luentomoniste on tarkoitettu itseopiskelumateriaaliksi kurssille T- 106.1150 Tietokone ja käyttöjärjestelmä. Moniste ei missään tapauksessa ole valmis. Korjausehdotuksia ja rakentavaa kritiikkiä otetaan mielellään vastaan. Moniste on jaettu 7 lukuun, joista jokainen käsittelee samaa aihealuetta kuin yksi kurssin T-106.1150 luennoista. Jokaisen luvun alussa on lyhyt top-down katsaus luennon sisältöön. Liite-osiossa kerrotaan pikaisesti asioita, jotka eivät välttämättä tule opinnoissa vastaan henkilöille, jotka eivät opiskele 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 kurssin keskeiset oppimistavoitteet. Joitakin syventäviä tavoitteita ei voi saavuttaa pelkästään monistetta lukemalla, vaan opiskelijalta vaaditaan omaaloitteisuutta. 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 toista kautta. Ideoita harjoitustehtävistä saa kuitenkin antaa. c 2009 Jyry Suvilehto Lisenssi: Creative Commons Nimeä-Epäkaupallinen-Tarttuva 1.0 Suomi http://creativecommons.org/licenses/by-nc-sa/1.0/fi/ i

Kiitokset Ilman Vesa Hirvisaloa, Sami Kiminkiä, Juho Äyräväistä, Marjukka Kokkosta, Jaakko Kotimäkeä ja Timo Töyryä tämä luentomoniste olisi paljon ikävämpää luettavaa. Ilman Sanna Suorantaa ja Aleksi Aaltoa monisteessa olisi paljon vähemmän pilkkuja. Kiitokset myös Axel Eirolalle, Juha Kurjoselle, Ville Immoselle, Jarno Hilveniukselle, Paav-o Leinoselle ja Tero Paloheimolle korjausehdotuksista ensimmäisen toteutuskerran perusteella. Erityiskiitos Jeff Beardille (Wikipedian käyttäjä jjbeard), jonka Public Domainiin julkaisemia SVG-kuvia logiikkaporteista käytetään luvussa 2. Kiitos myös Graphviz-työkalun kehittäjille. Kirjassa olisi huomattavasti vähemmän kuvia ja enemmän puuduttavaa tekstiä ilman kyseistä ohjelmistoa. ii

Sisältö Esipuhe Kiitokset i ii 1 Johdanto 1 1.1 Systeemit ja insinööritieteen perusteet............. 1 1.2 Systeemi ja tietotekniikka.................... 6 1.3 Modernin tietokoneen rakenne.................. 7 1.4 Käyttöjärjestelmän rakenne................... 9 2 Bitistä summaimeen 12 2.1 Lukujärjestelmät......................... 12 2.2 Binäärilukujärjestelmä...................... 14 2.3 Oktaali- ja heksadesimaalijärjestelmät............. 15 2.4 Negatiiviset luvut......................... 17 2.4.1 Etumerkkibitti...................... 17 2.4.2 Yhden komplementti................... 17 2.4.3 Kahden komplementti.................. 18 2.5 Reaalilukujen esitys tietokoneessa................ 18 2.5.1 Kiinteän pilkun luvut................... 19 2.5.2 Liukuluvut........................ 19 2.5.3 Tietokoneiden äärellisyydestä.............. 20 2.6 Merkistöt............................. 21 2.6.1 American Standard Code for Information Interchange (ASCII).......................... 22 2.6.2 ISO-8859-1 ja ISO-8859-15................ 26 2.6.3 Unicode ja UTF-8.................... 26 2.7 Boolen algebra.......................... 27 2.8 Piirisuunnittelu Boolen algebralla................ 30 2.8.1 Puolisummain....................... 30 2.8.2 Kokosummain....................... 31 iii

2.9 Virheentarkistus.......................... 35 2.9.1 Pariteettibitti....................... 37 2.9.2 Syklinen redundanssitarkastus (CRC).......... 37 2.9.3 Hammingin etäisyys ja koodaus............. 38 3 Ohjelmoitavat tietokoneet 40 3.1 Erityislaskimista ohjelmoitavaan tietokoneeseen........ 40 3.2 Von Neumann -arkkitehtuuri................... 42 3.2.1 Väylä........................... 42 3.2.2 Muisti........................... 42 3.2.3 Siirräntäyksikkö...................... 43 3.2.4 Suoritusyksikkö...................... 43 3.2.5 Käskykierros....................... 45 3.2.6 Käskykanta-arkkitehtuuri................ 45 3.3 Ohjelmien kääntäminen, kirjastot ja linkitys.......... 47 3.4 Muistihierarkia.......................... 49 3.4.1 Lokaalius......................... 50 3.4.2 Välimuisti......................... 50 3.4.3 Muistihierarkia...................... 51 4 Keskeytyksistä käyttöjärjestelmään 53 4.1 Keskeytykset........................... 54 4.2 Alkeelliset prosessit........................ 57 4.3 Tiedonsiirtotekniikat....................... 60 4.3.1 Ohjelmoitu tiedonsiirto.................. 60 4.3.2 Keskeytyksillä toteutettu tiedonsiirto.......... 61 4.3.3 Suora muistisiirto (DMA)................ 62 4.4 Virtuaalimuisti.......................... 62 4.5 Kohti käyttöjärjestelmää..................... 64 4.5.1 Ydin............................ 65 4.5.2 Käyttöjärjestelmätyypit................. 65 5 Käyttöjärjestelmän rakennuspalikat 67 5.1 Putket............................... 67 5.2 Standardivirrat.......................... 68 5.3 Tiedostot ja hakemistorakenne.................. 69 5.3.1 Tiedosto.......................... 69 5.3.2 Tiedostotyypit...................... 72 5.3.3 Hakemistorakenne..................... 73 5.4 Tiedostojärjestelmä........................ 74 5.4.1 FAT............................ 74 iv

5.4.2 Unix-tiedostojärjestelmät................. 75 5.4.3 Modernit tiedostojärjestelmät.............. 77 5.4.4 Kiintolevyn osiot..................... 78 5.4.5 Linkit........................... 78 5.5 Lisälaitteet............................ 79 5.6 Everything s a file (Unixin tiedostojärjestelmä ja lisälaitteet). 80 5.7 Asiakas-palvelin -malli (Windowsin tiedostojärjestelmä ja lisälaitteet)............................. 81 5.8 Käyttäjänhallinta......................... 81 5.8.1 Autentikaatiotietueet................... 83 5.8.2 Tiedosto-oikeudet..................... 83 6 Käyttöjärjestelmä 85 6.1 Symmetrinen moniprosessointi ja moniydinprosessointi.... 85 6.2 Säikeet............................... 87 6.3 Käyttöjärjestelmäytimien tavoitteet ja tehtävät........ 88 6.3.1 Monoliittiset ytimet................... 89 6.3.2 Mikroytimet........................ 89 6.3.3 Hybridiytimet....................... 90 7 POSIX ja shell 91 7.1 POSIX............................... 92 7.2 The Unix Programmer s Manual man.............. 92 7.3 Komentotulkki.......................... 93 7.4 Ympäristömuuttujat....................... 94 7.5 Säännölliset lausekkeet...................... 95 7.5.1 Yksinkertaiset säännölliset lausekkeet (BRE)...... 96 7.5.2 Laajennetut säännölliset lausekkeet (ERE)....... 97 7.5.3 Perl ja Python...................... 97 7.6 POSIX-apuohjelmat....................... 97 7.6.1 Putket........................... 98 7.6.2 Prosessinhallinta..................... 98 7.6.3 Tiedostonhallinta..................... 99 7.6.4 Tiedostojärjestelmä ja lisälaitteet............ 100 7.6.5 Tekstinkäsittely...................... 101 7.7 Skriptit.............................. 102 A Liitteet 104 A.1 Turingin kone........................... 104 A.2 Pino ja Jono............................ 106 v

Viitteet 108 Hakemisto 108 vi

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 systeemianalyysin Mat-2 -alkuisilla kursseilla, BECS 1 -huippuyksikön kursseilla ja monissa eri koulutusohjelmien pääaineissa. Tietyt perustermit ja -ajattelumallit ovat yhteisiä, mutta systeemilähestymiseen liittyy aina myös paljon sovellusalakohtaista tietoa. Tämä luentomoniste käsittelee tietokonejärjestelmiä. Tietokonejärjestelmään kuuluu sekä fyysinen, piiriaspekti että tietokonetta hallitseva ohjelmisto, käyttöjärjestelmä. Luvun lopussa esitellään sekä tietokonetta että käyttöjärjestelmää nopeasti top-down -lähestymistavalla, jotta top-down oppijoiden on helpompi rakentaa kokonaiskuva kurssin asiasisällöstä. Luentomoniste on muuten rakennettu esittelemään asiat bottom-up, joten ensimmäisen luvun esittelyllä pyritään tasapainottamaan tätä rakennetta. Mikäli termit top-down ja bottom-up eivät ole tuttuja, ne esitellään seuraavaksi systeemien yhteydessä. 1.1 Systeemit ja insinööritieteen perusteet Insinööritiede (engineering) tarkoittaa (Merriam-Webster -sanakirjasta vapaasti käännettynä) joko 1. tieteen ja matematiikan soveltamista siten, että aineiden ominaisuudet ja luonnossa oleva energia valjastetaan ihmisten hyödyksi 1 department of Biomedical Engineering and Complex Systems 1

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 insinööritiedettä. Järjestelmien suunnittelu ja toteutus perustuu selkeästi tieteisiin ja matematiikkaan, mutta se sisältää myös monia asioita, joita ei ole helppo johtaa takaisin perustieteisiin. Järjestelmää, joka sisältävää monia toisistaan riippuvaisia osasia ja joka on selkeästi ympäristöstään erotettava kokonaisuus, kutsutaan systeemiksi (system). Systeemejä voi löytää monista eri tieteenaloista: solu on hyvä esimerkki biologisesta systeemistä, taloustieteissä esimerkiksi yksittäinen yritys tai tietty kaupan ala, kuten terästeollisuus voidaan mieltää systeemiksi. Tällä kurssilla systeemit ovat joko fyysisiä piirejä (tietokoneen osia tai lisälaitteita) tai ohjelmistosysteemejä (käyttöjärjestelmä, käyttöjärjestelmän osat ja apuohjelmat). Systeemien yhteydessä käytetään filosofista käsitettä holismi kuvaamaan ajattelutapaa, jonka mukaan systeemillä voi olla niin sanottuja emergenttejä ominaisuuksia. Emergentit ominaisuudet eivät ole suoraan johdettavissa alisysteemien ominaisuuksista. Esimerkiksi väri on aineen emergentti ominaisuus: yksittäinen molekyyli ei ime mitään tiettyä valon aallonpituutta, mutta kun molekyylejä on suuria määriä, ne imevät tiettyjä valon aallonpituuksia ja aineella on väri. Huonosti suunnitellun ja kirjoitetun ohjelman emergentti ominaisuus on usein hitaus. Vaikka aliohjelmia ei ole erikseen suunniteltu hitaiksi, kokonaisuus on tarpeettoman hidas. Systeemejä voidaan tarkastella kahdella eri tavalla. Systeemiä voidaan ajatella mustana laatikkona (black box), jolloin systeemistä tarkastellaan vain siihen vaikuttavia systeemin ulkopuolisia seikkoja ja systeemin vaikutusta itsensä ulkopuolelle. Esimerkiksi matemaattisen laskutoimituksen suorittavan ohjelman saamat syötteet ja sen antama tulos. Systeemiä voidaan myös ajatella valkoisena laatikkona (white box), jonka sisältö tiedetään. Mustaa laatikkoa tarkasteltaessa tarkastelu joudutaan rajoittamaan syötteisiin ja tuloksiin. Valkoista laatikkoa tarkasteltaessa voidaan myös tarkastella laatikon sisällä olevia toteutuskohtaisia yksityiskohtia. Esimerkiksi kuvassa 1.1 on esitelty hahmontunnistussysteemin perusrakenne 2. Esimerkki hahmontunnistussysteemi on ohjelmisto, jolle annetaan kasvokuva ja joka yhdistää kuvan tietokannassaan oleviin saman henkilön kasvoihin ja antaa tuloksena ihmisen nimen. Tarkasteltaessa systeemiä mustana laatikkona, siitä voidaan mitata vain, kuinka hyvin se tunnistaa kasvoja. Jos taas samaa systeemiä tarkastellaan 2 Hahmontunnistusta käsitellään kurssilla T-61.2010 Datasta Tietoon ja Informaatiotekniikan pääaineessa.

LUKU 1. JOHDANTO 3 Musta laatikko b1 b2 b3 b4 Syöte Valkoinen laatikko Tulos Mittaus Esikäsittely Piirreirrotus Luokittelu Kuva 1.1: Hahmontunnistussysteemi mustana ja valkoisena laatikkona. valkoisena laatikkona, voidaan tarkastella myös sen osien toimintaa. Systeemin neljä pääosaa ovat tässä esimerkissä mustia laatikoita (eli niiden toimintaa ei tarvitse tai haluta tietää). Joissain tapauksissa voi olla mielekästä vaihtaa jokin systeemin osista toiseen, eri tavoin toteutettuun mustaan laatikkoon. Voidaan esimerkiksi analysoida kahden eri luokittelutoteutuksen eroja koko systeemin toimintaan. Esimerkin kaltaisissa tapauksissa, joissa systeemiä tarkastellaan kokonaisuutena joka koostuu osasista, puhutaan top-down -strategiasta. Vastakohta tälle lähestymistavalle on bottom-up -strategiasta 3. Bottom-up -strategiassa lähdetään osasista ja osasia liitetään toisiinsa suurempien järjestelmien rakentamiseksi. Systeemiä (esimerkiksi ohjelmistoa) rakennettaessa käytetään yleisesti niinsanottua V-mallia (V-model). Kuvassa 1.2 on esitelty V-mallin eteneminen. Lähtökohtana on tulevan systeemin toimintaperiaate. Tämän jälkeen systeemin arkkitehtuuri suunnitellaan ensin karkealla tasolla, jonka jälkeen karkean tason osasten tarkka rakenne suunnitellaan ja toteutetaan. Kun palaset on toteutettu, ne yhdistetään ja niiden yhteentoimivuus varmistetaan. Palasten yhdistämistä kutsutaan systeemi-integraatioksi ja se on erittäin tärkeä osa toimivan tuotteen aikaansaamista. V-mallin laskeva sivu vastaa topdown -lähestymistä ja nouseva sivu bottom-up lähestymistä. V-malli voidaan ajatella yhdistävän nämä kaksi lähestymistapaa. 3 Top-down ja bottom-up ovat yleisiä jäsennysstrategioita. Niistä on hyötyä paitsi järjestelmiä suunnitellessa, myös opittua tietoa jäsennettäessä. Jotkut oppivat paremmin lähtiessään purkamaan kokonaisuutta palasiin. Toiset taas oppivat paremmin yhdistelemällä osasia suuremmiksi kokonaisuuksiksi. Tämä opetusmoniste on jäsennetty ensisijaisesti bottom-up -oppimista tukemaan. Top-down -oppijoiden avuksi tässä käydään tietokonejärjestelmän rakenne läpi ja sen jälkeen jokaisen luvun alussa esitellään luvun sisältö top-down -lähestymisellä.

LUKU 1. JOHDANTO 4 Toimintaperiaateja malli Käyttö ja ylläpito Vaatimukset ja arkkitehtuuri Systeemi-integraatio -verifikaatio ja validointi Tarkka toteutuksen rakenne Integrointi, testaus ja verifiointi Toteutus Kuva 1.2: Systeemisuunnittelun V-malli Järjestelmiä suunniteltaessa ja kehitettäessä niistä pyritään tekemään parempia jollakin tietyllä mittarilla. Näiden mittarien valinta vaikuttaa olennaisesti systeemiin. Esimerkiksi moderneissa suorittimissa yksi vaatimuksista on varsin usein kellotaajuuden ja käytetyn tehon suhde, koska tietokoneista halutaan tehdä energiatehokkaampia ja vihreämpiä. Käytännössä aina yksi mittari on aika, mutta sen painotus riippuu tilanteesta: joskus systeemin toiminta on aikakriittistä, joskus se taas ei ole. Joskus taas systeemin suunnitteluun käytetyn ajan määrä on olennaista, kuten tapauksessa jolloin uudelle markkina-alueelle pitää päästä ensimmäisenä. Mittarien yhteydessä puhutaan kustannuksista. Jos jokin teko tai ratkaisu aiheuttaa 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 sekä bitshift-operaatiot. Kerto- ja jakolaskujen suorittamisessa kuluu huomat-

LUKU 1. JOHDANTO 5 tavasti enemmän aikaa kuin yhteen- ja vähennyslaskujen. Tämän johdosta monia tärkeitä algoritmeja on pyritään kehittämään siten, että niiden laskemiseen 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 systeemeissä voi helposti olla jopa satojatuhansia osia, jotka voivat teoriassa toimia minkä tahansa toisen osan kanssa yhdessä. Tätä monimutkaisuutta rajoittamaan määritellään erilaisia rajapintoja. Rajapinnoilla piilotetaan jonkin allaolevan alisysteemin kompleksisuus. Ohjelmistotekniikassa on paljon ohjelmointirajapintoja (Application Programming Interfaces, API ). Useimmat tietokoneen lisälaitteet liitetään fyysiseen liitäntäväylään, jota pitkin ne kommunikoivat tiedonsiirtorajapinnan avulla, jolloin tietokoneen ei tarvitse välittää lisälaitteen sisäisestä toteutuksesta. Esimerkiksi tietokoneen USBväylään voi liittää mitä tahansa hiirestä tv-vastaanottimeen ja toiseen tietokoneeseen. Ainoa vaatimus USB-väylään liitettävälle laitteelle on se, että se täyttää USB-standardin. Biologiassa hermosolujen välillä on rajapintoja, joiden avulla viesti kulkee hermostoa pitkin. Kaikkia soluja ympäröivä solukalvo muodostaa rajapinnan solun kommunikaatiolle muun systeemin kanssa. Rajapinnat tarjoavat myös hyvän tavan esittää suuret kokoluokkavaihtelut. Ihmisten on helppo mieltää kokoluokkia millimetristä (10 3 m) noin kymmeneen kilometriin (10 4 m), eli vain noin 10 7 -kertaisen kokovaihtelun. Esimerkiksi yksittäisen tietokoneen osien kokoluokka vaihtelee jo suuremmalla skaalalla: suoritinpiirit tehdään 45 nanometrin (10 9 ) tekniikalla ja suurimmat liittimet ovat kymmenen sentin kokoluokkaa (10 1 ), eli kyseessä on 10 8 -kertainen ero. Rajapintojen suunnittelufilosofioita on useita, ja oikean valinta riippuu usein sovelluskohteista. Yksi käyttöjärjestelmäsuunnittelussa käytetty paradigma on niin sanottu oliomalli, jossa erilaisia käsitteitä paketoidaan olioiksi, jotka kuvaavat ontologisia käsitteitä. TKK:n perusohjelmointikursseilla opetetaan oliolähestymistä ohjelmistoihin. Toinen, vastikään pinnalla ollut paradigma on komponenttipohjainen lähestyminen ( Component Based Engineering, CBE), jossa jokainen musta laatikko huolehtii jostain tietystä määritellystä tarpeesta. Komponenttipohjainen lähestymistapa on jäämässä taka-alalle uuden, mallipohjaisen lähestymisen, (Model Driven Engineering, MDE). Mallipohjaisessa lähestymisessä pyritään kuvauskielellä tekemään malli sovelluskohtaisista käsitteistä ja piilotetaan algoritmiset käsitteet.

LUKU 1. JOHDANTO 6 1.2 Systeemi ja tietotekniikka Suurin ihmiskunnan aikaansaama tekninen systeemi on kiistatta internet. Vaikka se koostuu eri osista, eikä sitä välttämättä voida mieltää yhdeksi laitteeksi, on se selkeästi ympäristöstään erotettavissa oleva kokonaisuus. Verkon ominaisuuksien ja tiedonsiirron tarkastelu jätetään tietoliikenteen kursseille ja tämän kurssin puitteissa rajoitutaan tarkastelemaan yksittäisiä verkkoon liittyneitä laitteita. Myöhemmissä opinnoissa verkottuneita tietokoneita tarkastellessa on hyvä ymmärtää yksittäisen koneen toiminta. Vaikka tietokoneverkot on helppo mieltää miditornikoteloista rakennetuista, beigeistä Windows-koneista koostuvaksi homogeeniseksi rakenteeksi, on totuus aivan toinen. Kuvassa 1.3 on esitetty toisiinsa liittyneitä tietokoneita. Kaikki kuvassa esiintyvät laitteet ovat itseasiassa tietokoneita ja niillä kaikilla on sama käskykanta-arkkitehtuurin toteuttavan tietokoneen perusrakenne (esitellään luvussa 3). Kurssilla käsitellään PC-koneita esimerkkeinä niiden tuttuuden vuoksi, mutta PC:t muodostavat vain alle prosentin kaikista maailman ohjelmoitavista tietokoneista. Matkapuhelin Tukiasema Pelikonsoli Reititin Pöytätietokone Palvelin Kuva 1.3: Verkottuneita tietokoneita Tietokoneiden hyödyllisyys ja levinneisyys johtuu nimenomaan niiden oh-

LUKU 1. JOHDANTO 7 jelmoitavuudesta. Kuvan 1.2 V-mallin mukaisessa systeemien toteutuksessa yleensä kalleinta on nousu ylemmälle abstraktiotasolle. Systeemille on helppo suunnitella jokin rakenne ja pienet rakennuspalikat on helppo toteuttaa ja jopa testata toimiviksi. Palasten yhdistäminen taas on erittäin vaikeaa, sillä pienimmätkin virheet saattavat kostautua moninkertaisesti. Kokemus osoittaa että virheettömien suunnitelmien teko on käytännössä mahdotonta. Jos laitteen toiminnan voi määrittää ohjelmallisesti, sen muuttaminen jälkikäteen on monin verroin halvempaa kuin fyysisen laitteen, esimerkiksi tuhannen identtisen piirikortin tai vaikkapa taivutetun palkin muuttaminen. Tietokoneohjelmiston varaan suunnitellun systeemin toimintaa voi siis helposti muuttaa jos virheitä ilmenee. Tietokoneohjelmien muunnettavuudesta seuraa helposti kaaos. Jos monta insinööriä päästetään rajoituksetta muokkaamaan ohjelmistoa, sen toimintaa on hyvin vaikea ennustaa, eikä voida taata että se tekee mitä sen pitäisi ja tärkeämmin että se ei tee jotain mitä sen ei pitäisi. Tätä kaaosta estämään ja hallitsemaan tietokoneissa on erityinen ohjelmisto, käyttöjärjestelmä. Käyttöjärjestelmä tarjoaa ohjelmoijalle abstraktiotasoja laitteiston hallintaan ja vastaa laitteiston hallinnoimisesta siten, että ohjelmoija ei pääse rikkomaan mitään kriittistä ja siten, että laitteistosta voidaan saada maksimaalinen hyöty. 1.3 Modernin tietokoneen rakenne Tietokone mustana laatikkona saa syötteitä käyttäjältä erilaisien syöttölaitteiden (hiiri, näppäimistö, mikrofoni) avulla. Vastaavasti tietokone antaa käyttäjälle tulosteita näyttö- ja tulostinlaitteiden (näyttö, tulostin, kaiuttimet) avulla. Käyttäjän suoraan antaman syötteen lisäksi tietokoneelle voi antaa syötettä fyysisellä medialla, kuten Bluray-levyllä tai USB-muistilla. Useimmat tietokoneet osaavat myös kirjoittaa fyysisille medioille. Lisälaitteita ja niiden kanssa kommunikointia käsitellään luvussa 5. Tietokoneen sisäiseen tilaan vaikuttavat myös tietoliikenneyhteydet 4, erityisesti yhteys internetiin 5. Tietokoneilla on käynnistyksestä toiseen säilyvä tila (huom: näin ei ole aina ollut), joka on säilötty pysyväismuistiin, useimmiten kovalevylle. 4 Tällä kurssilla ei käsitellä tietoliikennettä, vaan sitä käsittelvät T-opiskelijat kurssilla T-110.2100 Johdatus tietoliikenteeseen ja TLT-opiskelijat kurssilla S-72.1130 Telecommunication Systems. 5 Juuri nyt tutkimuksessa kiinnostaa fyysisen tietokone-systeemin ja muun internetin välisen rajan hämärtäminen, ns. computation offloading, jonka ilmentymiä on muunmuassa cloud computing ja pienemmässä määrin grid computing. Niitä käsitellään ohjelmistotekniikan DI-vaiheen erikoiskursseilla.

LUKU 1. JOHDANTO 8 Yksinkertaistettu kaaviokuva tietokoneesta ja tärkeimmistä lisälaitteista on esitetty kuvassa 1.4. Pysyväistallennus Tietoliikenneyhteydet Tietokone Tulostuslaitteet Syöttölaitteet Kuva 1.4: Tietokone ja siihen liittyviä lisälaitteita Siirrytään tarkastelemaan tietokonetta valkoisena laatikkona. Jokaisessa tietokoneessa on suoritin, joka suorittaa varsinaiset laskutoimitukset. Luvussa 2 käydään läpi binääriaritmetiikkaa ja logiikkafunktioita, joiden avulla suunnitellaan yksinkertainen laskin. Suoritin on huomattavan paljon monimutkaisempi laskin, mutta toimintaperiaate on sama. Kurssilla esiteltävissä tietokoneissa on muistia, jonne suorittimella ajettavat ohjelmat ja niiden data voidaan tallentaa. Tietokoneessa on suorittimen lisäksi muita osia, joita yhdistävät erilaiset väylät 6. Väylä on yleisnimi tiedon siirtotielle, jonka varrella on erilaisia laitteita. Väylien välillä on nopeuseroja, jotka johtuvat väylien varrelle asetetuille laitteille ominaisista nopeuksista. Liikennettä väylällä ohjaa yleensä väyläohjain, joka on tyypillisesti liitetty yhtenä lisälaitteena astetta nopeammalle väylälle. Tietokoneen perusosat, väylä, suoritin ja muisti löytyvät kaikista kurssin määritelmän mukaisista tietokoneista. Tietokoneita muokataan tiettyyn käyttötarkoitukseen liittämällä väylälle muita laitteita. Tärkeimmät PC-tietokoneen väylät sijaitsevat fyysisellä tietokoneen osalla, jota kutsutaan emolevyksi. Väylät on emolevyllä jaettu kahteen piirisarjaan, eteläsiltaan (Southbridge) ja pohjoissiltaan (Northbridge). Niiden nimet tulevat kaaviosta, joissa suoritin on ylimpänä eli pohjoisessa. Kuvassa 1.5 on kuvattu modernin tietokoneen väylähierarkia. Kuvassa esitetyt Front 6 Väyliä voi olla vain yksi, kuten 1-Wire -arkkitehtuurissa, mutta tämä on harvinaista ja yhden väylän ratkaisuja käytetään lähinnä erityisratkaisuissa.

LUKU 1. JOHDANTO 9 Side Bus ja muistiväylä vastaavat väylää luvussa 3 käsiteltävän von Neumann -arkkitehtuurissa. Samassa luvussa kuvattava siirräntäyksikkö vastaa karkeasti eteläsiltaa modernissa arkkitehtuurissa: sen varrelle on liitetty erilaisia 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älaitekorttien liittämiseksi Low Pin Count eli LPC-väylä, johon kiinnitetään vanhoja hiiriä, levyasemia ja sarja- ja rinnakkaisporttiliitäntöjä. Prosessori Front-side bus (FSB) Pohjoissilta muistiväylä Internal Bus PCI Express Muisti Eteläsilta Näytönohjain SATA LPC USB PCI Kiintolevyt Vanhat laitteet (sarjaportti, PS/2) USB-lisälaitteet PCI-lisälaitteet Kuva 1.5: Modernin tietokoneen väylähierarkia. Näytönohjaimen toimintaa ei tällä kurssilla käsitellä. Sitä selitetään kurssilla T-111.4300 Tietokonegrafiikan perusteet. 1.4 Käyttöjärjestelmän rakenne Käyttöjärjestelmä-käsitteestä useimmille tulee mieleen ensimmäiseksi Windowsin graafinen käyttöliittymä (Graphical User Interface, GUI ). Graafisten käyttöjärjestelmien ja drag&drop-käyttöliittymien toteutus on kuitenkin verrattain monimutkaista, eikä sitä muutenkaan ole tämän kurssin puitteissa olennaista käsitellä. Käyttäjälle näkyvä osuus ei juurikaan vaikuta varsinaisen, laitteiston toimintaa ohjaavan käyttöjärjestelmän suunnitteluun.

LUKU 1. JOHDANTO 10 Tällä kurssilla käyttöjärjestelmää edustaa $ eli Unixin komentokehote, joka on korkein taso jolla käyttöjärjestelmää käsitellään. Luku 7 on pyhitetty komentorivin käyttämiselle. Kaikki sitä edeltävä materiaali käsittelee sitä, mitä komentokehotteen alla tapahtuu. Vaikka kurssin esimerkit ovatkin PC-tietokoneiden käyttöjärjestelmistä, on myös sykemittarien, kännyköiden, reitittimien ja muiden ohjelmoitavien laitteiden käyttöjärjestelmien rakenne hyvin samankaltainen. Käyttöjärjestelmä abstrahoi allaolevaa laitteistoa ohjelmoijalle ja hallinnoi laitteistoa. Kuvassa 1.6 on esitetty aiemmin kuvassa 1.5 esitetty tietokoneen arkkitehtuuri väritettynä siten, että vihreä väri näyttää ne järjestelmän osat, joihin ohjelmoija päsee käsiksi suoraan 7 ja punainen ne osat, joihin päästäkseen ohjelmoijan on käytettävä käyttöjärjestelmän tarjoamia palveluja tai rajapintoja. Prosessori Front-side bus (FSB) Pohjoissilta muistiväylä Internal Bus PCI Express Muisti Eteläsilta Näytönohjain SATA LPC USB PCI Kiintolevyt Vanhat laitteet (sarjaportti, PS/2) USB-lisälaitteet PCI-lisälaitteet Kuva 1.6: Modernin tietokoneen väylähierarkia. Vihreä edustaa osia, joihin ohjelma pääsee käsiksi suoraan. Punainen osia, joihin pääsee vain käyttöjärjestelmän kautta. Käyttöjärjestelmää käsiteltäessä kannattaa pitää mielessä, että käyttöjärjestelmä rakentuu allaolevan fyysisen tietokoneen päälle. Käyttöjärjestelmä on tietokoneen kovalevylle 8 tallennettu ohjelma, joka käynnistyksen yhteydessä siirretään muistiin. Käyttöjärjestelmä ohjaa logiikkaporteista koostuvan suoritusyksikön toimintaa. Käyttöjärjestelmä rakentuu abstraktiotasoille, kuten aliluvussa 3.2.6 esitettävälle käskykanta-arkkitehtuurille, joka pii- 7 Itseasiassa ohjelmoija ei edes pääse käsiksi koko muistiin, vaan vain prosessin omaan virtuaalimuistii. Tästä enemmän luvussa 4. 8 Itseasiassa ei aina: käyttöjärjestelmä voidaan hakea käynnistyksen yhteydessä myös verkosta.

LUKU 1. JOHDANTO 11 lottaa allaolevan piiritason toteutuksen ohjelmoijalta. Nykyään käskykantaarkkitehtuuri piilotetaan myös ohjelmoijalta korkeamman tason ohjelmointikielten, kuten C:n avulla. Taulukossa 1.1 on esitelty käyttöjärjestelmän ja sen allaolevan piiritason toteutuksen abstraktiotasoja. Ensimmäiset neljä tasoa käsittelevät fyysistä toteutusta. Loput ovat ohjelmallisia rakenteita, jotka on toteutettu raudan päälle. Tasot 5-7 käsittelevät yhden suoritusyksikön järjestelmiä, kun taas tasoilla 8-13 voidaan lisätä suoritusyksiköitä tai vaikkapa hajauttaa toteutus useammalle koneelle verkon yli. Taso Nimi Käsiteltävät objektit Esimerkkioperaatioita 13 Komentokehote Ohjelmointiympäristö Skriptikielen käskyt 12 Käyttäjän prosessisäyttäminen Käyttäjän prosessit prosessin tappaminen, py- ja jatkaminen 11 Hakemistot Hakemistot luonti, poisto, haku, listaus 10 Laitteet Tulostimet, näytöt, näppäimistötus Avaus, sulku, luku, kirjoi- 9 Tiedostojärjestelmä Tiedostot Luonti, poisto, avaus, sulku, luku, kirjoitus 8 Prosessienvälinen kommunikaatio Putket Luonti, poisto, avaus, sulku, luku, kirjoitus 7 Virtuaalimuisti Segmentit, sivut Luku, kirjoitus, haku 6 Paikallinen pysyväismuistpautus Datalohkot Luku, kirjoitus, varaus, va- 5 Primitiiviset prosessimaforit Primitiiviset prosessit, se- Pysäytys, jatkaminen, odotus, signalointi 4 Keskeytykset Keskeytyksenkäsittelijät Kutsu, estä alemman tason keskeytykset, salli alemman tason keskeytykset, yritä uduelleen 3 Proseduurit Proseduurit, kutsupino Aseta pinoon, kutsu, palaa 2 Käskykanta Käskyjoukko, skalaari- ja taulukkodata, tulkki lataa, talleta, lisää, vähennä, 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.

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 Boolen algebraan. Boolen algebran totuusarvoja voidaan manipuloida logiikkapiireillä, jotka luovat pohjan suoritusyksiköiden suunnittelulle. Suoritusyksiköitä tullaan käyttämään seuraavassa luvussa esiteltävän yleisen tietokonearkkitehtuurin sydämenä. Melkein kaikki muutkin tietokoneen osat vähintään sisältävät jonkinlaisen logiikkapiirin ja useimmat ovat erikoistuneita piirejä. Luvussa käsitellään osin samoja asioita kuin kurssilla S-88.1110 Digitaalitekniikan perusteet, joten sen käyneille osa luvusta toimii kertauksena. Kuitenkin esimerkiksi merkistöistä puhutaan huomattavasti laajemmin kuin Digitaalitekniikan perusteissa. Kyseisen kurssin www-oppimateriaali [3] soveltuu rinnalla luettavaksi kiinnostuneille. 2.1 Lukujärjestelmät Luku on matemaattinen käsite, joka mittaa suuruutta, järjestystä tai jotakin muuta suuretta. Kokonaisluvut tai luonnollisten lukujen joukko on helppo mieltää luvuiksi, mutta myös imaginääriluvut tai vaikkapa amerikkalaistyyliset kurssiarvosanat A, B, C, D, E, F voidaan tulkita luvuiksi. Tämän kurssin puitteissa käsittelemme kuitenkin vain kokonaislukuja ja tiettyjä luonnollisten lukujen osajoukkoja. Yleisesti käytetty kymmenkantajärjestelmä on levinnyt siksi, että ihmisillä on 10 sormea, joten kymmenjärjestelmällä on helppo laskea. Näitä kymmentä numeroa kuvaavat arabialaiset numeraalit 0-9. Numeroiden esitystapa ei riipu kantajärjestelmästä. Yhtä hyvin voitaisiin käyttää kymmentä kir- 12

LUKU 2. BITISTÄ SUMMAIMEEN 13 jainta kreikkalaisista aakkosista kuvaamaan numeroita (ja itseasiassa antiikin kreikkalaiset tekivät näin). Lukujärjestelmän erottaminen lukujen esityksestä on tärkeää, sillä tietokoneet käsittelevät lukuja tavalla, joka ei ole yhtä luonnollinen ihmisille ja siksi lukujen kuvaamiseen on tehty ihmisten hahmottamista helpottavia järjestelmiä. Kymmenkantajärjestelmässä (ja muissakin kantajärjestelmissä) luvut esitetään suhteessa kantaluvun (base) potensseihin: A = a i k i missä k on kantaluku ja a i ovat luvussa olevat numeroarvot kohdalla i oikealta laskien. Mikäli luvun kanta on yli 10, on tapana ottaa käyttöön aakkosia roomalaisten aakkosten alkupäästä siten että A=11, B=12 ja niin edelleen. Kannanvaihto Lukuunottamatta kohta esiteltäviä poikkeuksia, lukujärjestelmän kannan vaihto käsin kannattaa aina tehdä kymmenjärjestelmän kautta koska se on ihmisille helpointa mieltää. Lukua x kannassa y merkitään (x) y, missä y ilmaistaan aina kymmenjärjestelmässä. Kannan vaihto arbitäärisestä kannasta kymmenkantaan tarkoittaa summan A = ia i k i laskemista auki. Kannan vaihto kymmenkannasta arbitääriseen kantaan tapahtuu luvulle A esimerkiksi seuraavasti: 1. etsi suurin kantaluvun potenssi k b, joka on pienempi kuin A 2. laske montako kertaa c k b menee A:han, tämä on uuden luvun merkitsevin numero 3. laske erotus A c k b 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. 16 2 = 256 on lähin kantaluvun potenssi ja se menee lukuun viisi kertaa, vastaava luku on 0x500 2. 1337 5 256 = 57