OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012 Luento 8: Tietokoneen toiminta, osa 1 Tekijät: Antti Virtanen, Timo Lehtonen, Matti Kujala, Kirsti Ala-Mutka, Petri M. Gerdt et al.
Päivystysaika Maanantaisin klo 08-09 TE112 Tietotalo, ohjelmistotekniikan laitos, Zipin vieressä olevasta lasiovesta sisälle ja heti ensimmäinen käytävä oikealle Paikalla todennäköisesti myös tiistaisin ja torstaisin klo 12 14... Tapaamisen voi sopia myös sähköpostitse, eeva.laukkanen@tut.fi
Bonustehtävien uusi palautusaikataulu 16.9.2012 23.9.2012 30.9.2012 7.10.2012 14.10.2012 Bonustehtävät tarkastetaan ja hyväksytään kunkin viikon keskiviikkoon mennessä. Pistesaldon voi tarkastaa Moodlen arvioinnit-sivulta, kuten viikkoharjoituspisteetkin.
Harjoitustyön tehtävänanto julkaistu tänään! Essee tietoturvasta Tarkka tehtävänanto sisällysluetteloineen löytyy kurssin Moodlesivulta Parityö, paria voi etsiä Moodlessa Deadline 14.10.2012 eli tenttiviikkoa edeltävänä sunnuntaina Kuten myös kurssin harjoitustehtävien deadline...
Vanhoille opiskelijoille Koska kurssi järjestetään viimeistä kertaa tänä lukuvuonna, hyväksytään sekä aikaisempina vuosina palautetut esseet että viikkoharjoitukset...tietysti vain hyväksytyt suoritukset näistä... Hyväksytty essee Kokonainen harjoituspaketti Bonustehtäviä ei voi kierrättää aikaisemmilta vuosilta Kurssin kotisivulta löytyy suoritustentarkastusautomaatti Vaatii intrakirjautumisen
Harjoitustyöstä: yleisiä ongelmia Lähdeviitteet tekstin seassa! Sekä tietysti lähdeluettelo Mistä löytyvät viittaustekniikat...? Nettilähteisiin viittauspäivämäärä Lähdemateriaalin laatu (esim. Wikipedia ok) Plagiointi tästä jää kiinni... Palautus pdf-muodossa muista formaateista seuraa bumerangi kysykää viikkoharkoissa jos ette osaa muuntaa dokumenttia oikeaan muotoon! Mikäs olikaan tämä bumerangi? Palautusdeadline on ehdoton Vain toinen parista palauttaa työn Muistakaa merkitä kummankin tekijän tiedot työhön!
Luennon aiheet Mikä tietokone on Algoritmin käsite Ohjelman käsite Tietokoneen perusrakenne Prosessorin eli suorittimen toiminta
Tietokoneen toiminta ja rakenne Tietokoneen sisäinen toiminta ja rakenne ei näy suoraan käyttäjälle Onko sen ymmärtäminen hyödyllistä? Vrt: vaatiiko autolla ajaminen tuntemusta auton toiminnasta? Yht äkkiä se vain teki niin Monien käyttäjälle näkyvien asioiden ymmärtäminen on vaikeaa, ellei tiedä miten koneen sisällä tapahtuu Tietokoneiden perusrakenne ja toimintaperiaatteet ovat pysyneet samoina pitkään Ei ole oletettavissa että mitään radikaalia muutosta tapahtuu lähitulevaisuudessa Samat lainalaisuudet ja periaatteet pätevät niin kännykkään, mp3-soittimeen kuin pöytäkoneeseenkin Tällä kurssilla (niin kuin yliopistossa yleensäkin) pyritään välttämään nopeasti vanhenevan tiedon opetusta
Mikä on tietokone? Tietokone on laite, jossa on tiedon syöttö- ja tulostusmahdollisuus Tietokone tuottaa syöttötietojen perusteella tulostietoja Tietokoneella on muisti, jossa voidaan säilyttää Tietoa jota tarvitaan, kun syöttötiedoista tehdään tulostietoa Ohjelmia, eli ohjeita, joiden mukaisesti syöttötiedoista muodostetaan tulostietoja Tietokone Syöttötiedot (input) Muisti Ohjelma Tulostiedot (output)
Miten tietokone toimii? Kaikki, mihin tietokone kykenee, on sisään tulevan tiedon varastointi, muokkaus ja ulostulevan tiedon tuottaminen Kaikki tämä tapahtuu "mekaanisesti" koneessa olevien ohjeiden, eli ohjelmien, mukaisesti Syöttötietojen lukeminen ja tulostietojen tuottaminen tapahtuu usein samaan aikaan Suurin osa ohjelmista on nykyisin interaktiivisia Interaktiivinen tarkoittaa vuorovaikutteista Interaktiivinen ohjelma "keskustelee" käyttäjän kanssa jatkuvasti Vastakohtana ohjelmat, jotka lukevat kaikki syöttötiedot, raksuttavat vähän aikaa ja tulostavat sitten vastauksen Tällaisia ohjelmia kutsutaan eräohjelmiksi, ne käsittelevät erän tietoa kerralla
Mitä tietokone ei ole? Tietokone on vain erittäin nopea laskukone ja tiedon tallentaja; tietokone ei Päätä omasta käytöstään Syötä itse itseensä tarvittavia tietoja Arvaa, mitä käyttäjä haluaisi tehdä Tee mitään ylimääräisiä johtopäätöksiä laskemiensa tulosten perusteella Osaa ottaa huomioon mitään, mitä niille ei ole erikseen kerrottu Tietokoneohjelmat ovat ihmisten tekemiä, ja lähes kaikki tietokoneiden virheet johtuvat ihmisten (ohjelmoijien) ohjelmiin tekemistä virheistä Kone ei siis tee virheitä, mutta ohjelmoija tekee
Millaisia ovat yleisimmät tietokoneet? Sulautettu järjestelmä on tietokonejärjestelmä, joka on rakennettu laitteen sisään siten, ettei käyttäjän tarvitse tietää mitään laitteen sisäisestä toiminnasta. Wikipedia (27.8.2006), URL: http://fi.wikipedia.org/wiki/sulautettu_j%c3%a4rjestelm%c3%a4 Myös näissä laitteissa on muistia ja jonkinlainen ohjelma Näyttölaitetta tai näppäimistöä ei välttämättä ole tai muitakaan tuttuja tietokoneen osia Esimerkkejä: pesukone, auto, kännykkä, DVD-soitin, liikkuvat ja älykkäät työkoneet
Tietokoneohjelma ja algoritmi Edellä kävi ilmi, että tietokoneen toimintaa ohjaavat erilaiset tietokoneohjelmat Tietokoneohjelma-käsitteen ymmärtäminen on käyttäjälle vähintään yhtä tärkeää, kuin jonkinlainen kuva tietokoneen rakenteesta... Olennaisinta tietokoneen toiminnan kannalta on kuitenkin ymmärtää käsite algoritmi Ohjelmat perustuvat algoritmeihin
Mikä on algoritmi? J. G. Brookshear: "Vapaamuotoisesti sanottuna algoritmi on joukko ohjeita, jotka ohjaavat tehtävän suorittamista." "Tarkemmin, algoritmi on äärellinen joukko täsmällisiä, suoritettavissa olevia ohjeita, jotka ohjaavat päättyvää tehtävän suoritusta. Koska algoritmin käsite on näin laaja, eivät algoritmit liity yksinomaan pelkästään tietokoneisiin Esim. keittokirja on itse asiassa kokoelma algoritmeja, joita seuraamalla kokkaamisen pitäisi onnistua Vastaavasti koottavan kirjahyllyn mukana pitäisi tulla algoritmi, jonka avulla palasista saa koottua kirjahyllyn... Algoritmeja ovat siis kaikki täsmälliset suoritusohjeet Algoritmin ei tarvitse selittää "miksi", vaan ainoastaan "miten
Esimerkki algoritmista Jauhelihakastike (4 annosta) Ainekset: 400 g naudan jauhelihaa 1 tl suolaa 1/2 tl mustapippuria 1/2 ps (100 g) sipulikuutioita 1 tlk (500 g) yrttimaustettua tomaattimurskaa 1 ps (250 g) keittovihanneksia (pakaste) 1-2 tl basilikaa tai oreganoa 1. Ruskista jauheliha kuumalla pannulla omassa rasvassaan. 2. Mausta suolalla ja pippurilla. 3. Lisää sipulikuutiot, tomaattimurska ja keittovihannekset. 4. Anna hautua kannen alla noin 10 min, kunnes vihannekset ovat kypsiä. 5. Mausta lopuksi basilikalla tai oreganolla. Tarjoa kastike keitetyn spagetin ja parmesaanijuustoraasteen kanssa.
Toinen esimerkki algoritmista Positiivisen kokonaisluvun muuttaminen binääriluvuksi Vaihe 1: Jaa luku 2:lla ja pane jakojäännös muistiin Vaihe 2: Niin kauan kuin osamäärä ei ole 0, jaa uusin osamäärä kahdella ja pane jakojäännös muistiin Vaihe 3: Kun osamäärä on 0, luvun binääriesitys on jakojäännösten muodostama bittijono päinvastaisessa järjestyksessä Lähde: Brookshear, G,. B.: Tietotekniikka. Edita publishing Oy, Helsinki, 2003.
Toinen esimerkki algoritmista Positiivisen kokonaisluvun muuttaminen binääriluvuksi Vaihe 1: Jaa luku 2:lla ja pane jakojäännös muistiin Vaihe 2: Niin kauan kuin osamäärä ei ole 0, jaa uusin osamäärä kahdella ja pane jakojäännös muistiin Vaihe 3: Kun osamäärä on 0, luvun binääriesitys on jakojäännösten muodostama bittijono päinvastaisessa järjestyksessä Mikä on luvun 13 (DEC) binääriesitys? Muisti: Binääriesitys:? Lähde: Brookshear, G,. B.: Tietotekniikka. Edita publishing Oy, Helsinki, 2003.
Toinen esimerkki algoritmista Positiivisen kokonaisluvun muuttaminen binääriluvuksi Vaihe 1: Jaa luku 2:lla ja pane jakojäännös muistiin Vaihe 2: Niin kauan kuin osamäärä ei ole 0, jaa uusin osamäärä kahdella ja pane jakojäännös muistiin Vaihe 3: Kun osamäärä on 0, luvun binääriesitys on jakojäännösten muodostama bittijono päinvastaisessa järjestyksessä Mikä on luvun 13 (DEC) binääriesitys? 13 / 2: osamäärä 6, jakojäännös 1 Muisti: 1 Binääriesitys:? Lähde: Brookshear, G,. B.: Tietotekniikka. Edita publishing Oy, Helsinki, 2003.
Toinen esimerkki algoritmista Positiivisen kokonaisluvun muuttaminen binääriluvuksi Vaihe 1: Jaa luku 2:lla ja pane jakojäännös muistiin Vaihe 2: Niin kauan kuin osamäärä ei ole 0, jaa uusin osamäärä kahdella ja pane jakojäännös muistiin Vaihe 3: Kun osamäärä on 0, luvun binääriesitys on jakojäännösten muodostama bittijono päinvastaisessa järjestyksessä Mikä on luvun 13 (DEC) binääriesitys? 13 / 2: osamäärä 6, jakojäännös 1 6 / 2: osamäärä 3, jakojäännös 0 Muisti: 10 Binääriesitys:? Lähde: Brookshear, G,. B.: Tietotekniikka. Edita publishing Oy, Helsinki, 2003.
Toinen esimerkki algoritmista Positiivisen kokonaisluvun muuttaminen binääriluvuksi Vaihe 1: Jaa luku 2:lla ja pane jakojäännös muistiin Vaihe 2: Niin kauan kuin osamäärä ei ole 0, jaa uusin osamäärä kahdella ja pane jakojäännös muistiin Vaihe 3: Kun osamäärä on 0, luvun binääriesitys on jakojäännösten muodostama bittijono päinvastaisessa järjestyksessä Mikä on luvun 13 (DEC) binääriesitys? 13 / 2: osamäärä 6, jakojäännös 1 6 / 2: osamäärä 3, jakojäännös 0 3 / 2: osamäärä 1, jakojäännös 1 1 / 2: osamäärä 0, jakojäännös 1 Muisti: 1011 Binääriesitys:? Lähde: Brookshear, G,. B.: Tietotekniikka. Edita publishing Oy, Helsinki, 2003.
Toinen esimerkki algoritmista Positiivisen kokonaisluvun muuttaminen binääriluvuksi Vaihe 1: Jaa luku 2:lla ja pane jakojäännös muistiin Vaihe 2: Niin kauan kuin osamäärä ei ole 0, jaa uusin osamäärä kahdella ja pane jakojäännös muistiin Vaihe 3: Kun osamäärä on 0, luvun binääriesitys on jakojäännösten muodostama bittijono päinvastaisessa järjestyksessä Mikä on luvun 13 (DEC) binääriesitys? 13 / 2: osamäärä 6, jakojäännös 1 6 / 2: osamäärä 3, jakojäännös 0 3 / 2: osamäärä 1, jakojäännös 1 1 / 2: osamäärä 0, jakojäännös 1 Muisti: 1011 Binääriesitys: 1101 Lähde: Brookshear, G,. B.: Tietotekniikka. Edita publishing Oy, Helsinki, 2003.
Tehtävä: muunna 11 binääriluvuksi Positiivisen kokonaisluvun muuttaminen binääriluvuksi Vaihe 1: Jaa luku 2:lla ja pane jakojäännös muistiin Vaihe 2: Niin kauan kuin osamäärä ei ole 0, jaa uusin osamäärä kahdella ja pane jakojäännös muistiin Vaihe 3: Kun osamäärä on 0, luvun binääriesitys on jakojäännösten muodostama bittijono päinvastaisessa järjestyksessä Mikä on luvun 11 (DEC) binääriesitys? 11 / 2: osamäärä?, jakojäännös? Muisti: Binääriesitys:? Lähde: Brookshear, G,. B.: Tietotekniikka. Edita publishing Oy, Helsinki, 2003.
Tehtävä: muunna 11 binääriluvuksi Positiivisen kokonaisluvun muuttaminen binääriluvuksi Vaihe 1: Jaa luku 2:lla ja pane jakojäännös muistiin Vaihe 2: Niin kauan kuin osamäärä ei ole 0, jaa uusin osamäärä kahdella ja pane jakojäännös muistiin Vaihe 3: Kun osamäärä on 0, luvun binääriesitys on jakojäännösten muodostama bittijono päinvastaisessa järjestyksessä Mikä on luvun 11 (DEC) binääriesitys? 11 / 2: osamäärä 5, jakojäännös 1 5 / 2: osamäärä 2, jakojäännös 1 2 / 2: osamäärä 1, jakojäännös 0 1 / 2: osamäärä 0, jakojäännös 1 Muisti: 1101 Binääriesitys: 1011 Lähde: Brookshear, G,. B.: Tietotekniikka. Edita publishing Oy, Helsinki, 2003.
Kolmas esimerkki algoritmista Merkintä i <- 2 tarkoittaa: sijoita muuttujaan i arvo 2 Ks. http://www.cs.tut.fi/etaopetus/titepk/luku14/algoritmi.html#algoritmi
Mikä on tietokoneohjelma? 1/2 Tietokoneohjelma esittää tietyn algoritmin tietokoneen ymmärtämässä muodossa Koska tietokone ei ymmärrä ihmisten käyttämää kieltä, ei esim. keittokirjaa sellaisenaan voi naputtaa koneeseen ja tehdä kokkausrobottia Tietokone ei ymmärrä hölkäsen pöläystä siitä, mitä siihen syötetyllä ohjelmalla pyritään tekemään Koska tietokone on "tyhmä", tietokoneohjelmassa algoritmin ohjeet täytyy selittää rautalangasta vääntäen erittäin seikkaperäisesti Suurin osa tietokoneohjelmien virheistä johtuu siitä, että algoritmia ei ole esitetty tietokoneelle oikein tai koko algoritmi on alkujaankin ollut päin mäntyä
Mikä on tietokoneohjelma? 2/2 Yleensä algoritmia ei heti alkuun esitetä tietokoneen ymmärtämässä muodossa (bitteinä), vaan se kirjoitetaan ensin sopivaan ihmisen luettavaan välimuotoon jotain ohjelmointikieltä käyttäen Ohjelmointikielellä tehdystä ohjelmasta tietokone osaa itse tehdä sopivan bittijonon jonon Tietokone kääntää ohjelmointikielisen ohjelman itsensä ymmärtämään muotoon, siis ohjelmaksi Ohjelmointikielellä tehdyn ohjelman etuna on, että se on sekä ihmisen että koneen "ymmärrettävissä" (konehan ei mitään ymmärrä)
Esimerkki tietokoneohjelmasta #include <iostream> using namespace std; string kaanna (string mjono) { string kaannetty = ""; for (int i = mjono.size(); i>=0; i--) kaannetty += mjono[i]; return kaannetty; } int main() { int luku; string bittijono; cout << "Anna postiivinen kokonaisluku: "; cin >> luku; if (luku % 2) bittijono = "1"; else bittijono = "0"; while( luku / 2 > 0) { luku = luku / 2; if (luku % 2) bittijono += "1"; else bittijono += "0"; } cout << "Binaariluku: " << kaanna(bittijono) << endl; return 0; }
Esimerkki tietokoneohjelmasta #include <iostream> using namespace std; string kaanna (string mjono) { string kaannetty = ""; for (int i = mjono.size(); i>=0; i--) kaannetty += mjono[i]; return kaannetty; } 1 2 3 int main() { int luku; string bittijono; cout << "Anna postiivinen kokonaisluku: "; cin >> luku; if (luku % 2) bittijono = "1"; else bittijono = "0"; while( luku / 2 > 0) { luku = luku / 2; if (luku % 2) bittijono += "1"; else bittijono += "0"; } cout << "Binaariluku: " << kaanna(bittijono) << endl; return 0; }
Esimerkki tietokoneohjelmasta Tietokoneohjelma on algoritmi, joka on esitetty siten, että sen ymmärtää sekä ihminen että tietokone. Alla esitetty esimerkki on melko lähellä tällaista: 1. MovePaistinpannu(1); Laita paistinpannu hellan levylle 2. SetLevy(1, 6); Aseta hellan levyn lämpötilaksi 6 3. Wait( until temp = 100); Odota hetki, jotta pannu lämpenee 4. PutSomeOil(); Laita pannulle ruokaöljyä tai rasvaa 5. PutMetaLoaf(); Kaada jauheliha pannulle 6. do { Mix(); } until isbrown(); Sekoita, kunnes jauheliha on ruskeaa 7. AddFlavors(); Lisää mausteet
Tietokoneen perusrakenne 1/2 Nyt luodaan katsaus tietokoneen fyysiseen perusrakenteeseen Tietokoneen peruskomponentit ovat karkeasti yleistettyinä seuraavat: suoritin keskusmuisti oheislaiteohjaimet ja oheislaitteet väylä
Tietokoneen perusrakenne 2/2 Suoritin eli prosessori ohjaa koneen toimintaa Englanniksi CPU (Central Processing Unit) Keskusmuisti sisältää suoritettavan ohjelman ja käsiteltävät tiedot Oheislaiteohjaimet ohjaavat tietokoneeseen liitettyjä oheislaitteita ja kommunikoivat suorittimen ja muistin kanssa Väylä toimii kommunikaatiokanavana suorittimen, muistin ja oheislaiteohjainten välillä
Tietokoneen perusrakenne: oheislaitteet Oheislaiteohjainten kautta tietokoneeseen voidaan liittää erilaisia oheislaitteita Näiden avulla tietokone voi sitten olla yhteydessä ulkomaailmaan Näytön kautta voidaan välittää tietoa käyttäjälle Näppäimistöllä käyttäjä voi syöttää tietoa tietokoneeseen Kytkimiä, antureita ja moottoreita käyttäen voidaan tietokone liittää erilaisiin laitteisiin ja kojeisiin
Tietokoneen perusrakenne: keskusmuisti 1/3 Keskusmuisti on joukko muistipaikkoja, johon voidaan tallettaa lukuja Muistipaikkaa voi ajatella liitutaululle piirretyksi laatikoksi, johon mahtuu kirjoittamaan yhden luvun Muistipaikan sisältämä luku voidaan tulkita myös esim. kirjaimeksi tai suorittimen konekäskyksi. Muistipaikat on numeroitu nollasta alkaen 0, 1, 2 jne. Muistipaikan numeroa sanotaan yleensä muistiosoitteeksi. Muistipaikkoja on yleensä todella paljon, normaalissa kotimikrossakin muistipaikkoja on nykyisin ainakin 268435456 kappaletta. Muistia 256 MB, Miksi luku ei ole 256000000?
Tietokoneen perusrakenne: keskusmuisti 2/3 Muistipaikat sijaitsevat peräkkäin ja jokaisella paikalla on yksilöivä numero, jonka avulla siihen voidaan viitata Esimerkiksi muistipaikan 4 arvo (10100001) on desimaalilukuna 161
Tietokoneen perusrakenne: keskusmuisti 3/3 Keskusmuistissa muistipaikkojen numeroita sanotaan muistiosoitteiksi Muistipaikkoja voidaan käsitellä mielivaltaisessa järjestyksessä (Random Access Memory, RAM) ja niihin voidaan lukea ja kirjoittaa Muistia, josta voidaan vain lukea, nimitetään ROMmuistiksi (Read Only Memory), ja sen sisältö säilyy virran katkaisun jälkeenkin
Tietokoneen perusrakenne: suoritin 1/4 Suoritin eli prosessori on tietokoneen toiminnan kannalta oleellisin osa Suoritin on integroitu piiri, jonka elektroniikka kykenee suorittamaan muistiin talletettuja konekäskyjä Integroida: yhdentää, muodostaa yhtenäisemmäksi kokonaisuudeksi Mikropiiri: pieni elektroniikan komponentti, jolle on integroitu suuri määrä elektronikkakomponentteja Suoritin suorittaa ohjelmaa askel (käsky) kerrallaan Suorittimen suorittamat käskyt ovat toiminnaltaan hyvin yksinkertaisia Käskyjä ovat usein mm. yhteenlasku, lukujen vertailu, luvun muistista hakeminen, jne
Tietokoneen perusrakenne: suoritin 2/4 Suorittimen perusosat ovat ohjausyksikkö ja ALU (Arithmetic and Logic Unit) Ohjausyksikkö noutaa konekäskyjä muistista ja vastaa niiden suorittamisesta ALU taas toimii ohjausyksikön käskyjen alaisena ja suorittaa yksinkertaisia lasku- ja vertailutoimenpiteitä AND, OR, NOT,... Yhteen- ja vähennyslaskut Kerto- ja jakolaskut
Suorittimen rekisterit Yleisrekisterit: väliaikainen suorittimen tietojen tallentaja ALUn piirien tiedot, tulosten vastaanotto Ohjausyksikössä erikoisrekisterejä: ohjelmalaskuri, käskyrekisteri ja pino-osoitin Ohjelmalaskuri: seuraavan suoritettavan käskyn osoite Käskyrekisteri: parhaillaan suoritettava käsky Pino-osoitin: osoitin ohjelman parametreihin