Ohjelmoinnin peruskurssien laaja oppimäärä

Koko: px
Aloita esitys sivulta:

Download "Ohjelmoinnin peruskurssien laaja oppimäärä"

Transkriptio

1 Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Rinnakkaisuus Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista)

2 Sisältö 1 Rinnakkaisuusmalleja: säie ja prosessi 2 Säikeet Pythonissa 3 Säikeiden synkronointi: lukot ja monitorit 4 Muuta säikeisiin liittyvää 5 Rinnakkaisuuden ja säiemallin ongelmia 6 Muita rinnakkaisuusmalleja

3 (ei-laajan kurssin kalvo: luento 8 sivu 3) Säie Prosessi Kaikissa nykyaikaisissa käyböjärjestelmissä on mahdollista suoribaa useita ohjelmia yhtä aikaa KäyBöjärjestelmä ajaa jokaista ohjelmaa omassa prosessissaan, jakaen prosessoriaikaa ohjelmille niin, ebä ohjelmat näybävät toimivan samanaikaises3 Säie Yhden prosessin sisällä myös yksibäinen ohjelma voi suoribaa eri toimintoja samanaikaisees3 käybämällä säikeitä (thread) Säikeet ovat prosesseihin verrabuna selkeäs3 kevyempiä

4 (ei-laajan kurssin kalvo: luento 8 sivu 4) Säie Sopivas3 käytebynä säikeillä saadaan paljon etuja Ohjelma voi käybää prosessoriaikaa mahdollisimman tehokkaas3 hyväkseen Ohjelma voi vastata kaybäjän toimiin nopeammin jne. Jokaisella säikeellä on oma suorituspino Paikallisia muubujia (suorituspinossa) ei jaeta Kaikki muu on yhteistä (keossa) Pythonissa säikeet eivät todellisuudessa toteuta rinnakkaisuuba. ValiteBavas3. Ks seuraava sivu.

5 Miten säikeitä ajetaan? yleensä käyttöjärjestelmä toteuttaa säikeet useampi säie voi olla yhtäaikaa käynnissä esim. saman koneen eri prosessoreissa yhdelläkin prosessorilla säikeitä ajetaan vuorotellen joskus (nykyään harvoin) kieli itse toteuttaa säikeet ajamalla niitä vuorotellen samassa ohjelmassa säikeen suoritus voi keskeytyä mistä tahansa kohdasta (ja siirtyä toiseen säikeeseen) melkein: yleensä järjestelmä takaa esim. että int-muuttujan kirjoitus on muiden säikeiden näkökulmasta tehty joko kokonaan tai ei vielä ollenkaan säikeiden välinen kommunikointi perustuu siis yhteisen muistin käyttämiseen (shared memory) ja käytännössä säikeiden synkronointiin esimerkiksi lukoilla (ali)prosesseissa taas yhteistä muistia ei yleensä ole

6 Sisältö 1 Rinnakkaisuusmalleja: säie ja prosessi 2 Säikeet Pythonissa 3 Säikeiden synkronointi: lukot ja monitorit 4 Muuta säikeisiin liittyvää 5 Rinnakkaisuuden ja säiemallin ongelmia 6 Muita rinnakkaisuusmalleja

7 (ei-laajan kurssin kalvo: luento 8 sivu 5) Global Interpreter Lock (GIL) Pythonissa tulkki suoribaa kerralla vain yhtä säiebä. I/O toiminnot ovat poikkeus tähän. Ei pysty hyödyntämään moniydinsuorirmien kapasiteera Itse asiassa jopa hidastaa ohjelman toimintaa Todellinen rinnakkaisuus on Pythonissa toteutebu mul3prosessing moduulissa aliprosesseina Säie antaan kuitenkin muita etuja, jotka ovat muissakin ohjelmoin3kielissä hyödynnebävissä (ja oikeas3 rinnakkaises3). Jos aihe kiinnostaa: hbp://www.dabeaz.com/python/understandinggil.pdf

8 (ei-laajan kurssin kalvo: luento 8 sivu 6) Moduuli threading Luokka Thread mahdollistaa säikeiden ohjaamisen start() käynnistää säikeen run() sisältää säikeen toiminnot join() odobaa säikeen kuolemaa getname() kertoo säikeen nimen is_alive() kertoo, onko säie elossa

9 (ei-laajan kurssin kalvo: luento 8 sivu 9) Säikeen luon3 ja käynnistys Kuinka säie luodaan? Uusi säie voidaan luodaan luomalla uusi Thread- olio ja kutsumalla sen start- metodia start käynnistää säikeen halutusta aloituskohdasta Ennen start()- metodin kutsua säie on pysähdyksissä Tämä aloituspiste voidaan antaa periybämällä uusi luokka luokasta Thread Suoritus alkaa periytetyn luokan metodista run() run()- metodia ei kutsuta suoraan vaan Thread tekee sen kun sitä vastaava säie käynnistetään start:illa Säikeen suoritus pääbyy kun run()- metodista poistutaan

10 (ei-laajan kurssin kalvo: luento 8 sivu 10) import time import threading class Tulostaja(threading.Thread): def init (self, tulostettava): super(tulostaja, self). init () self.viesti = tulostettava def run(self): for i in range(10): time.sleep(0.5) print self.viesti + str(i)

11 (ei-laajan kurssin kalvo: luento 8 sivu 11) def main(): saiea = Tulostaja('Kissa : ') saieb = Tulostaja('Nalle : ') saiea.start() saieb.start() for i in range(10): time.sleep(1) print 'Main' + str(i) if name ==' main ': main()

12 (ei-laajan kurssin kalvo: luento 8 sivu 12) Metodeista is_alive()/isalive() Tiedustelee, onko tutkibu säie vielä elossa join() OdoBaa, kunnes säie, jonka join- metodia kutsurin, kuolee Voidaan vaikka odobaa, ebä jonkin olennaisen tehtävän suoritus saadaan loppuun Voi olla kätevä ohjelman alasajossa Join ei siis lopeta säikeitä

13 Sisältö 1 Rinnakkaisuusmalleja: säie ja prosessi 2 Säikeet Pythonissa 3 Säikeiden synkronointi: lukot ja monitorit 4 Muuta säikeisiin liittyvää 5 Rinnakkaisuuden ja säiemallin ongelmia 6 Muita rinnakkaisuusmalleja

14 (ei-laajan kurssin kalvo: luento 8 sivu 14) Synkronoin3 Kun kaksi tai useampi säiebä haluaa käybää jotakin yhteistä resurssia (muubuja, 3edosto, ) yhtä aikaa, täytyy pitää huolta, ebä vain yksi säie kerrallaan käsibelee resurssia Jos kaksi säiebä avaa saman 3edoston ja kirjoibaa siihen, menevätkö rivit sekaisin? Toimintaa, joka takaa yksi kerrallaan periaabeen, kutsutaan synkronoinniksi Edellisen esimerkin tulostukset vaa3vat selväs3 synkronoin3a

15 (ei-laajan kurssin kalvo: luento 8 sivu 15) Lukot Yksinkertainen tapa varata resurssi yhdelle säikeelle kerralla on käybää lukkoa. (Lock) Luodaan lukko- olio ja välitetään se tarvibaville säikeille SuojaBavan toiminnon alussa pyydetään lukko Toiminnon valmistubua vapautetaan lukko

16 (ei-laajan kurssin kalvo: luento 8 sivu 16) def main(): lock = threading.lock() saiea = Tulostaja(lock, 'Kissa : ') saieb = Tulostaja(lock, 'Nalle : ') saiea.start() saieb.start() Välitetään lukot säikeille for i in range(10): time.sleep(1) lock.acquire() print 'Main' + str(i) lock.release() Suojataan pääohjelman tulostus

17 (ei-laajan kurssin kalvo: luento 8 sivu 17) class Tulostaja(threading.Thread): def init (self, lock, tulostettava): super(tulostaja, self). init () self.viesti = tulostettava self.lock = lock Lukko talteen def run(self): for i in range(10): time.sleep(0.5) self.lock.acquire() print self.viesti + str(i) self.lock.release() suojaus

18 Lukko-operaatiot (SICP 3.4.2) lukot (lock tai mutex) ovat usein matalimman abstraktiotason primitiivi säikeiden synkronointiin tyypillisesti lukolla on kaksi operaatiota: jokin säie voi varata (acquire) lukon ja myöhemmin vapauttaa (release) sen lukko takaa, että se on varattuna vain yhdellä säikeellä kerrallaan jos yrittää varata lukon, joka on jo varattu, normaalisti varausoperaatio jää odottamaan, että lukko vapautuu sisäisesti lukot on toteutettu joko käyttöjärjestelmän avulla tai yhteistä muistia sopivasti muokkaamalla semafori (semaphor) on lukko, joka voi olla varattuna n 1:llä säikeellä kerrallaan (raja n kerrotaan etukäteen)

19 Lukot ja monitorit toinen rinnakkaisuusabstraktio on nimeltään monitori (tai ehtomuuttuja, condition variable) varsinkin Javassä käytetään paljon tätä se käyttää lukkoja, mutta tarjoaa niille hieman abstraktimman rajapinnan: yksittäisten lukkojen varaus- ja vapautusoperaatioita ei näy koodissa lukot, semaforit ja monitorit ovat yleisimmät jaettuun muistiin perustuvat synkronointitavat oikeastaan abstraktiohierarkia ei ole näin selkeä: kaikki kolme voi periaatteessa toteuttaa toistensa avulla lisäksi on muunlaisia rinnakkaisuusmalleja, esimerkiksi viestinvälitykseen perustuvia (luennon loppupuolella)

20 (ei-laajan kurssin kalvo: luento 8 sivu 18) Synkronoin3 class Posti(object): def init (self): self.lahtevat_paketit = [] self.lock = threading.lock() def ota_paketti(self): #jotain koodia with self.lock: #käsittelee paketteja #loput metodista Mitä jos pakebeja ei ole otebavaksi? SäikeiBen väliseen synkronoin3in on omat keinonsa

21 (ei-laajan kurssin kalvo: luento 8 sivu 19) wait() ja no3fy() Mitä siis jos pakebeja ei ole otebavaksi? Silmukka, joka käy yribämässä, kunnes paker tulee Vie turhaan tehoa Ongelma ratkeaa metodeilla wait ja no3fy Kutsumalla lukko- olion metodia wait, säie siirtyy odobamaan Kun joku toinen säie kutsuu lukko- olion metodia no3fy, se heräbää yhden wait- jonon säikeen odobamaan pääsyä takaisin suoritukseen. (wait- kutsua seuraavalta riviltä) no3fyall() heräbää kaikki odobavat säikeet

22 (ei-laajan kurssin kalvo: luento 8 sivu 20) class Posti(object): POSTIN_KOKO = 15 def init (self): self.paketit = [] self.tuojat = threading.condition() self.viejat = threading.condition() def ota_paketti(self): while not self.paketit: with self.viejat: self.viejat.wait() poistettava = self.paketit.pop(0) with self.tuojat: self.tuojat.notifyall() return poistettava def tuo_paketti(self, p): while len(self.paketit) >= Posti.POSTIN_KOKO: with self.tuojat: self.tuojat.wait() self.paketit.append(p) with self.viejat: self.viejat.notifyall()

23 Sisältö 1 Rinnakkaisuusmalleja: säie ja prosessi 2 Säikeet Pythonissa 3 Säikeiden synkronointi: lukot ja monitorit 4 Muuta säikeisiin liittyvää 5 Rinnakkaisuuden ja säiemallin ongelmia 6 Muita rinnakkaisuusmalleja

24 (ei-laajan kurssin kalvo: luento 8 sivu 21) Timer Yksinkertaisin tapa saada jokin asia suoritebua 3etyn ajan kulubua on käybää Timer- luokkaa. SuoriBaa annetun funk3on/metodin annetun ajan kulubua SuoriBaa vain kerran, ei toista.

25 (ei-laajan kurssin kalvo: luento 8 sivu 22) import time import threading def tulosta(): print 'Tulostaa...' def main(): saiea = threading.timer(0.5, tulosta) saieb = threading.timer(0.7, tulosta) saiea.start() saieb.start() for i in range(10): time.sleep(1) print 'Main' + str(i) if name ==' main ': main()

26 (ei-laajan kurssin kalvo: luento 8 sivu 23) Toistava ajas3n Linkistä löytyy ajas3n, jolla on paremmat ominaisuudet Toistaa toiminnon annetun ajan välein Voi myös lopebaa toiston kertojen määrän täytybyä hbp://g- off.net/so^ware/a- python- repeatable- threading3mer- class

27 Säikeet ja GUI-ohjelmointi useimmat GUI-kirjastot on tehty niin, että GUI-kirjaston kutsuja saa tehdä vain yhdestä säikeestä helpottaa GUI-kirjaston tekemistä ja sen rajapinnan dokumentointia (muuten pitäisi ottaa kantaa siihen, mitä operaatioita saa tehdä yhtäaikaa ja mitä ei) mutta käyttöliittymässä asiat tapahtuvat yksi kerrallaan (hidas käyttöliittymäoperaatio pysäyttää kaiken muun) yleensä käyttöliittymäoperaatiot (esim. uuden dialog-ikkunan luonti) ovat kuitenkin lyhyitä tai osa niistä tehdään etukäteen ohjelman käynnistyessä käytännössä ohjelmissa on yleensä kaikki käyttöliittymään liittyvä koodi yhdessä säikeessä, joka lähettää pitkistä operaatioista laskentapyyntöjä muille säikeille

28 Sisältö 1 Rinnakkaisuusmalleja: säie ja prosessi 2 Säikeet Pythonissa 3 Säikeiden synkronointi: lukot ja monitorit 4 Muuta säikeisiin liittyvää 5 Rinnakkaisuuden ja säiemallin ongelmia 6 Muita rinnakkaisuusmalleja

29 Säikeiden ongelmia lukituksessa on helppo tehdä virheitä (esim. unohtaa varata lukko) vika saattaa esiintyä harvoin, jolloin se löytyy vasta myöhemmin rinnakkaisuusbugeja on yleensä vaikea toistaa löydetyn virhetilanteen tutkiminenkin voi olla vaikeaa lukkoja ei kannata olla kovin paljon lukon varaaminen vie aikaa vaikka se olisi vapaa (varaamisen pitää useimmiten onnistua, muuten rinnakkaisuudesta ei ole hyötyä) pitää löytää tasapaino tarkan ja epätarkan lukituksen välillä säikeitä ei kannata olla kovin paljon useimmat säietoteutukset eivät ole kovin tehokkaita, jos säikeitä on paljon (esim. useita kymmeniä tai satoja) yleensä ratkaisuna on ns. säieallas (thread pool): käynnistetään etukäteen esim. vakiomäärä säikeitä ja lähetetetään niille (yleensä lyhyitä) laskentapyyntöjä uuden säikeen käynnistämisen sijaan useimmissa ohjelmissa on yksi tai muutama säie, harvoin yli 10 monitorit ja semaforit eivät juurikaan auta näihin ongelmiin

30 Deadlock-ongelma (SICP 3.4.2) Kaksi rinnakkain ajettavaa säiettä varaa lukko a. varaa lukko b. vapauta b vapauta a varaa lukko b. varaa lukko a. vapauta a vapauta b mitä erikoista näitä säikeitä ajettaessa voi tapahtua?

31 Deadlock-ongelma (SICP 3.4.2) Kaksi rinnakkain ajettavaa säiettä varaa lukko a. varaa lukko b. vapauta b vapauta a varaa lukko b. varaa lukko a. vapauta a vapauta b mitä erikoista näitä säikeitä ajettaessa voi tapahtua? ohjelmat voivat jäädä ikuisesti odottamaan toisiaan: toinen haluaa toisen jo varaamaa lukkoa tämä tilanne on ns. lukkiuma (deadlock)

32 Deadlock-ongelman ratkaisuja (osin SICP 3.4.2) kaksi lukkiumaongelman ratkaisua: varataan lukot aina samassa järjestyksessä (estää lukkiuman syntymisen, mutta hankala toteuttaa, ellei tiedä etukäteen, mitä lukkoja tarvitsee) tunnistetaan lukkiuma ja puretaan se pyytämällä yhtä osallisista peruuttamaan miten lukkiuma tunnistetaan?

33 Deadlock-ongelman ratkaisuja (osin SICP 3.4.2) kaksi lukkiumaongelman ratkaisua: varataan lukot aina samassa järjestyksessä (estää lukkiuman syntymisen, mutta hankala toteuttaa, ellei tiedä etukäteen, mitä lukkoja tarvitsee) tunnistetaan lukkiuma ja puretaan se pyytämällä yhtä osallisista peruuttamaan miten lukkiuma tunnistetaan? esim. rakennetaan verkko siitä, mikä säie odottaa minkä säikeen varaamaa lukkoa tämän ns. odotusverkon sykli on lukkiuma vastaava ongelma on livelock: muuten sama, mutta ohjelmat eivät odota vaan tekevät jotain aktiivisesti silmukassa kunnes toinen valmistuu (eli ikuisesti) nämä ongelmat näkyvät jossain muodossa jokseenkin kaikissa rinnakkaisuuden muodoissa (aina kun varataan usempi jaettu resurssi)

34 Mitä rinnakkaisuusongelmille voi tehdä? käytännössä rinnakkaisuutta käytettäessä esimerkiksi: määritellään tarkkaan yhteisten resurssien käyttötapa (esim. mitä lukkoja pitää varata ennen kuin tiettyä muuttujaa käsitellään) pidetään rinnakkaisten ohjelman osien keskinäinen kommunikointi tavallistakin selkeämpänä (ja usein mahdollisimman vähäisenä) määritellään järjestys, jossa lukot tms. pitää varata joskus todistetaan rinnakkaisuuteen liittyviä ominaisuuksia rinnakkaisuutta käytetään paljon vähemmän kuin periaatteessa olisi mahdollista periaatteessa ongelmat liittyvät aina eri säikeiden väliseen kommunikointiin (yhteisten muuttujien käyttäminen on eräänlaista kommunikointia): esimerkiksi muille säikeille näkymättömistä välituloksista ei tarvitse huolehtia read-only-resurssit ovat helpompia: jos arvo ei muutu, sen rinnakkaisesta lukemisesta ei tarvitse huolehtia

35 Sisältö 1 Rinnakkaisuusmalleja: säie ja prosessi 2 Säikeet Pythonissa 3 Säikeiden synkronointi: lukot ja monitorit 4 Muuta säikeisiin liittyvää 5 Rinnakkaisuuden ja säiemallin ongelmia 6 Muita rinnakkaisuusmalleja

36 Muita tapoja tehdä rinnakkaisuutta edellä kuvattu säiemalli on yleisin tapa tehdä ohjelman sisäistä rinnakkaisuutta (toistaiseksi?) toinen yleinen malli on ajaa erillisiä prosesseja, jotka kommunikoivat esimerkiksi verkkoyhteyksillä tai tiedostoilla säiemallin vaihtoehdoksi on tehty monia muitakin rinnakkaisuusmalleja, esimerkiksi: yksittäisiä abstraktimpia operaatioita esim. taustalaskentaan transaktionaalinen muisti viestinvälitykseen perustuvia menetelmiä: säikeillä ei ole (tai ei näytä olevan) jaettua muistia, vaan ne kommunikoivat lähettämällä toisilleen viestejä lisäksi on hajautettu laskenta (distributed computing): rinnakkaisuutta niin, että eri säikeet pyörivät eri koneissa (yleensä perustuen viestinvälitykseen)

37 Abstraktimpia rinnakkaisuusprimitiivejä mm. Scala-kielessä on val x = future( lauseke ) siirtää lausekkeen arvon laskemisen taustalle toiseen säikeeseen jos x:n arvoa yritetään käyttää ennen kuin taustalaskenta on valmis, säie jää odottamaan sitä Scalan par( l1, l2 ) laskee kaksi lauseketta rinnakkain, odottaa niitä ja palauttaa parin, jossa on molempien arvot ja parmap on versio mapista, joka laskee (esim. taulukon) alkiot rinnakkain eri säikeissä näiden etu on, että lukituksia ei tarvitse miettiä itse (paitsi esim. lukkiuman mahdollisuutta) tällaisia abstraktimpia rinnakkaisuusprimitiivejä on moniin kieliin vasta juuri tullut tai tulossa (uudessa) Pythonissa ylläolevien tapaisia on moduulissa concurrent.futures

38 Transaktionaalinen muisti: toiminta transaktionaalinen muisti eli (software) transactional memory perustuu siihen, että rinnakkainen koodi jaetaan transaktioihin lukituksen sijaan transaktiota suoritetaan optimistisesti: luetaan arvoja ilman lukkoja ja tarkistetaan lopuksi että kaikki meni oikein keskeneräinen transaktio ollaan aina valmis perumaan (perutaan sen muistiin tekemät muutokset) muiden säikeiden kannalta transaktio on atominen: joko koko transaktion tekemä muutos näkyy muille säikeille, tai mitään osaa siitä ei näytä vielä olevan tehty ohjelmoijan pitää jakaa rinnakkainen koodi transaktioihin (niistä kohdista, joissa jokin muistiin tehty muutos on valmis näytettäväksi muille säikeille) ja säikeet pitää (yleensä) käynnistää itse mutta lukituskoodia tms. rinnakkaisuudenhallintaa ei tarvitse tehdä (vain transaktiorajat) myös transaktion peruutus tehdään automaattisesti

39 Transaktionaalinen muisti: toteuttaminen transaktionaalisesta muistista on kaksi perustoteutusta: software transactional memory: transaktiot toteutetaan ohjelmallisesti lukoilla ja/tai versioiduilla muistipaikoilla hardware transactional memory: toteutetaan osittain prosessorien sisällä eli raudassa (esim. ytimen sisäisen välimuistin avulla) yleensä rautatoteutuksen transaktiot ovat rajoittuneempia, ja usein sen taustalla on lisäksi ohjelmallinen toteutus puhtaasti ohjelmallinen toteutus lienee vielä yleisin transaktionaalisessa muistissa on kuitenkin käytännön rajoituksia transaktiot eivät käytännössä voi olla kovin isoja sisäkkäiset transaktiot ovat joskus ongelmallisia usein joitain operaatioita ei voi tehdä transaktion sisällä (esim. I/O vähintään puskuroidaan tehtäväksi transaktion lopuksi) transaktionaalinen muisti on melko uusi käsite eikä ole vielä kovin yleisesti käytössä (ehkä tulossa?) lisätietoja: ks. esim. Wikipediasta Software transactional memory

40 Actor-malli mm. Erlang- ja Scala-kielten actor-malli antaa helpomman tavan kommunikoida viestinvälityksellä säikeet kommunikoivat (vain) lähettämällä toisilleen viestiolioita, jotka voivat sisältää mitä tahansa dataa viesti voi olla esim. laskentapyyntö tai haku tietorakenteesta, ja yleensä paluuviestissä lähetetään vastaus vrt. että olion metodikutsu vastaa viestin lähettämistä sille (mutta actor-mallin viestit ovat usein hieman isompia kokonaisuuksia) yleensä kukin säie odottaa silmukassa uusia viestejä ja käsittelee ne tekemällä halutun operaation eroja tavalliseen viestinvälitykseen: lähetetään olioita (eikä tavu- tai merkkijonoja) vastaanotetun viestin käsittelevä koodi valitaan yleensä hahmonsovituksella (vrt. olion metodin valinta) toteutus voi jakaa actorit automaattisesti eri säikeisiin koska kaikki kommunikointi tapahtuu viesteillä, ohjelmoijan ei yleensä tarvitse ajatella lukkoja tai muuta synkronointia

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 19: Rinnakkaisuus Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä) 24. 3. 2011 Sisältö 1 Säikeet 2 Lukot 3 Monitorit 4 Muuta säikeisiin

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

Transaktiot - kertausta

Transaktiot - kertausta Hajautettujen järjestelmien perusteet Transaktiot - kertausta Distributed Systems, Concepts and Design, George Coulouris, Jean Dollimore, Tim Kindberg Addison-Wesley 1988,1994. Pearson Education 2001 ISBN:

Lisätiedot

Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka

Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka Rinnakkaisuus parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa Rinnakkaisuuden etuja: laskennan nopeutuminen (sarjoittuvat operaatiojonot) ilmaisuvoima (ongelman

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen, tommi.mikkonen@tut.fi

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen, tommi.mikkonen@tut.fi 5. Luento: Rinnakkaisuus ja reaaliaika Tommi Mikkonen, tommi.mikkonen@tut.fi Agenda Perusongelmat Jako prosesseihin Reaaliaika Rinnakkaisuus Rinnakkaisuus tarkoittaa tässä yhteydessä useamman kuin yhden

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Olioiden toteuttaminen Riku Saikkonen 28. 11. 2011 Sisältö 1 Miten oliot ja metodikutsut toimivat? 2 Oliot Minkä luokan metodia kutsutaan? Python-esimerkki

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

Käyttöjärjestelmät: poissulkeminen ja synkronointi

Käyttöjärjestelmät: poissulkeminen ja synkronointi Käyttöjärjestelmät: poissulkeminen ja synkronointi Teemu Saarelainen Tietotekniikka teemu.saarelainen@kyamk.fi Lähteet Stallings, W. Operating Systems Haikala, Järvinen, Käyttöjärjestelmät Eri Web-lähteet

Lisätiedot

4. Luento: Prosessit ja säikeets. Tommi Mikkonen, tommi.mikkonen@tut.fi

4. Luento: Prosessit ja säikeets. Tommi Mikkonen, tommi.mikkonen@tut.fi 4. Luento: Prosessit ja säikeets Tommi Mikkonen, tommi.mikkonen@tut.fi Agenda Prosessi Säikeet Keskeytykset Keskeytyskäsittely Käyttöjärjestelmäkutsut Prosessielementti Prosessin hallinta Suunnittelunäkökohtia

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 27.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 27.1.2010 1 / 37 If-käsky toistokäskyn sisällä def main(): HELLERAJA = 25.0 print "Anna lampotiloja, lopeta -300:lla."

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2009 1 / 33 Valintakäsky if syote = raw_input("kerro tenttipisteesi.\n") pisteet = int(syote) if pisteet >=

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 16.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 16.9.2015 1 / 26 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b Pythonin Kertaus Cse-a1130 Tietotekniikka Sovelluksissa Versio 0.01b Listat 1/2 esimerkkejä listan peruskäytöstä. > lista=['kala','kukko','kissa','koira'] ['kala','kukko','kissa','koira'] >lista.append('kana')

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 16.2.2010 1 / 41 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 12.4.2010 T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 1 / 34 Graafiset käyttöliittymät Tähän asti kirjoitetuissa ohjelmissa on ollut tekstipohjainen käyttöliittymä.

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2011 1 / 34 Luentopalaute kännykällä käynnissä! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat

Lisätiedot

812315A Ohjelmiston rakentaminen. Asynkronisuus

812315A Ohjelmiston rakentaminen. Asynkronisuus 812315A Ohjelmiston rakentaminen. Asynkronisuus Ari Vesanen ari.vesanen (at) oulu.fi Yleistä moduulista Tällä kertaa sisältää Java-kielistä monisäieohjelmointia Suoritustapa: Neljästä ohjelmointitehtävästä

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015

815338A Ohjelmointikielten periaatteet 2014-2015 815338A Ohjelmointikielten periaatteet 2014-2015 X Skriptiohjelmointi Sisältö 1. Johdanto 2. Skriptikielten yleispiirteitä 3. Python 815338A Ohjelmointikielten periaatteet, Skriptiohjelmointi 2 X.1 Johdanto

Lisätiedot

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit Liite E - Esimerkkiprojekti E Esimerkkiprojekti Olet lukenut koko kirjan. Olet sulattanut kaiken tekstin, Nyt on aika soveltaa oppimiasi uusia asioita pienen, mutta täydellisesti muotoiltuun, projektiin.

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 21.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 21.9.2015 1 / 25 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Luento 17: Perintä. self.points = 0 self.status = 'Student'

Luento 17: Perintä. self.points = 0 self.status = 'Student' Luento 17: Perintä class Staff(object): def init (self, name, salary): self.salary = salary self.status = 'Staff' def set_name(self, new_name): self.name = new_name def get_status(self): return self.status

Lisätiedot

Rinnakkaisohjelmointi, Syksy 2006

Rinnakkaisohjelmointi, Syksy 2006 Rinnakkaisohjelmointi, Syksy 2006 17.12.2006 Opintopiiri WTF Mika Holmström Paula Kemppi Janne Piippo Lasse Lukkari Javan semaforit 1. Menetelmän käyttötarkoitus ja sovellusalue Semaforin idea kehitettiin

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

Johdatus Ohjelmointiin

Johdatus Ohjelmointiin Johdatus Ohjelmointiin Syksy 2006 Viikko 2 13.9. - 14.9. Tällä viikolla käsiteltävät asiat Peruskäsitteitä Kiintoarvot Tiedon tulostus Yksinkertaiset laskutoimitukset Muuttujat Tiedon syöttäminen Hyvin

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 24.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 24.1.2011 1 / 36 Luentopalaute kännykällä alkaa tänään! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 7.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 7.2.2011 1 / 39 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä Sisällys 11. Javan toistorakenteet Laskuri- ja lippumuuttujat.. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin lopettaminen break-lauseella.

Lisätiedot

Intel Threading Building Blocks

Intel Threading Building Blocks Intel Threading Building Blocks Markku Vajaranta Esko Pekkarinen TBB Pähkinänkuoressa C++ luokkamallinen rinnakkaisuus Abstrahoi rinnakkaisuutta korkean tason tehtävät (tasks) ja niiden skedulointi suuri

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 13: Scheme-tulkki Pythonilla, datan serialisointi, keväästä Riku Saikkonen 11. 12. 2012 Sisältö 1 Scheme-tulkki Pythonilla 2 Datan serialisointi 3 Suunnitelmia

Lisätiedot

Palvelut. Sulautetut järjestelmät Luku 2 Sivu 1 (??) Sulautetut käyttöjärjestelmät

Palvelut. Sulautetut järjestelmät Luku 2 Sivu 1 (??) Sulautetut käyttöjärjestelmät Sulautetut järjestelmät Luku 2 Sivu 1 (??) Palvelut Käyttöjärjestelmän tehtävänä on tarjota ohjelmoijalla erilaisia palveluita Tyypillisin palvelu, jota sulautetut käyttöjärjestelmät tarjoavat on prosessien

Lisätiedot

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4 Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.

Lisätiedot

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA: REFAKTOROINTI 2 (9) SEPA: REFAKTOROINTI 3 (9) VERSIOHISTORIA Version Date Author Description 0.1 2.12.2005 Erik Hakala Ensimmäinen

Lisätiedot

CUDA. Moniydinohjelmointi 17.4.2012 Mikko Honkonen

CUDA. Moniydinohjelmointi 17.4.2012 Mikko Honkonen CUDA Moniydinohjelmointi 17.4.2012 Mikko Honkonen Yleisesti Compute Unified Device Architecture Ideana GPGPU eli grafiikkaprosessorin käyttö yleiseen laskentaan. Nvidian täysin suljetusti kehittämä. Vuoden

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 3: SICP kohdat 2.22.3, 33.1 ja 3.33.3.2 Riku Saikkonen 8. 11. 2010 Sisältö 1 Lisää listoista 2 Symbolit ja sulkulausekkeet 3 Derivoijaesimerkki 4 Muuttujan

Lisätiedot

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

Tentti: T-106.1210 Ohjelmoinnin peruskurssi, osa 1. Yleistä. Tehtävä 1

Tentti: T-106.1210 Ohjelmoinnin peruskurssi, osa 1. Yleistä. Tehtävä 1 ./ Tentti: T-106.1210 Ohjelmoinnin peruskurssi, osa 1 Tenttipäivä: 13.12. 2011 El APUVÄLINEITÄ Yleistä Tentissä on kaksi tehtävää. Ensimmäinen tehtävä on tärkeämpi: sillä pyritään varmistamaan, että jokaisella

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 3.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 3.2.2010 1 / 36 Esimerkki: asunnon välityspalkkio Kirjoitetaan ohjelma, joka laskee kiinteistönvälittäjän asunnon

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.2.2011 1 / 37 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Java kahdessa tunnissa. Jyry Suvilehto

Java kahdessa tunnissa. Jyry Suvilehto Java kahdessa tunnissa Jyry Suvilehto Ohjelma Ohjelmointiasioita alkeista nippelitietoon n. 45 min Tauko 10 min Oliot, luokat ja muut kummajaiset n. 45 min Kysykää Sisältöä ei oikeasti ole 2x45 min täytteeksi,

Lisätiedot

Interaktiivinen tarinankerronta

Interaktiivinen tarinankerronta Interaktiivinen tarinankerronta Tehtävä 1: Tarinan alku pääohjelmaan Main. java ei tehdä muutoksia tulostusrivit tiedostoon Kayttoliittyma.java tulostus lyhyesti sout + tab komennolla Tiedoston Kayttoliittyma.java

Lisätiedot

Ohjelmoinnin perusteet Pythonilla. Teemu Sirkiä, 2015

Ohjelmoinnin perusteet Pythonilla. Teemu Sirkiä, 2015 Ohjelmoinnin perusteet Pythonilla Teemu Sirkiä, 2015 Päivitetty 16.9.2015 Yleistä Materiaali sisältää lähinnä Aalto-yliopiston Ohjelmoinnin peruskurssi Y1:n harjoitustehtävissä tarvittavia keskeisiä asioita

Lisätiedot

Rajapinta (interface)

Rajapinta (interface) 1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä

Lisätiedot

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

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 5: Verkko-ohjelmointi, tapahtumapohjainen ohjelmointi Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 11. 2. 2013 Sisältö 1 Verkko-ohjelmointia:

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä

Lisätiedot

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat

Lisätiedot

1. Olio-ohjelmointi 1.1

1. Olio-ohjelmointi 1.1 1. Olio-ohjelmointi 1.1 Sisällys Olio-ohjelmointi on eräs ohjelmointiparadigma. Olio-ohjelmoinnin muotoja. Ohjelmiston analyysi ja suunnittelu. Olioparadigman etuja ja kritiikkiä. 1.2 Ohjelmointiparadigmoja

Lisätiedot

TIE-20200 Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

TIE-20200 Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely Lyhyt UML-opas UML -pikaesittely UML, Unified Modeling Language Standardoitu, yleiskäyttöinen mallinnuskieli, jota ylläpitää/hallitsee (Object Management Group) OMG Historiaa: 90-luvulla oli paljon kilpailevia

Lisätiedot

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004 Vertailulauseet Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra == yhtäsuuruus!= erisuuruus < pienempi suurempi >= suurempi tai yhtäsuuri Esimerkkejä: int i=7; int j=10;

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Tietorakenneluokkia 2: HashMap, TreeMap Tietorakenneluokkia ja -rajapintoja Java tarjoaa laajan kokoelman tietorakennerajapintoja ja - luokkia. Aiemmin

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op FT Ari Viinikainen Tietokoneen rakenne Keskusyksikkö, CPU Keskusmuisti Aritmeettislooginen yksikkö I/O-laitteet Kontrolliyksikkö Tyypillinen Von Neumann

Lisätiedot

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta 5 Kerta 6 Kerta 7. 1. Toteuta Pythonilla seuraava ohjelma:

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta 5 Kerta 6 Kerta 7. 1. Toteuta Pythonilla seuraava ohjelma: Kerta 2 Kerta 3 Kerta 4 Kerta 5 Kerta 6 Kerta 7 Kerta 2 1. Toteuta Pythonilla seuraava ohjelma: 2. Tulosta Pythonilla seuraavat luvut allekkain a. 0 10 (eli, näyttää tältä: 0 1 2 3 4 5 6 7 8 9 10 b. 0

Lisätiedot

OSA II: Hajautettu ympäristö. Sisältö, osa II. Ei yhteistä muistia. Sanomanvälitys. Etäproseduurikutsu. Rendezvous. Rio 2004 / Auvo Häkkinen

OSA II: Hajautettu ympäristö. Sisältö, osa II. Ei yhteistä muistia. Sanomanvälitys. Etäproseduurikutsu. Rendezvous. Rio 2004 / Auvo Häkkinen OSA II: Hajautettu ympäristö Ei yhteistä muistia 6-1 Sisältö, osa II Sanomanvälitys Etäproseduurikutsu Rendezvous 6-2 Sanomanvälitys Käsitteistöä Kanavat Asiakkaat ja Palvelijat Kommunikointitapoja Andrews

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

Näin järjestän ohjelmointikurssin, vaikka en ole koskaan ohjelmoinut www.helsinki.fi

Näin järjestän ohjelmointikurssin, vaikka en ole koskaan ohjelmoinut www.helsinki.fi Näin järjestän ohjelmointikurssin, vaikka en ole koskaan ohjelmoinut Ohjelmointikurssin järjestäminen Helsingin yliopiston Ohjelmoinnin MOOC-kurssimateriaalin avulla 15.4.2016 1 Linkki Tietojenkäsittelytieteen

Lisätiedot

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin. 2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet

Lisätiedot

Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia.

Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia. MagicDraw-pikaohje Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia. Alkuvalmistelut Windows (sali TC205) 1) Kirjaudu sisään TTY:n intra-tunnuksella.

Lisätiedot

Perintä (inheritance)

Perintä (inheritance) Perintä (inheritance) Perintä on menetelmä, jonka avulla jostakin olemassaolevasta luokasta voidaan johtaa uusi luokka, joka saa automaattisesti käyttöönsä perimänsä luokan ominaisuuksia. Perittävää luokkaa

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 6: Graasten käyttöliittymien ohjelmointia Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 29. 2. 2012 Sisältö 1 GUI-ohjelmointia

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: Perinnän käyttäminen Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 1. 2. 2012 Sisältö 1 Esimerkki perinnästä 2 Pohdintaa perinnän

Lisätiedot

etunimi, sukunimi ja opiskelijanumero ja näillä

etunimi, sukunimi ja opiskelijanumero ja näillä Sisällys 1. Algoritmi Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.1 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

Listarakenne (ArrayList-luokka)

Listarakenne (ArrayList-luokka) Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

Lisätiedot

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

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 14.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 14.2.2011 1 / 55 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

Esimerkki 1: Kahviautomaatti.

Esimerkki 1: Kahviautomaatti. Esimerkki 1: Kahviautomaatti. ÄÄRELLISET AUTOAATIT JA SÄÄNNÖLLISET KIELET 2.1 Tilakaaviot ja tilataulut Tarkastellaan aluksi tietojenkäsittelyjärjestelmiä, joilla on vain äärellisen monta mahdollista tilaa.

Lisätiedot

Zeon PDF Driver Trial

Zeon PDF Driver Trial Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 11.11.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 11.11.2015 1 / 23 Kertausluento Luennolla käydään läpi tenttivaatimuksia ja vanhoja tenttitehtäviä. Lisäksi luennolla

Lisätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

Lisätiedot

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely

Lisätiedot

Harjoitustyö 3 - Millosemeni

Harjoitustyö 3 - Millosemeni Harjoitustyö 3 - Millosemeni Tampereen kaupunki tarjoaa avoin data -sivuillaan Tampereen joukkoliikenteen aikataulut, reitit sekä rajapinnan joukkoliikenteen reaaliaikaiseen seurantaan. Näinpä erilaisille

Lisätiedot

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

19/20: Ikkuna olio-ohjelmoinnin maailmaan

19/20: Ikkuna olio-ohjelmoinnin maailmaan Ohjelmointi 1 / syksy 2007 19/20: Ikkuna olio-ohjelmoinnin maailmaan Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007

Lisätiedot

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

TIES530 TIES530. Moniprosessorijärjestelmät. Moniprosessorijärjestelmät. Miksi moniprosessorijärjestelmä? Miksi moniprosessorijärjestelmä? Laskentaa voidaan hajauttaa useammille prosessoreille nopeuden, modulaarisuuden ja luotettavuuden vaatimuksesta tai hajauttaminen voi helpottaa ohjelmointia. Voi olla järkevää

Lisätiedot

Väylät. Prosessorin tie ulkomaailmaan Pienissä järjestelmissä vain yksi väylä. Osoite, data ja ohjaussignaalit Prosessori ainoa herra (master)

Väylät. Prosessorin tie ulkomaailmaan Pienissä järjestelmissä vain yksi väylä. Osoite, data ja ohjaussignaalit Prosessori ainoa herra (master) Prosessorin tie ulkomaailmaan Pienissä järjestelmissä vain yksi väylä Prosessoriväylä Osoite, data ja ohjaussignaalit Prosessori ainoa herra (master) Suuremmissa erillisiä väyliä Muistiväylä Oheislaiteväylät

Lisätiedot

Pakkauksen kokoaminen

Pakkauksen kokoaminen 13. Pakkaukset 13.1 Sisällys Pakkauksen kokoaminen (package). Pakkaukset ja hakemistorakenne. Pakkauksen luokkien käyttö muissa pakkauksissa (import). Pakkaukset ja näkyvyys. 13.2 Pakkauksen kokoaminen

Lisätiedot

Harjoitustehtävät ja ratkaisut viikolle 48

Harjoitustehtävät ja ratkaisut viikolle 48 Harjoitustehtävät ja ratkaisut viikolle 48 1. Tehtävä on jatkoa aiemmalle tehtävälle viikolta 42, missä piti suunnitella älykodin arkkitehtuuri käyttäen vain ennalta annettua joukkoa ratkaisuja. Tämäkin

Lisätiedot

Kokeellista matematiikkaa SAGE:lla

Kokeellista matematiikkaa SAGE:lla Kokeellista matematiikkaa SAGE:lla Tutkin GeoGebralla 1 luonnollisen luvun jakamista tekijöihin 2. GeoGebran funktio Alkutekijät jakaa luvun tekijöihin ja tuottaa alkutekijät listana. GeoGebrassa lista

Lisätiedot

2. Olio-ohjelmoinista lyhyesti 2.1

2. Olio-ohjelmoinista lyhyesti 2.1 2. Olio-ohjelmoinista lyhyesti 2.1 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen. 2.2 Yleistä Olio-ohjelmointia käsitellään hyvin

Lisätiedot

D B. Levykön rakenne. pyöriviä levyjä ura. lohko. Hakuvarsi. sektori. luku-/kirjoituspää

D B. Levykön rakenne. pyöriviä levyjä ura. lohko. Hakuvarsi. sektori. luku-/kirjoituspää Levyn rakenne Levykössä (disk drive) on useita samankeskisiä levyjä (disk) Levyissä on magneettinen pinta (disk surface) kummallakin puolella levyä Levyllä on osoitettavissa olevia uria (track), muutamasta

Lisätiedot

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 5. Timo Savola. 28. huhtikuuta 2006 UNIX-käyttöjärjestelmä Luento 5 Timo Savola 28. huhtikuuta 2006 Osa I Shell-ohjelmointi Ehtolause Lausekkeet suoritetaan jos ehtolausekkeen paluuarvo on 0 if ehtolauseke then lauseke

Lisätiedot

Condes. Quick Start opas. Suunnistuksen ratamestariohjelmisto. Versio 8. Quick Start - opas Condes 8. olfellows www.olfellows.fi 1.

Condes. Quick Start opas. Suunnistuksen ratamestariohjelmisto. Versio 8. Quick Start - opas Condes 8. olfellows www.olfellows.fi 1. Condes Suunnistuksen ratamestariohjelmisto Versio 8 Quick Start opas Yhteystiedot: olfellows Jouni Laaksonen Poijukuja 4 21120 RAISIO Sähköposti: jouni.laaksonen@olfellows.fi www.olfellows.fi olfellows

Lisätiedot

Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei. Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi lötköjen kansoittamaa alkulimaa simuloiva olioperustainen ohjelma Java-kielellä. Lötköt säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti

Lisätiedot

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti Rinnakkaisohjelmointi kurssi Opintopiiri työskentelyn raportti Opintopiiri: Heikki Karimo, Jesse Paakkari ja Keijo Karhu Päiväys: 15.12.2006 Ohjelmointitehtävä C i C i : Säikeet ja kriittisen vaiheen kontrollointi

Lisätiedot

Hieman linkkejä: http://cs.stadia.fi/~kuivanen/linux/kom.php, lyhyt ohje komentoriviohjelmointiin.

Hieman linkkejä: http://cs.stadia.fi/~kuivanen/linux/kom.php, lyhyt ohje komentoriviohjelmointiin. Linux-harjoitus 9 Linuxin mukana tulevat komentotulkit (mm. bash, tcsh, ksh, jne ) sisältävät ohjelmointikielen, joka on varsin tehokas ja ilmaisuvoimainen. Tähän yhdistettynä unix-maailmasta tutut tehokkaat

Lisätiedot

Avoimen lähdekoodin kehitysmallit

Avoimen lähdekoodin kehitysmallit Avoimen lähdekoodin kehitysmallit Arto Teräs Avoimen lähdekoodin ohjelmistot teknisessä laskennassa -työpaja CSC, 25.5.2009 Avoimen lähdekoodin kehitysmallit / Arto Teräs 2009-05-25

Lisätiedot

Asynkroninen ohjelmointi.net 4.5 versiolla

Asynkroninen ohjelmointi.net 4.5 versiolla Asynkroninen ohjelmointi.net 4.5 versiolla Jari Kallonen Software Specialist at Tieturi Oy Régis Laurent Director of Operations, Global Knowledge Competencies include: Gold Learning Silver System Management

Lisätiedot

Järjestelmäarkkitehtuuri (TK081702) Hajautettu tietokanta. Hajautuksen hyötyjä

Järjestelmäarkkitehtuuri (TK081702) Hajautettu tietokanta. Hajautuksen hyötyjä Järjestelmäarkkitehtuuri (TK081702) Hajautettu tietokanta Hajautettu tietokanta Jokainen hajautettu tietokanta muodostaa oman kokonaisuutensa Loogisesti yhtenäinen data on hajautettu tietokantoihin (eri

Lisätiedot