Moderni muistinhallinta Transaktionaalinen muisti ja rinnakkainen roskienkeruu

Koko: px
Aloita esitys sivulta:

Download "Moderni muistinhallinta Transaktionaalinen muisti ja rinnakkainen roskienkeruu"

Transkriptio

1 TEKNILLINEN KORKEAKOULU Informaatio- ja luonnontieteiden tiedekunta Tietotekniikan tutkinto-ohjelma Moderni muistinhallinta Transaktionaalinen muisti ja rinnakkainen roskienkeruu Kandidaatintyö Tuure Laurinolli Tietotekniikan laitos Espoo 2008

2 TEKNILLINEN KORKEAKOULU Informaatio- ja luonnontieteiden tiedekunta Tietotekniikan tutkinto-ohjelma KANDIDAATINTYÖN TIIVISTELMÄ Tekijä: Tuure Laurinolli Työn nimi: Moderni muistinhallinta Transaktionaalinen muisti ja rinnakkainen roskienkeruu Päiväys: 2. joulukuuta 2008 Sivumäärä: Pääaine: Ohjelmistotekniikka Koodi: T3001 Vastuuopettaja: prof. Lauri Savioja Työn ohjaaja: TkT Vesa Hirvisalo Tässä kandidaatintyössä tutkittiin transaktionaalista muistia rinnakkaisuudehallintamenetelmänä ja rinnakkaista roskienkeruuta. Työ perustuu tuoreisiin tutkimustuloksiin transaktionaalisen muistin toteutuksen ja teorian, sekä rinnakkaisen roskienkeruun alueella. Roskienkeruun osalta työn tavoitteena oli lähteä liikkeelle erilaisten keruumenetelmien ja niihin liittyvien ongelmien perusteista ja esittää lukijalle, miten erilaisia ongelmia on ratkaistu. Roskienkeruun osalta työssä keskityttiin rinnakkaisiin menetelmiin, jotka ovat joko tuotantokäytössä tai tulossa tuotantokäyttöön. Transaktionaalisen muistin osalta taas pyrittiin esittämään muita rinnakkaisuudenhallintakeinoja, sekä antamaan mielikuva niiden ja transaktionaalisen muistin käytöstä esimerkkien kautta. Lisäksi tarkasteltiin transaktionaalisen muistin toteutusstrategioita, ohjelmointitapoja ja yhteyksiä roskienkeruuseen. Avainsanat: rinnakkaisoghjelmointi, muistinhallinta, transaktionaalinen muisti, roskienkeruu Kieli: Suomi i

3 HELSINKI UNIVERSITY OF ABSTRACT OF TECHNOLOGY BACHELOR'S THESIS Faculty of Information and Natural Sciences Degree Program of Computer Science and Engineering Author: Tuure Laurinolli Title of thesis: Modern memory management Transactional memory and concurrent garbage collection Date: December Pages: Professorship: Ohjelmistotekniikka Code: T3001 Supervisor: Professor Lauri Savioja Instructor: Dr. Vesa Hirvisalo This work gives an overview of what transactional memory and concurrent and parallel garbage collection are. The work is based on literary research on current developments in transactional memory implementation and theory, and parallel and concurrent garbage collection. On garbage collection the goal of this work is to demonstrate how garbage collection solves the problem of deallocating memory and to present how various garbage collection techniques solve these problems. The work concentrates on garbage collection techniques that are in production use or are expected to enter production use shortly. On transactional memory the goal is to contrast it with other concurrency management techniques and to give the reader an idea of how they are used through concrete examples. The work also explores various transactional memory implementation strategies and programming patterns related to transactional memory, and the connection of transactional memory to garbage collection. Keywords: Language: concurrent programming, parallel programming, memory management, transactional memory, garbage collection Finnish ii

4 Alkulause Kiitokset ohjaajalleni, Vesa Hirvisalolle, mielenkiintoisesta aiheesta ja ohjauksesta tutkimuksen harhailtua. Espoossa 2. joulukuuta 2008 Tuure Laurinolli iii

5 Käytetyt lyhenteet CAS CCR DSTM GHC GC MCAS HTM STM Compare And Swap; Atominen ehdollinen korvauskäsky Conditional Critical Section; Ehdollinen kriittinen osio Dynamic STM; STM, jossa käytettävät muistialueet eivät ole etukäteen määriteltyjä Glasgow Haskell Compiler; Haskell-kielen kääntäjä Garbage Collection; Roskienkeruu Multiword CAS; Monen sanan atominen ehdollinen korvauskäsky Hardware Transactional Memory; Rautapohjainen transaktionaalinen muisti Software Transactional Memory; Ohjelmallinen transaktionaalinen muisti TM Transactional Memory; Transaktionaalinen muisti iv

6 Sisältö Alkulause iii Käytetyt lyhenteet iv 1 Johdanto 1 2 Muistinhallinta Yleistä Roskienkeruu Roskienkeruun toteutus Rinnakkaisuus ja roskienkeruu Rinnakkaisuuden hallinta Kriittiset osiot Lukot Lukottomat algoritmit Transaktionaalinen muisti Transaktionaalinen toteutus ja käyttö Transaktionaalinen koodi Transaktionaalisen muistin toteutus Transaktionaalisen muistin hyödyntäminen sovelluskoodissa Transaktionaalinen muisti ja roskienkeruu v

7 5 Yhteenveto 20 Kirjallisuutta 22 vi

8 Luku 1 Johdanto Muistinhallinta on vaikea ja tärkeä ongelma. Tietokonejärjestelmän kannalta on tärkeää, että eri prosessit pääsevät lukemaan ja kirjoittamaan vain omaa muistiaan. Sovellusohjelmoijan kannalta taas on tärkeää, että sovellus varaa ja vapauttaa muistia oikein. Järjestelmätason prosessien erotus on nykyään ratkaistu virtuaalimuistilla, jonka käyttöjärjestelmä ja rauta yhteistyössä toteuttavat. Virtuaalimuisti tarkoittaa jokaiselle prosessille esitettävää omaa yksityistä muistiavaruutta, johon muut prosessit eivät pääse vaikuttamaan. Virtuaalimuistijärjestelmä myös erottaa prosessien virtuaaliset osoiteavaruudet fyysisestä osoiteavaruudesta. Sovellusohjelman muistinvapautusongelman taas pääosin ratkaisee siirtyminen moderniin ohelmointikieleen, jonka ominaisuuksiin kuuluu roskienkeruu. Roskienkeruujärjerjestelmä vapauttaa automaattisesti muistin, kun siihen ei enää viitata ohjelmasta. Viime aikoina roskienkeruun sisältävien korkean tason ohjelmointikielten käyttö on yleistynyt huomattavasti, mutta roskienkeruu on silti myös aktiivinen tutkimusalue. Viime aikoina myös prosessorit ovat kehittyneet pikemminkin suoritusydinten määrässä kuin yksittäisten ytimien suoritusnopeudessa. Erillisten suoritusytimien koko laskentatehon hyödyntämiseen tarvitaan joko erillisiä prosesseja tai rinnakkaisohjelmointia. Erillisten yksisäikeisten prosessien tapauksessa olemassaolevat muistinhallintatekniikat riittävät, eivätkä keskenään kommunikoimattomat prosessit myöskään tarvitse synkronointia kommunikaation vuoksi. Tutkimuksen kannalta erillisiä prosesseja kiinnostavampaa onkin rinnakkaisohjelmointi. Tässä työssä rajoitun tarkastelemaan jaetun muistin rinnakkaisohjelmointia (shared memory multiprocessing). Luvussa 2 tarkastelen muistinhallintaa käyttöjärjestelmän ja ohjelmointikielen ajonaikaisen ympäristön näkökulmasta. Esittelen perinteisen virtuaalimuistin ja roskienkeräyksen, sekä roskienkeräyksen parem- 1

9 LUKU 1. JOHDANTO 2 paan rinnakkaistamiseen tähtääviä algoritmeja. Luvussa 3 tarkastelen rinnakkaisuuden hallintaa ohjelmoijan näkökulmasta. Esittelen rinnakkaisuudenhallintamenetelmistä lyhyesti lukkopohjaiset kriittiset osiot ja lukottomat algoritmit, sekä transaktionaalisen muistin. Luvussa 4 tarkastelen transaktionaalisen muistin toteutuksia ja vaatimuksia sen käytölle. Luku 5 on yhteenveto.

10 Luku 2 Muistinhallinta 2.1 Yleistä Nykyään yleisimmät käyttöjärjestelmät käyttävät muistinhallintaan virtuaalimuistia (virtual memory). Virtuaalimuistin toiminnan ymmärtäminen on oleellista, koska käyttöjärjestelmän päällä pyörivien ohjelmien muistinhallinta väkisinkin rakentuu virtuaalimuistin päälle. Virtuaalimuistin perusteista on olemassa runsaasti kirjallisuutta, esimerkiksi Tanenbaumin (2001) perusteos käyttöjärjestelmistä Modern operating systems. Seuraavissa kappaleissa esittelen virtuaalimuistin perusteet. Viimeisessä kappaleessa esittelen myös viime vuosien tutkimusta. Virtuaalimuistijärjestelmässä kullakin prosessilla on oma virtuaalinen osoiteavaruus, josta ne voivat varata muistia. Prosessin virtuaaliosoiteavaruuden käytössä olevat osat kuvataan järjestelmän fyysiseen osoiteavaruuteen, käytännössä lähinnä fyysiseen muistiin. Virtuaaliosoitteiden muuntamisesta fyysisiksi osoitteiksi huolehtii prosessorin muistinhallintayksikkö yhdessä käyttöjärjestelmän kanssa. Muistinhallintayksikkö esimerkiksi kutsuu käyttöjärjestelmän selvittämään tilanteen, mikäli prosessi yrittää käyttää muistiosoitetta, jolle ei ole kuvausta (mapping) fyysiseen muistiin. Virtuaalimuisti toteutetaan yleensä muistisivujen (memory page) avulla. Sivulla tarkoitetaan tietyn kokoista osoiteavaruuden aluetta, jonka tarkkuudella virtuaalimuistin kuvaukset fyysiseen muistiin ovat määriteltävissä. Käytännössä muistisivut ovat kooltaan kahden potensseja, jolloin kokonaisen muistiosoitteen muuntaminen vastaavan sivun osoitteeksi on helppoa osoitteen alimmat bitit nollaamalla. Osoitekuvausten lisäksi muistisivuihin liittyy usein myös muita attribuutteja, kuten muistin käyttötapa (luku/kirjoitus/suoritus). Virtuaalimuistin sivuja vastaavat fyysisen muistin sivukehykset. Kun virtuaalimuistin sivu on käytös- 3

11 LUKU 2. MUISTINHALLINTA 4 sä, sijaitsee sen sisältö joko jossain fyysisen muistin sivukehyksessä (page frame) tai poissa fyysisestä muistista taustamuistissa (backing store), kuten esimerkiksi kiintolevyllä. Tyypillisesti virtuaalimuistiin liittyy myös mahdollisuus jakaa fyysisiä sivuja eri prosessien välillä, eli jaettu muisti (shared memory). Jaettu muisti tarkoittaa, että eri prosessien osoiteavaruudessa olevat osoitteet kuvataan samoihin fyysisiin sivuihin. Vain luettavissa olevaa jaettua muistia käytetään esimerkiksi jaettujen kirjastojen (shared library) ohjelmakoodin jakamiseen useiden prosessien välillä fyysisen muistin säästämiseksi. (Tanenbaum, 2001) Prosessit voivat yleensä myös pyytää käyttöjärjestelmältä jaetun muistin alueita, joiden kautta ne voivat kommunikoida keskenään prosessin sisäisten säikeiden tapaan (IEEE, 2004). Näin voidaan myös prosessien välillä säikeiden tapaan käyttää jaettua muistia kommunikaatiokanavana. Tutkimuskohteita virtuaalimuistissa ovat esimerkiksi sivunkorvausalgoritmit (Paajanen, 2007). Käyttöjärjestelmässä sivunkorvausalgoritmi tekee päätöksen siitä, mikä muistisivu poistetaan (is evicted) taustamuistiin, kun prosessi haluaa käyttää sellaista sivua, jonka data ei ole muistissa, ja tyhjiä sivukehyksiä ei ole. Lisäksi virtuaalimuistiin liityviä suojaustoimintoja voidaan käyttää esimerkiksi roskienkeruun tehostamiseen (Click et al., 2005). 2.2 Roskienkeruu Yleisesti roskienkeruulla tarkoitetaan ohjelman käyttämien muistiobjektien automaattista vapauttamista. Perinteisesti ohjelmointikielissä on kaksi erillistä tapaa varata muistia: kutsupino (call stack) ja keko (heap). Pinosta varattu muisti vapautuu automaattisesti proseduurikutsun palatessa, ja keosta varattu muisti on käytettävissä, kunnes ohjelman suoritus päättyy. Koska muistia on rajallisesti, voidaan keosta varattua muistia myös vapauttaa. Perinteisesti muistin varaamisen ja vapauttamisen on tehnyt ohjelmoija erityisillä kirjastofunktioilla. Muistin vapauttaminen ohjeman suorituksen aikana on tällöin kokonaan ohjelmoijan vastuulla. Muistin vapauttamiseen liittyy kahdenlaisia ohjelmointivirheitä: roikkuva osoitin (dangling pointers) ja muistivuoto. Roikkuva osoiting tarkoittaa vapautettuun objektiin osoittavaa viitettä, ja muistivuoto objektia, johon ei enää ole viitteitä ohjelmassa, ja jota ei siten voida vapauttaa ohjelman sisältä (Varga, 2006). Mikäli muistia olisi rajattomasti, ei muistia tarvitsisi vapauttaa, eikä edellämainittuja virheluokkia olisi. Roskienkeruu luo illuusion rajattomasta muistista. Illuusio on teoriassa mahdollinen, mikäli ohjelmasta ei koskaan sen suorituksen aikana ole saavutettavissa

12 LUKU 2. MUISTINHALLINTA 5 enempää muistia kuin on varattavissa, ja kaikki saavuttamattomissa oleva muisti pystytään vapauttamaan. Käytännössä roskienkeräin tutkii ohjelmassa olevia muistiosoituksia ja vapauttaa automaattisesti objektit, jotka eivät enää ole saavutettavissa ohjelmasta. Vapautettu muisti voidaan varata uudelleen myöhemmin suorituksen aikana, jolloin illuusio rajattomasta muistista säilyy. Roskienkeruu määritelmän mukaan eliminoi muistivuodot vapauttamalla ohjelmasta saavuttamattomissa olevan muistin. Myös dangling pointers-ongelma eliminoituu, mikäli ohjelmointikielestä samalla poistetaan mahdollisuus vapauttaa muistia väkisin, sillä roskienkeräin ei vapauta muistia, johon on viitauksia. Roskienkeruun yleiseen problematiikkaan liittyy ero muistin elossaolon (liveness) ja saavutettavuuden (reachability) välillä. Objekti, johon ei ohjelman millään mahdollisella suorituspolulla viitata, on kuollut. Kuollut objekti voi kuitenkin olla periaattessa saavutettavissa, mikäli tarkastellaan vain objektien välisiä viittauksia. Periaatteessa roskienkeräin voisi vapauttaa kaikki kuolleet objektit, mutta ohjelman kaikkien suorituspolkujen tarkastelu on käytännössä mahdotonta. Käytännössä oletetaankin kaikki saavutettavissa roskienkerääjät poistavatkin objekteja vasta, kun niitä ei enää voi saavuttaa. Hertz ja Berger (2005) ovat tutkineet elävyys- ja saavutettavuusoraakkeleihin perustuvan eksplisiittisen muistinhallinnan ja todellisten roskankerääjien suorituskykyä. He toteavat yhteenvedossaan, että roskienkeruu on suorituskyvyltään kilpailukykyinen eksplisiittisen muistinhallinnan kanssa, kunhan muistia on käytettävissä runsaasti. Muistin vapauttamisen lisäksi roskienkerääjä voi tehdä muutakin hyödyllistä. On toteutettu roskienkerääjiä, jotka roskien tuhoamisen sijaan lisäksi tiivistävät (compact) elävät objektit yhteen muistissa. Kun objektit sijaitsevat muistissa peräjälkeen ja loppu muisti on tyhjä, voidaan muistin toteuttaa tehokkaasti siirtämällä vapaan muistin alkuun osoittavaa osoitinta. Muistin tiivistäminen myös poistaa perinteistä vapaiden muistialueiden listaan perustuvaa roskienkerääjää ja muistiallokoijaa vaivaavan muistin sirpaloitumisongelman. Sirpaloitumisella vapaan muistin pilkkoutumista pieniin osiin objektien väliin. Ongelmia sirpaloituminen aiheuttaa allokoinnin yhteydessä; muistia voi olla vapaana paljonkin, mutta siitä ei ole mitään hyötyä, ellei tarpeeksi suurta jatkuvaa muistialuetta löydy. 2.3 Roskienkeruun toteutus Roskienkeruujärjestelmiä on perinteisesti toteutettu kahdella tavalla: viittauslaskennalla (reference counting) ja viittausten seurannalla (tracing). Bacon et al. (2004) esittävät näiden olevan toistensa duaaleja, ja että nykyään kielten toteutuksissa käytetyt, tehokkaat menetelmät ovat poikkeuksetta viitauslaskennan ja

13 LUKU 2. MUISTINHALLINTA 6 viittausten seurannan hybridejä. Esittelen seuraavaksi lyhyesti perusnemetelmät. Viittausten seuranta on menetelmistä suoraviivaisempi. Sen perustana on suoraan saavutettavuuden käsite. Perusmuodossaan viittausten laskennassa käydään läpi kaikki ohjelman pinoissa ja globaaleissa muuttujissa, eli juurijoukossa (root set) olevat muistiviittaukset transitiivisesti, ja merkataan jokainen näin läpikäyty objekti. Objektit, joita ei merkitä, ovat saavuttamattomissa ohjelmasta, ja ne voidaan vapauttaa. Juurijoukon viittausten transitiivinen sulkeuma ja viitatut objektit muodostavat viittausgraan, joka on heikosti kytketty. Viittauslaskennassa kuhunkin muistiobjektiin liitetään laskuri, jota kasvatetaan aina kun objektiin luodaan uusi viittaus, ja vähennetään aina kun viittaus objektiin häviää. Mikäli vähennyksen jälkeen viittauslaskurin arvo on 0, ei objektiin enää ole viittauksia ohjelmasta, ja se voidaan vapauttaa. Perusmuodossaan viittauslaskenta ei välttämättä löydä kaikkia roskia, mikäli viittausgraa sisältää syklejä. Kun viimeinen viittaus ohjelmasta sykliseen rakenteeseen poistuu, on kaikkien sykliin kuuluvien objektien edelleen yli nollan. Viittauslaskurit eivät myöskään enää voi päivittyä, sillä sykli ei enää ole saavutettavissa ohjelmasta, eikä ohjelma näin ollen voi poistaa syklin sisäisiä viittauksia. Viittauslaskenta tarvitsee parikseen jonkin syklit keräävän menetelmän, mikäli tavoitteena on täydellinen roskienkeruumenetelmä. Varga kertoo gradussaan muutamista olemassaolevista ratkaisuista. Perusideana näissä on etsiä potentiaalisia syklin osia, vähentää kokeellisesti niiden viittauslaskuria, ja tutkia, purkautuuko jokin sykli. Viittausten seurantaan perustuvista kerääjistä on olemassa useita variantteja. Alun perin kerääjät vain poistivat lisäsivät merkkaamattomien objektien käyttämän muistin vapaiden muistialueiden listaan (mark-and-sweep). Myöhemmin on toteutettu myös tiivistäviä ja kopioivia kerääjiä. Kopioiva kerääjä on tiivistävän kerääjän variantti, joka kopioi elävät objektit toiseen muistialueeseen saman muistialueen sijaan. Tiivistämisen suurin ongelma on osoittimien päivittäminen tiivistämisen yhteydessä, kun objekteja siirrellään ympäriinsä muistissa. Kopioiva kerääjä helpottaa tämän osoitinten päivitystä, koska alkuperäisiä objekteja ei ylikirjoiteta. (Varga, 2006) Toinen suuri kehitysaskel ennen rinnakkaisten kerääjien yleistymistä oli sukupolviperustainen keräys. Havaittiin, että suurin osa objekteista kuolee nuorena, ja vanhat objektit yleensä elävät hyvin vanhoiksi (Varga, 2006; Ungar, 1984). Havainnon pohjalta on kehitetty sukupoleviperustaisia roskienkerääjiä (generational garbage collector), joissa muisti jaetaan erillisiin alueisiin eri ikäisiä objekteja varten. Kaikki allokointi tehdään uusien objektien alueella, josta objektit siirtyvät vanhempien objektien alueille, kun selviytyvät tarpeeksi monesta roskienkeruusta (engl. termi tenuring). Tavallisesti tarvittaessa lisää muistia kerätään

14 LUKU 2. MUISTINHALLINTA 7 vain nuorten objektien alue, jonka sisältämistä objekteista suurin osa on kuollut. Jotta nuoren alueen kerääminen on mahdollista, täytyy ohjelmointikielen ajonaikaisne järjestelmän pitää kirjaa viittauksista vanhalta alueelta uudelle alueelle. Tätä viittausjoukkoa nimitetään englanninkielisessä kirjallisuudessa muistetuksi joukoksi (remembered set). (Varga, 2006) 2.4 Rinnakkaisuus ja roskienkeruu Rinnakkaisuus tarkoittaa roskienkeruun yhteydessä kahta asiaa: ohjelman suorituksen ja roskienkerääjän suorituksen samanaikaisuutta (concurrent garbage collection), ja useampien roskienkeruusäikeiden rinnakkaista suoritusta (parallel garbage collection). Molemmista aiheista on olemassa varsin käytännönläheistä tutkimusta, josta tarkemmin seuraavassa. Käytännön kannalta kiinnostavin tutkimus on (Detlefs et al., 2004), joka esittelee Garbage-Firstroskienkeruumenetelmän (G1). Kyseessä on rinnakkainen ja samanaikainen roskienkerääjä, jossa muisti jaetaan blokkeihin, joista voidaan tarpeen vaatiessa kerätä jokin alijoukko. G1:n nimi tulee siitä, että blokkien kuolleisuusasteesta pidetään kirjaa, ja ensisijaisesti kerätään kokonaan tai lähes kokonaan kuolleita blokkeja. Kerääjä on suurelta osin rinnakkainen, eli ohjelman säikeet (mutator threads) voivat jatkaa suoritusta myös suurimman osan keräykseen kuluvasta ajasta. G1:n päätavoitteena on lyhentää roskienkeruun aiheuttamia suorituskatkoja. Detlefs et al. toteavat kokeissaan, että verrattuna olemassaoleviin Javan roskienkerääjiin, lyhenevät pisimmät suorituskatkot merkittävästi. G1:n läpäisykyky kuitenkin (throughput) on huonompi kuin olemassaolevien kerääjien. Muita oleellisia eroja aikaisempiin kerääjiin on G1:n blokkien runsaasta määrästä johtuva blokkien välisten välisten viittausjoukkojen aiheuttama tilakustannus. Tilakustannusta pyrittiin pienentämään ikäpohjaisella optimoinnilla, jossa allokaattoreiden käytössä olevat, eli nuorimman sukupolven blokit kerätään joka seuraavassa keräyksessä, eikä niistä ulospäin osoittavista viittauksista pidetä kirjaa. Huomattavasti G1:tä muistuttaa GHC-ympäristöön (Glasgow Haskell Compiler) toteutettu rinnakkainen, ei-samanaikainen roskienkerääjä (Marlow et al., 2008). Marlow'n et al Kerääjä perustuu myös keon jakamiseen blokkeihin, mutta blokit ovat pienempiä kuin G1:ssä. Marlow'n et al kerääjässä myöskin ikäpohjaisuus on G1:tä suuremmassa roolissa. Heidän kerääjässään vain viittauksista vanhoista blokeista nuorempiin pidetään erikseen kirjaa, ja sukupolvia on enemmän kuin G1:ssä.

15 LUKU 2. MUISTINHALLINTA 8 Marlow'n et al rinnakkainen kerääjä skaalautuu prosessorimäärän kasvaessa vaihtelevasti kuormaste riippuen. Parhaimmillaan kahdeksan prosessorin tapauksessa saavutettiin 4.5-kertainen keräysnopeus verrattuna samaan menetelmään yhdellä prosessorilla suoritettuna. Huonoimmillaan kahdeksan prosessorin järjestelmässä kuitenkin jäätiin alle kaksinkertaiseen nopeuteen yksiprosessorijärjestelmään nähden. Tutkimuksessa ei ole kvantitatiivista vertailua muihin keräysmenetelmiin. Click et al. (2005) esittävät rinnakkaisen ja samanaikaisen roskienkeruumenetelmän, joka muistuttaa huomattavasti G1:tä. Heidän menetelmänsä (Pauseless) vaatii rauta- ja käyttöjärjestelmätukea, eikä siten ole sovellettavissa täysin yleisesti. Pauseless on suunniteltu ja toteutettu Azul Systems-yhtiön sisällä heidän moniprosessoriarkkitehtuurilleen, eikä ole suoraan yleisesti sovellettavissa. Arkkitehtuuri sinänsä on kuitenkin kiinnostava, koska se mahdollistaa n. 400 rinnakkaisen välimuistikoherentin suorittimen järjestelmien rakentamisen. Lisäksi suorittimien käskykantaan on tehty erityisesti roskienkeruuta tukevia lisäyksiä. Pauseless pyrkii samanaikaisesti lyhyisiin suorituskatkoihin, mutta mahdollistaa ilmeisesti myös korkean läpäisyn. Samoin kuin G1, Pauseless jakaa muistin lohkoihin. Lohkot vastaavat muistisivuja, mitä hyödynnetään myöhemmin päivitettäessä kopioitujen objektien osoitteita. G1:stä poiketen Pauseless ei ole ikäpohjainen, vaan koko elossa oleva muisti käydään läpi jokaisessa merkkaussyklissä. Mielenkiintoista on samanaikaisen merkkauksen toteutus siten että se ei estä ohjelmasäikeiden suoritusta kuin juurijoukon etsinnän ajaksi. Kukin ohjelmasäie suorittaa merkkauksen ollessa käynnissä jokaisen viittauksen luvun yhteydessä lukumuurin, joka merkkaa viittauksen luetuksi ja lisää sen keräääjän läpikäytävien viittausten joukkoon, mikäli sitä ei vielä oltu merkattu luetuksi. Näin vältetään ongelma silloin kun ohjelmasäie lukee merkkaamattoman viittauksen muistista ja poistaa sen muistista, mutta säilyttää viittauksen esimerkiksi pinossa. Ilman lukumuuria viitattu objekti olisi merkkausvaiheen lopussa merkkaamaton, ja siten kerättävissä, vaikka siihen olisi viittaus pinosta. Mielenkiintoista on myös laiska viittausten uudelleenohjaus kopiointivaiheen aikana. Erillistä uudelleenohjausvaihetta ei ole, vaan lopullisesti uudelleenohjaukset tehdään seuraavan keruusyklin merkkausvaiheessa. Laiska uudelleenohjaus toimii siten että kopiointivaiheen lähdesivut merkataan suojatuiksi roskienkerääjälle varatulla tasolle. Mikäli ohjelma yrittää käyttää kopioitavaa sivua kesken kopioinnin, tapahtuu suojausvirhe, ja ohjelmasäie suorittaakin kerääjän keskeytyksen. Keskeytyskoodi etsii oikean lähdesivulta oikean forwarding pointerin, ja lukee alkuperäisen sijaan sen. Mikäli kopiointia ei vielä ole suoritettu, se myöskin ensin kopioi objektin. Roskienkeruutason suojausvirheen keskeytys suoritetaan kutsuvassa säikeessä, mutta kohotetuin oikeuksin, joten kallista järjestelmäkutsua ei tarvita.

16 LUKU 2. MUISTINHALLINTA 9 Pauseless-algoritmia testattiin Sunin, IBM:n ja BEA:n Java-virtuaalikoneiden roskienkerääjiä vastaan. Testinä oli muokattu SpecJBB. Testeissä mitattiin transaktioiden kestoa, eli käytännössä pitkien roskienkeruutaukojen vaikutusta transaktioden kestoon, sillä transaktiot itsessään ovat lähes vakiomittaisia. Testituloksissa Pauseless on selkeästi kilpailijoitaan parempi. Yli 3 ms kestäneitä transaktioita ei Pauselessilla ollut lainkaan, kun lähimmäksi päässeellä BEA:lla niitä oli yli 20%. Lisäksi on huomattava, että BEA:n yli 3 ms kestäneet transaktiot kestivät lähes kaikki vähintään noin 100 ms. On huomioitava, että testitulokset eivät ole helposti toistettavissa, koska ainoa Pauseless-toteutus vaatii erikoista rautaa toimiakseen, ja koska tarkkoja tietoja käytetystä testistä ei ole. Silti tulokset nähdäkseni puhuvat Pauselessin ja sen pohjalla olevan arkkitehtuurin puolesta. Kaikki esitelly rinnakkaisuuteen ja samanaikaisuuteen pyrkivät roskienkeruualgoritmiet perustuvat muistin jakamiseen aiempia sukupolviperustaisia algoritmeja ueampaan osaan. Kaikki myös vaikuttavat onnistuvan tavoitteissaan nopeamman tai vähäkatkoisemman roskienkeruun suhteen. Keräimistä G1 on edelleen kehitysasteella, mutta sen pitäisi olla mukana seuraavassa Sunin Java-virtuaalikoneen versiossa - ainakin se löytyy jo OpenJDK:n versionhallinnasta. Vastaavasti Pauseless on ollut jo vuosia tuotantokäytössä, ja GHC:n kerääjä on mukana GHC:n versiossa

17 Luku 3 Rinnakkaisuuden hallinta 3.1 Kriittiset osiot Rinnakkaisohjelmoinnin perusongelma ovat kilpatilanteet (race condition). Kilpatilanne on hieman harhaanjohtava nimitys, jolla yleensä tarkoitetaan mahdollisuutta päätyä kilpaan (race). Kilpaongelma (race hazard) on kuvaavampi, mutta vähän käytetty termi, eikä suomennos ole vakiintunut. Kirjallisuudessa termille on esitetty erilaisia tarkkoja määritelmiä, joita Netzer ja Miller (1992) selvittävät tutkimuksessaan. Tässä luvussa tarkoitan kilvalla Netzerin et al. käyttämää termiä data race. Kilpa on tilanne, jossa säikeiden suoritusjärjestys (scheduling) vaikuttaa ohjelman suorituksen oikeellisuuteen, vaikka säikeiden suorittamien toimintojen suoritusjärjestys itsessään ei ole oikeellisuuden kannalta oleellinen. Esimerkiksi lipunmyyntijärjestelmän varatessa samanaikaisesti paikkoja kahdelle eri asiakkaalle ei lopputuloksen oikeellisuuden kannalta ole merkitystä, missä järjestyksessä paikat valitaan tai mitkä paikat kukin asiakas siten saa, mutta ohjelma ei saa varata samoja paikkoja usealle asiakkaalle. Kilpaongelmien ratkaisuna jaetun muistin rinnakkaisohjelmoinnissa ovat perinteisesti kriittiset osiot (critical section). Kriittisellä osiolla tarkoitetaan sellaista ohjelman osiota, jota vain yksi säie kerrallaan voi suorittaa. Lipunvarausesimerkissä voisi paikkojen poiminta olla kriittinen osio. Mikäli kukin muuten samanaikainen paikkoja varaava säie valitsee paikat yksi kerrallaan, ei kilpaa synny, sillä myöhemmät paikkoja varaavat säikeet näkevät aikaisempien tekemät varaukset. 10

18 LUKU 3. RINNAKKAISUUDEN HALLINTA Lukot Kriittisiin osioihin pääsyn kontrollointiin on olemassa useita menetelmiä, joista lukot (mutex, mutual exclusion lock), sekä niiden yleistykset semaforit ja monitorit ovat yleisesti käytössä. Lukkoprimitiivin periaatteena on, että yksi säie kerrallaan voi ottaa lukon (acquire), suorittaa kriittisen osionsa ja vapauttaa sitten lukon (release). Mikäli toinen säie yrittää ottaa lukon samaan aikaan kun se on ensimmäisen hallussa, estyy toisen säikeen suoritus (engl. the other thread blocks) siihen asti kunnes ensimmäinen säie vapauttaa lukon. (Tanenbaum, 2001) Lukot ratkaisevat rinnakkaisen datankäsittelyn ongelman muuntamalla sen peräkkäiseksi. Suorituskykymielessä peräkkäiseen suoritukseen siirtyminen poistaa kaiken rinnakkaisuudesta saatavan hyödyn, ja lisäksi lukkojen käsittely itsessään hidastaa ohjelman suoritusta. Käytännössä voidaan rinnakkaisuutta lisätä pienentämällä lukkojen vaikutusaluetta - puhutaan karkeasta ja hienojakoisesta lukituksesta (coarse-grained ja ne-grained locking). Lipunvarausjärjestelmässä esimerkki karkeasta lukituksesta olisi aiemmin mainittu koko paikkojen valinnan sijoittaminen yhteen kriittiseen osioon. Koska vain paikkojen valinnan ulkopuolinen osa varausprosessista voitaisiin suorittaa rinnakkain, karkea lukitus rajoittaisi saavutettavaa rinnakkaisuutta. Hienojakoinen lukitus taas voisi lipunvarausjärjestelmässä tapahtua siten että jokaiseen paikkaan liittyisi lukko. Säie ottaisi kaikkien haluamiensa paikkojen lukot haltuunsa, merkitsisi paikat varatuksi, ja vapauttaisi lopuksi lukot. Tällöin paikanvaraussäikeet voisivat parhaimmillaan toimia rinnakkain ilman kilpailua lukoista (contention), mikäli ne eivät yrittäisi varata samoja paikkoja. Hienojakoiseen lukitukseen liittyy kuitenkin ongelmia ohjelman suorituksen oikeellisuuden kanssa. Tarkastellaan lipunvarausesimerkin tilannetta, jossa asiakkaat A ja B yrittävät varata kahta paikkaa, kun täsmälleen kaksi paikkaa on vapaana. Mikäli säie A ottaa paikan 1 lukon ja säie B ottaa paikan 2 lukon, ja tämän jälkeen säie B yrittää ottaa paikan 1 lukon ja säie A paikan 2 lukon, päädytään lukkiumaan (deadlock). Lukkiumassa olevia säikeitä ei voi suorittaa, koska ne kaikki odottavat jonkin toisen lukkiumaan kuuluvan säikeen hallussa olevaa lukkoa. Lipunvarausesimerkissä ongelmalta voitaisiin välttyä esimerkiksi ottamalla paikkojen lukot aina paikkojen numerojärjestyksessä (Tanenbaum, 2001, 3.6.4). Aina lukoilla ei kuitenkaan ole luonnollista järjestystä, mikä rajoittaa kriittisten osioiden käyttökelpoisuutta rinnakkaisuudenhallinnassa toteutuksessa. Erityisesti lukkojen käyttö kirjastojen sisällä on ongelmallista, mikäli kirjastot voivat esimerkiksi kutsua toisia kirjastoja ristiin, tai aiheuttaa vastakutsuja (callback) takaisin sovelluksen koodiin. Esimerkiksi Kahden lukkoja sisäisesti käyttävän, risitiin toisiaan kutsuvan kirjastoa johtaa helposti lukkiumaan, jos kirjastot voivat joutua

19 LUKU 3. RINNAKKAISUUDEN HALLINTA 12 odottamaan kumpikin toistensa lukkoa pitäen samaaan aikaan omaa lukkoaan hallussaan. 3.3 Lukottomat algoritmit Lukkojen aiheuttamia rinnakaisuusrajoituksia on vältetty suunnittelemalla ohjelman käyttämät tietorakenteet siten että niitä voidaan käsitellä rinnakkaisesti ilman lukkoja. Yksinkertaisista tietorakenteista, kuten jonoista on olemassa tehokkaita lukottomia versioita, esimerkiksi Michaelin ja Scottin (1996) lukoton jono. Lukottomien algoritmien toteutuksia on myöskin jo yleisten ohjelmointikielten standardikirjastoissa. Esimerkiksi Java-kielen standardikirjaston java.util.concurrentpaketti sisältää useita kokonaan tai osittain lukottomia rinnakkaisia tietorakenteita (Inc., 2008) ja CAS-semantiikan tarjoavia tyyppejä. Intel on julkaissut C++kielelle vastaavan rinnakkaisohjelmointikirjaston (Corporation, 2008). Monimutkaisten tietorakenteiden manipulointi ilman lukkoja kuitenkin on vaikeaa. Fraser (2004) toteaa, että tällaisia algoritmeja ole juurikaan julkaistu. Monimutkaisten tietorakenteiden manipuloinnin tekee vaikeaksi prosessorien rajoittunut käskykanta. Fraser toteaa erityisesti, että monimutkaisten tietorakenteiden käsittely ja kriittisten osioiden korvaaminen pelkkiä primitiivikäskyjä käyttäen on epäkäytännöllistä (Fraser, 2004, luku 2.4). Hän ehdottaa ratkaisuksi laajempia atomisia muistioperaatioita: MCAS-primitiiviä (Multiword Compare And Swap) ja transaktionaalista muistia. Yksinkertaisten tietorakenteiden tapauksessa erityisesti kyseistä tietorakennetta varten suunnitelluilla lukottomilla algoritmeilla voidaan kuitenkin sopivissa olosuhteissa saavuttaa huomattavasti parempi suorituskyky kuin esimerkiksi transaktionaalisella muistilla (Fraser, 2004, kuva 6.1). Onneksi lipunvarausesimerkin tietorakenne on yksinkertainen. Lukottomasti sen voi toteuttaa atomisen korvauskäskyn (compare and set, CAS) avulla. CASkäskyllä voidaan vaihtaa yhden muistipaikan arvo atomisesti ja ehdollisesti toiseksi. Mikäli muistipaikan nykyinen arvo on odotettu. Mikäli muistipaikan nykyinen arvo poikkeaa odotetusta, CAS-käsky ei korvaa sitä uudella arvolla, vaan arvon poikenneen odotetusta. CAS-käskyillä lipunvarausesimerkki voidaan toteuttaa samaan tapaan kuin hienojakoisella lukituksella, mutta ilman lukkoja. Yrittäessään varata paikan säie yrittää korvata vapaa-statuksen varattu-statuksella. Jos korvaus onnistuu, säie tietää että paikka on varattu sille, ja jos se epäonnistuu, säie tietää paikan olleen jo varattu, ja voi esimerkiksi yrittää uudelleen eri paikalla.

20 LUKU 3. RINNAKKAISUUDEN HALLINTA Transaktionaalinen muisti Transaktionaalisen muistin (transactional memory, TM) käsite on peräisin Herlihyn ja Mossin (1993) rautapohjaisesta transaktionaalisesta muistista. Transaktionaalisella muistilla (TM) tarkoitetaan yleisesti useiden muistioperaatioiden suorittamista tietokannoista tutulla tavalla atomisesti ja sarjallistuvasti (atomic, serializable). Atomisuus tarkoitetaan että joko kaikki transaktion sisällä olevat muistioperaatiot suoritetaan, tai mitään ei suoriteta. Sarjallistuvuus puolestaan että transaktiot suoritetaan siten että samanlainen suoritus (execution) saataisiin suorittamalla ne peräkkäin ilman rinnakkaisuutta (Herlihy ja Moss, 1993). Herlihyn transaktionaalisella muistilla lipunvarausesimerkin rinnakkaisuudenhallinta voitaisiin toteuttaa yksinkertaisesti suorittamalla paikkojen vapauden tarkistaminen ja varatuksi merkkaaminen transaktiossa. Joko kaikki varattavat vapaat paikat saadaan merkattua varatuksi, tai sitten transaktio epäonnistuu, ja voidaan yrittää varata uudet paikat. Herlihyn ja Mossin transaktionaalinen muisti ajateltiin toteutettavaksi prosessorin sisällä erikoiskäskyillä. Shavit ja Touitou (1995) toteuttivat vastaavan transaktiojärjestelmän ohjelmallisesti, ja nimesivät sen ohjelmalliseksi transaktionaalisen muistin (software transactional memory, STM). Shavitin ja Touitoun menetelmä rajoittuu kiinteästi määriteltyihin transaktioihin, ja he pitävät menetelmäänsä lähinnä monen sanan CAS-käskynä. Vuonna 2003 Herlihy ym. kehittivät dynaamisen STM:n (Dynamic STM, DSTM), joka toimii sanatason sijaan objektitasolla. Dynaamisen STM:n etuna aikaisempiin staattisiin STM:iin on soveltuvuus linkkipohjaisten rakenteiden, kuten puiden, käsittelyyn (Herlihy et al., 2003). Shavitin ja Touitoun STM:stä ei juurikaan olisi lipunvarauksen toteutuksessa apua, mutta DSTM:llä toteutus olisi samankaltainen kuin Herlihyn ja Mossin TM:llä. Myös erilaisia laajennuksia transaktioiden semantiikkaan on esitetty. Harris ja Fraser (2003) esittävät ehdollisten kriittisten osioiden (conditional critical section, CCR) käyttöä aikaisempien transaktioiden sijaan. Erona aikaisempiin transaktionaalisiin muisteihin on, että transaktio voidaan suorittaa ehdollisesti siten että transaktiota suorittava säie blokkaa (blocks) odottaen ehdon täyttymistä ja suoritetaan automaattisesti ehdon täyttyessä. (Martin et al., 2006) esittelevät kaksi erilaista transaktioiden atomisuuteen liittyvää semantiikkaa, sekä erilaisia ongelmia liittyen kriittisten osioiden korvaamiseen transaktioilla ja transaktioiden ja CCR:ien yhdistelemiseen (composition). Heidän tutkimuksensa jälkeen on julkaistu useita TM:n semantiikkaan pureutuvia tutkimuksia (Smaragdakis et al., 2007; Guerraoui ja Kapalka, 2008; Maessen ja Arvind, 2007). Attiyan (2008) mukaan vakaata teoreettista pohjaa ei kuitenkaan ole. Eräänä transaktionaalisen muistin etuna lukkopohjaisiin kriittisiin osioihin näh-

TIES542 kevät 2009 Yhteismuistisamanaikaisuus

TIES542 kevät 2009 Yhteismuistisamanaikaisuus TIES542 kevät 2009 Yhteismuistisamanaikaisuus Antti-Juhani Kaijanaho 9. maaliskuuta 2009 Tehtävät ovat samanaikaiset (engl. concurrent), jos ne etenevät yhtä aikaa samalla toistensa kanssa kommunikoiden.

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

Automaattinen muistinhallinta

Automaattinen muistinhallinta Automaattinen muistinhallinta Timo Tapanainen (ttapanai@cs.helsinki.fi) Helsinki 12. huhtikuuta 2004 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Sisältö 1 Johdanto...1 2 Automaattinen muistinhallinta...1

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

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 peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Rinnakkaisuus Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 25. 4. 2012 Sisältö 1 Rinnakkaisuusmalleja: säie ja prosessi 2

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

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi 17.5.2006 1/5 Oppimistavoitteet kurssilla Rinnakkaisohjelmointi Rinnakkaisuus ja rinnakkaisuuden soveltaminen tietojenkäsittelyjärjestelmissä Kurssin Tietokoneen toiminta perusteella ymmärtää, miten ohjelman

Lisätiedot

Ohjelmallinen transaktiomuisti

Ohjelmallinen transaktiomuisti Ohjelmallinen transaktiomuisti Tuomas Jorma Juhani Räsänen tuos@jyu. 10.4.2008 Tiivistelmä Säikeiden synkronointi lukkojen avulla on työlästä ja hyvin virhealtista. Lukkoihin perustuvat toteutukset eivät

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

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen Helsingin Yliopisto, tietojenkäsittelytieteen laitos Rinnakkaisohjelmointi (syksy 2006) Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen a. Käyttötarkoitus ja sovellusalue

Lisätiedot

Samanaikaisuuden hallinta

Samanaikaisuuden hallinta Samanaikaisuuden hallinta TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 20. maaliskuuta 2007 Samanaikaisuus engl. concurrency useampaa

Lisätiedot

Käyttöjärjestelmät: prosessit

Käyttöjärjestelmät: prosessit Käyttöjärjestelmät: prosessit 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 Käyttöjärjestelmä

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

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

Computing Curricula 2001 -raportin vertailu kolmeen suomalaiseen koulutusohjelmaan

Computing Curricula 2001 -raportin vertailu kolmeen suomalaiseen koulutusohjelmaan Computing Curricula 2001 -raportin vertailu kolmeen suomalaiseen koulutusohjelmaan CC1991:n ja CC2001:n vertailu Tutkintovaatimukset (degree requirements) Kahden ensimmäisen vuoden opinnot Ohjelmistotekniikan

Lisätiedot

House-käyttöjärjestelmä

House-käyttöjärjestelmä House-käyttöjärjestelmä Tuomo Sipola tusesipo@jyu.fi 8. huhtikuuta 2008 Tiivistelmä House on Haskell-kielellä kirjoitettu käyttöjärjestelmä. Haskellilla on pystytty kuvaamaan käyttöjärjestelmän keskeinen

Lisätiedot

Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin

Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin Ville Leppänen HSMT, c Ville Leppänen, IT, Turun yliopisto, 2009 p.1/15 HSMT (Java-kielellä) Aineopintotasoinen kurssi, 5op. Luennot:

Lisätiedot

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä Sisälls 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen.. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona.. Muuttumattomat ja muuttuvat merkkijonot.

Lisätiedot

Muistinsiivous. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2009 TIETOTEKNIIKAN LAITOS. Muistinsiivous.

Muistinsiivous. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2009 TIETOTEKNIIKAN LAITOS. Muistinsiivous. TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 30. marraskuuta 2009 Sisällys lmä Sisällys lmä Seuraava deadline Vaihe E tiistai 1.12. klo 10 koodigenerointi (ilman rekisteriallokaatiota)

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton 2015 syksy 2. vsk IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton Sisältö 1. Johdanto luontimalleihin 2. Proxy 3. Factory Method 4. Prototype 5. Singleton Suunnittelumallit Proxy et.

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

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

HAAGA-HELIA Heti-09 1 (14) ICT05: Tiedonhallinta ja Tietokannnat O.Virkki Transaktionkäsittely

HAAGA-HELIA Heti-09 1 (14) ICT05: Tiedonhallinta ja Tietokannnat O.Virkki Transaktionkäsittely HAAGA-HELIA Heti-09 1 (14) Transaktionkäsittely Transaktion / Tapahtuman hallinta... 2 Taustaa... 3 Tapahtuman käsite... 5 ACID-ominaisuudet... 7 Samanaikaisuuden hallinta... 8 Lukitukset... 9 Toipuminen...

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

7. Oliot ja viitteet 7.1

7. Oliot ja viitteet 7.1 7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin

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

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14 Arkkitehtuurikuvaus Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy Ryhmä 14 Muutoshistoria Versio Pvm Päivittäjä Muutos 0.4 1.11.2007 Matti Eerola 0.3 18.10.2007 Matti Eerola 0.2

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Muuttujat eri muisteissa Ohjelman muistialueen layout Paikallisen ja globaalin muuttujan ominaisuudet Dynaamisen muistinkäytön edut Paikallisten muuttujien dynaamisuus ADT

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

C++11 seminaari, kevät Johannes Koskinen

C++11 seminaari, kevät Johannes Koskinen C++11 seminaari, kevät 2012 Johannes Koskinen Sisältö Mikä onkaan ongelma? Standardidraftin luku 29: Atomiset tyypit Muistimalli Rinnakkaisuus On multicore systems, when a thread writes a value to memory,

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

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä.

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä. Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä. On arvioitu, että maailmassa on tällä hetkellä enemmän sulautettuja

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

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3 16. Lohkot 16.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 16.2 Lohkot Kaarisulut

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017.

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017. C! Dynaaminen muisti 9.2.2017 Agenda Kertausta merkkijonoista Dynaaminen muisti Valgrind-perusteet ja esimerkkejä Seuraava luento to 2.3. Ei harjoituksia arviointiviikolla 13.2. 17.2. 2 Palautetta merkkijonoihin

Lisätiedot

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

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat Sisällys 12. Javan toistorakenteet Ylstä toistorakentsta. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirhtä. Silmukan rajat asetettu kierroksen

Lisätiedot

.NET ajoympäristö. Juha Järvensivu 2007

.NET ajoympäristö. Juha Järvensivu 2007 .NET ajoympäristö Juha Järvensivu juha.jarvensivu@tut.fi 2007 Käännösprosessi C# lähdekoodi C# kääntäjä CILtavukoodi JITkäännös Ajettava natiivikoodi Kehitysympäristössä ohjelmoijan toimesta Ajonaikana.NET

Lisätiedot

Seminaari: Keskusmuistitietokannat. Keskusmuistitietokantojen samanaikaisuuden hallinta Ilkka Pullinen

Seminaari: Keskusmuistitietokannat. Keskusmuistitietokantojen samanaikaisuuden hallinta Ilkka Pullinen Seminaari: Keskusmuistitietokannat Keskusmuistitietokantojen samanaikaisuuden hallinta Ilkka Pullinen Sisältö Johdanto Esiteltävien menetelmien taustoja Hajautetun tietokannan spekuloiva samanaikaisuuden

Lisätiedot

Tietojenkäsittelyn perusteet 2. Lisää käyttöjärjestelmistä

Tietojenkäsittelyn perusteet 2. Lisää käyttöjärjestelmistä Tietojenkäsittelyn perusteet 2 Lisää käyttöjärjestelmistä 2011-02-09 Leena Ikonen 1 Systeemiohjelmat Systeemiohjelmiin kuuluvat Kääntäjät ja tulkit (+debuggerit) Käyttöjärjestelmä Linkittäjät Lataajat

Lisätiedot

Sovellusarkkitehtuurit

Sovellusarkkitehtuurit HELIA TiKo-05 1 (9) Sovellusarkkitehtuurit ODBC (Open Database Connectivity)... 2 JDBC (Java Database Connectivity)... 5 Middleware... 6 Middleware luokittelu... 7 Tietokanta -middleware... 8 Tapahtumamonitorit

Lisätiedot

2 Konekieli, aliohjelmat, keskeytykset

2 Konekieli, aliohjelmat, keskeytykset ITK145 Käyttöjärjestelmät, kesä 2005 Tenttitärppejä Tässä on lueteltu suurin piirtein kaikki vuosina 2003-2005 kurssin tenteissä kysytyt kysymykset, ja mukana on myös muutama uusi. Jokaisessa kysymyksessä

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

Sisällys. 15. Lohkot. Lohkot. Lohkot

Sisällys. 15. Lohkot. Lohkot. Lohkot Sisällys 15. Lohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.1 15.2 Lohkot Aaltosulkeet

Lisätiedot

Rajapinnat ja olioiden välittäminen

Rajapinnat ja olioiden välittäminen Rajapinnat ja olioiden välittäminen Moduulit/oliot kutsuvat toisiaan kapseloitujen rajapintojen läpi Kutsuissa välitetään usein olioita paikasta toiseen Jos olion omistus (= tuhoamisvastuu) säilyy koko

Lisätiedot

Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007

Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007 Jaetun muistin muuntaminen viestin välitykseksi Otto Räsänen 15. lokakuuta 2007 1 Motivaatio 2 Valtuuden välitys Peruskäsitteitä 3 Kolme algoritmia Valtuuden välitys käyttäen laskuria ilman ylärajaa Valtuuden

Lisätiedot

HELIA 1 (14) Outi Virkki Tiedonhallinta

HELIA 1 (14) Outi Virkki Tiedonhallinta HELIA 1 (14) Luento Transaktion / Tapahtuman hallinta... 2 Taustaa... 3 Tapahtuman käsite... 5 ACID-ominaisuudet... 7 Samanaikaisuuden hallinta... 8 Lukitukset... 9 Toipuminen... 10 Loki-tiedosto... 11

Lisätiedot

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto Sisällys 18. bstraktit tietotyypit Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.1 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

Sisällys. 16. Lohkot. Lohkot. Lohkot

Sisällys. 16. Lohkot. Lohkot. Lohkot Sisällys 16. ohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 16.1 16.2 ohkot aarisulut

Lisätiedot

Ongelma(t): Jotta tietokone olisi mahdollisimman yleiskäyttöinen ja suorituskykyinen, niin miten tietokoneen resurssit tulisi tarjota ohjelmoijalle,

Ongelma(t): Jotta tietokone olisi mahdollisimman yleiskäyttöinen ja suorituskykyinen, niin miten tietokoneen resurssit tulisi tarjota ohjelmoijalle, Ongelma(t): Jotta tietokone olisi mahdollisimman yleiskäyttöinen ja suorituskykyinen, niin miten tietokoneen resurssit tulisi tarjota ohjelmoijalle, sovellusohjelmille ja käyttäjille? 2012-2013 Lasse Lensu

Lisätiedot

Monitorit. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5

Monitorit. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5 Monitorit Monitori Synkronointimenetelmiä Esimerkkejä Andrews 5.1-5.2, Stallings 5.5 Tavoite Minimoi virhemahdollisuuksia poissulkeminen ohjelmoijan vastuulla P():t ja V():t siellä, täällä ja tuolla -

Lisätiedot

Monitorit. Tavoite. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5. Minimoi virhemahdollisuuksia

Monitorit. Tavoite. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5. Minimoi virhemahdollisuuksia Monitorit Monitori Synkronointimenetelmiä Esimerkkejä Andrews 5.1-5.2, Stallings 5.5 Tavoite Minimoi virhemahdollisuuksia poissulkeminen ohjelmoijan vastuulla P():t ja V():t siellä, täällä ja tuolla -

Lisätiedot

10 Lock Lock-lause

10 Lock Lock-lause 10 Lock Avainsanan lock (Lock keyword) avulla voidaan toteuttaa prosessien ja säikeiden välisessä keskinäisessä kommunikoinnissa käytettäviä synkronointi- ja poissuljentarakenteita. Tämän niin sanotun

Lisätiedot

Käyttöjärjestelmät. Teemu Saarelainen Tietotekniikka teemu.saarelainen@kyamk.fi

Käyttöjärjestelmät. Teemu Saarelainen Tietotekniikka teemu.saarelainen@kyamk.fi Käyttöjärjestelmät 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 Kurssin sisältö Johdanto, historiaa

Lisätiedot

Käyttöjärjestelmän rakenne

Käyttöjärjestelmän rakenne Käyttöjärjestelmän rakenne Tietokonejärjestelmä = Laitteisto + ohjelmisto Sovellus saa laitteiston käyttöönsä kj:n avustuksella CPU ja muisti Oheislaitteet KJ tarjoaa laitteiston käytössä tarvittavat palvelunsa

Lisätiedot

DIPLOMITYÖ ARI KORHONEN

DIPLOMITYÖ ARI KORHONEN DIPLOMITYÖ ARI KORHONEN TEKNILLINEN KORKEAKOULU Diplomityö Tietotekniikan osasto 20.5.1997 Ari Korhonen WORLD WIDE WEB (WWW) TIETORAKENTEIDEN JA ALGORITMIEN TIETOKONEAVUSTEISESSA OPETUKSESSA Työn valvoja

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

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

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms. Kokeellinen algoritmiikka (3 ov) syventäviä opintoja edeltävät opinnot: ainakin Tietorakenteet hyödyllisiä opintoja: ASA, Algoritmiohjelmointi suoritus harjoitustyöllä (ei tenttiä) Kirjallisuutta: Johnson,

Lisätiedot

Muistinhallinta ohjelmointikielissä

Muistinhallinta ohjelmointikielissä Muistinhallinta ohjelmointikielissä Antti-Juhani Kaijanaho 5. helmikuuta 2007 1 Olioista ja eliniästä Tässä monisteessa oliolla (engl. object) tarkoitetaan muuttujan abstraktiota: jokaisella oliolla on

Lisätiedot

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Ohjelmistojen mallintaminen. Luento 11, 7.12. Ohjelmistojen mallintaminen Luento 11, 7.12. Viime viikolla... Oliosuunnittelun yleiset periaatteet Single responsibility eli luokilla vain yksi vastuu Program to an interface, not to concrete implementation,

Lisätiedot

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Tällä kurssilla on tutustuttu ohjelmistojen mallintamiseen oliomenetelmiä ja UML:ää käyttäen Samaan aikaan järjestetyllä kurssilla on käsitelty

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

Lisätiedot

4.2. ALIOHJELMAT 71. Tulosvälitteisyys (call by result) Tulosvälitteinen parametri kopioidaan lopuksi

4.2. ALIOHJELMAT 71. Tulosvälitteisyys (call by result) Tulosvälitteinen parametri kopioidaan lopuksi 4.2. ALIOHJELMAT 71 sisältyä kaikki tarvittavat kontrollia ohjaavat rakenteet. Jos se on lause (yleensä lohko), niin on ratkaistava, miten paluuarvo ilmaistaan. Joissakin kielissä (esimerkiksi Pascal)

Lisätiedot

Tietojenkäsittelytieteiden koulutusohjelma. Tietojenkäsittelytieteiden laitos Department of Information Processing Science

Tietojenkäsittelytieteiden koulutusohjelma. Tietojenkäsittelytieteiden laitos Department of Information Processing Science Tietojenkäsittelytieteiden koulutusohjelma Tietojenkäsittelytieteet Laskennallinen data-analyysi Ohjelmistotekniikka, käyttöjärjestelmät, ihminen-kone -vuorovaikutus Teoreettinen tietojenkäsittelytiede

Lisätiedot

13/20: Kierrätys kannattaa koodaamisessakin

13/20: Kierrätys kannattaa koodaamisessakin Ohjelmointi 1 / syksy 2007 13/20: Kierrätys kannattaa koodaamisessakin Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy

Lisätiedot

Tietokanta (database)

Tietokanta (database) Tietokanta Tietokanta (database) jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja 1 Tiedosto Ohjelmointikielissä apumuistiin tallennettuja tietoja käsitellään

Lisätiedot

IIO30220 Database Management / Tietokannan hallinta TAPAHTUMIEN HALLINTA JOUNI HUOTARI (7.3.2012)

IIO30220 Database Management / Tietokannan hallinta TAPAHTUMIEN HALLINTA JOUNI HUOTARI (7.3.2012) IIO30220 Database Management / Tietokannan hallinta TAPAHTUMIEN HALLINTA JOUNI HUOTARI (7.3.2012) TEHTÄVIÄ/KYSYMYKSIÄ Määrittele tapahtuma (transaction) tapahtumien hallinta Mitä ovat tapahtuman ACIDominaisuudet?

Lisätiedot

Jussi Klemola 3D- KEITTIÖSUUNNITTELUOHJELMAN KÄYTTÖÖNOTTO

Jussi Klemola 3D- KEITTIÖSUUNNITTELUOHJELMAN KÄYTTÖÖNOTTO Jussi Klemola 3D- KEITTIÖSUUNNITTELUOHJELMAN KÄYTTÖÖNOTTO Opinnäytetyö KESKI-POHJANMAAN AMMATTIKORKEAKOULU Puutekniikan koulutusohjelma Toukokuu 2009 TIIVISTELMÄ OPINNÄYTETYÖSTÄ Yksikkö Aika Ylivieska

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

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Graafisen käyttöliittymän ohjelmointi Syksy 2013 TIE-11300 Tietotekniikan vaihtuva-alainen kurssi Graafisen käyttöliittymän ohjelmointi Syksy 2013 Luento 10 Rinnakkaisuus käyttöliittymäohjelmoinnissa Juha-Matti Vanhatupa Rinnakkaisuus ja käyttöliittymäohjelmointi

Lisätiedot

18. Abstraktit tietotyypit 18.1

18. Abstraktit tietotyypit 18.1 18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

kertaa samat järjestykseen lukkarissa.

kertaa samat järjestykseen lukkarissa. Opetuksen toistuva varaus ryhmällee TY10S11 - Tästä tulee pitkä esimerkki, sillä pyrin nyt melko yksityiskohtaisesti kuvaamaan sen osion mikä syntyy tiedon hakemisesta vuosisuunnittelusta, sen tiedon kirjaamiseen

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

Integrointi. Ohjelmistotekniikka kevät 2003

Integrointi. Ohjelmistotekniikka kevät 2003 Integrointi Ohjelmistotekniikka kevät 2003 ERP (Toiminnanohjausjärjestelmä) Myynti Henkilöstö, palkanlaskenta Kirjanpito Myynti Myyjät Extranet Tietovarasto Laskutus, reskontrat Asiakas ERP Asiakasrekisteri

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

Testiraportti Android virtuaalikone vs. natiivikoodi Ville Laine, Delta 23

Testiraportti Android virtuaalikone vs. natiivikoodi Ville Laine, Delta 23 Testiraportti Android virtuaalikone vs. natiivikoodi Ville Laine, Delta 23 1 Sisällys 1. Johdanto...3 2. Testiohjelma...3 2.1. Testi 1: Raaka funktiokutsu...3 2.2. Testi 2: Yhteenlaskutesti...3 2.3. Testi

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Luento

Lisätiedot

TIE Principles of Programming Languages CEYLON

TIE Principles of Programming Languages CEYLON TIE-20306 Principles of Programming Languages CEYLON SISÄLLYSLUETTELO 1. YLEISTIETOA KIELESTÄ JA SEN KEHITTÄMISESTÄ... 1 2. CEYLONIN OMINAISUUKSIA... 2 2.1 Modulaarisuus... 2 2.2 Tyypit... 2 2.3 Muita

Lisätiedot

Tutkittua tietoa. Tutkittua tietoa 1

Tutkittua tietoa. Tutkittua tietoa 1 Tutkittua tietoa T. Dybå, T. Dingsøyr: Empirical Studies of Agile Software Development : A Systematic Review. Information and Software Technology 50, 2008, 833-859. J.E. Hannay, T. Dybå, E. Arisholm, D.I.K.

Lisätiedot

Haskell ohjelmointikielen tyyppijärjestelmä

Haskell ohjelmointikielen tyyppijärjestelmä Haskell ohjelmointikielen tyyppijärjestelmä Sakari Jokinen Helsinki 19. huhtikuuta 2004 Ohjelmointikielten perusteet - seminaarityö HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos 1 Johdanto 1 Tyyppien

Lisätiedot

Arkkitehtuurinen reflektio

Arkkitehtuurinen reflektio Arkkitehtuurinen reflektio Toni Ruokolainen Toni.Ruokolainen@cs.helsinki.fi Helsinki 6.10.2003 Tiivistelmä HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET

Lisätiedot

7. Product-line architectures

7. Product-line architectures 7. Product-line architectures 7.1 Introduction 7.2 Product-line basics 7.3 Layered style for product-lines 7.4 Variability management 7.5 Benefits and problems with product-lines 1 Short history of software

Lisätiedot

Luento 5: YKSINKERTAINEN SEGMENTOINTI JA SIVUTUS

Luento 5: YKSINKERTAINEN SEGMENTOINTI JA SIVUTUS Käyttöjärjestelmät t I Luento 5: YKSINKERTAINEN SEGMENTOINTI JA SIVUTUS Stallings, Luku 7 KJ-I S2005 / Tiina Niklander; kalvot Auvo Häkkinen 5-1 Sisält ltöä (Luennot 5&6) Yleistä muistinhallinnasta (luku

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

1. Tarkastellaan seuraavaa stokastista Petri-verkkoa: p 2. p 1. lock write 1

1. Tarkastellaan seuraavaa stokastista Petri-verkkoa: p 2. p 1. lock write 1 T-79.179 Rinn. ja haj. digitaaliset järjestelmät Laskuharjoitus #7 15.3.2002 Laatinut: Esa Kettunen 1. Tarkastellaan seuraavaa stokastista Petri-verkkoa: p 1 p 2 getlock 1 getlock 2 lock write 1 write

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

ETAPPI ry JOOMLA 2.5 Mediapaja. Artikkeleiden hallinta ja julkaisu

ETAPPI ry JOOMLA 2.5 Mediapaja. Artikkeleiden hallinta ja julkaisu ETAPPI ry JOOMLA 2.5 Artikkeleiden hallinta ja julkaisu ETAPPI ry JOOMLA 2.5 Sivu 1(16) Sisällysluettelo 1 Joomla! sivuston sisällöntuotanto... 2 2 Artikkeleiden julkaisu sivustolla... 4 3 Artikkelin julkaisemista

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: SICP kohdat 22.2.3 Riku Saikkonen 2. 11. 2010 Sisältö 1 Linkitetyt listat 2 Listaoperaatioita 3 Listarakenteet 4 Gambit-C:n Scheme-debuggeri Linkitetyt

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

Scheduling of Genetic Analysis Workflows on Grid Environments (valmiin työn esittely) Arttu Voutilainen

Scheduling of Genetic Analysis Workflows on Grid Environments (valmiin työn esittely) Arttu Voutilainen Scheduling of Genetic Analysis Workflows on Grid Environments (valmiin työn esittely) Arttu Voutilainen 20.4.2015 Ohjaaja: FT Lauri Eronen (Biocomputing Platforms Ltd.) Valvoja: Prof. Harri Ehtamo Työn

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 IX Rinnakkainen ohjelmointi Sisältö 1. Yleistä rinnakkaisuudesta 2. Prosesseista ja säikeistä 3. Rinnakkaisen ohjelman oikeellisuudesta 4. Rinnakkaisuuden

Lisätiedot

C++11 lambdat: [](){} Matti Rintala

C++11 lambdat: [](){} Matti Rintala C++11 lambdat: [](){} Matti Rintala bool(*)(int) Tarve Tarve välittää kirjastolle/funktiolle toiminnallisuutta Callback-funktiot Virhekäsittely Käyttöliittymät Geneeristen kirjastojen räätälöinti STL:n

Lisätiedot

Osio 2: Luennot 5-8 Muistinhallinta

Osio 2: Luennot 5-8 Muistinhallinta Käyttöjärjestelmät I Osio 2: Luennot 5-8 Muistinhallinta Tiina Niklander; kalvot Auvo Häkkinen Tietojenkäsittelytieteen laitos Helsinin yliopisto "!$#%#'&)(*+,(.-0/1#'-243 0# 5 Stallins, Luku 7 KJ-I S2004

Lisätiedot

Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön?

Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön? Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön? 2013-2014 Lasse Lensu 2 Systeemiohjelmat ovat tietokoneen laitteistoa lähellä olevia ohjelmia,

Lisätiedot

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD)

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) Ohjelmointikäytännöt 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 1 Sisältö 1) Mitä on hyvä koodi? 2) Ohjelmointikäytäntöjen merkitys? 3) Koodin asettelu

Lisätiedot