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-

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ohjelman arkkitehtuurista.

ohjelman arkkitehtuurista. 1 Legacy-järjestelmällä tarkoitetaan (mahdollisesti) vanhaa, olemassa olevaa ja käyttökelpoista ohjelmistoa, joka on toteutettu käyttäen vanhoja menetelmiä ja/tai ohjelmointikieliä, joiden tuntemus yrityksessä

Lisätiedot

Backup Exec 3600 Appliance

Backup Exec 3600 Appliance Backup Exec 3600 Appliance Markku A Suistola Principal Presales Consultant Parempaa varmistusta kaikille! Ohjelmisto Appliance Pilvi Virtuaalisen ja fyysisen ympäristön suojaus 2 Perinteinen ratkaisu usein

Lisätiedot

Dynaaminen muisti Rakenteiset tietotyypit

Dynaaminen muisti Rakenteiset tietotyypit C! Dynaaminen muisti Rakenteiset tietotyypit 1.3.2016 Agenda Kertausta Dynaaminen muisti Valgrind-perusteet ja esimerkkejä Yhteenveto tietorakenteista Vilkaisu 3. kierroksen tehtäviin Esim: miten linkitetty

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

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

OHJ-4301 Sulautettu Ohjelmointi

OHJ-4301 Sulautettu Ohjelmointi OHJ-4301 Sulautettu Ohjelmointi (http://www.cs.tut.fi/~sulo/) 5op, to 12-14, TB 109 Arto Salminen, arto.salminen@tut.fi Läpäisyvaatimukset Hyväksytysti suoritetut: Tentti Harjoitustyöt Harjoitustyöt 3

Lisätiedot

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A4000 - Kandidaatintyö ja seminaari

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A4000 - Kandidaatintyö ja seminaari LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A4000 - Kandidaatintyö ja seminaari Alkuraportti Avoimen lähdekoodin käyttö WWW-sovelluspalvelujen toteutuksessa Lappeenranta, 30.3.2008,

Lisätiedot

CABAS. Release Notes 5.4. Uusi kuvien ja dokumenttien käsittely

CABAS. Release Notes 5.4. Uusi kuvien ja dokumenttien käsittely Release Notes 5.4 CABAS Uusi kuvien ja dokumenttien käsittely Olemme päivittäneet ja nykyaikaistaneet CABASin kuvien ja dokumenttien käsittelyn. Nyt kuvia voi vetää hiiren osoittimella ja pudottaa ne kuvaluetteloon.

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

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä 6.11.2002

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä 6.11.2002 JReleaser Yksikkötestaus ja JUnit Mikko Mäkelä 6.11.2002 Sisältö Johdanto yksikkötestaukseen JUnit yleisesti JUnit Framework API (TestCase, TestSuite) Testien suorittaminen eri työkaluilla Teknisiä käytäntöjä

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

4.2 Muistinhallintaa avustava kirjasto Tutnew

4.2 Muistinhallintaa avustava kirjasto Tutnew 48 Harjoitustöiden laadun kehittäminen [5] Edison Design Group. 2000. Compiler Front Ends for the OEM Market, http://www.edg.com/cpp.html/, 21.8.2001. [6] Henricson, M., & Nyquist E. 1992. Programming

Lisätiedot

1. Keskusyksikön rakenne

1. Keskusyksikön rakenne 1. Keskusyksikön rakenne Kuvassa on esitelty TTK-91 esimerkkikoneen keskusyksikkö. Oikeiden tietokoneiden keskusyksiköt ovat luonnollisesti monimutkaisempia, mutta tämä riittää oikein mainiosti asian havainnollistamiseen.

Lisätiedot

Webforum. Version 14.4 uudet ominaisuudet. Viimeisin päivitys: 2014-12-6

Webforum. Version 14.4 uudet ominaisuudet. Viimeisin päivitys: 2014-12-6 Webforum Version 14.4 uudet ominaisuudet Viimeisin päivitys: 2014-12-6 Sisältö Tietoja tästä dokumentista... 3 Yleistä... 4 Yleistä & hallinnointi... 5 Dokumentit... 5 Perättäinen tarkistus- ja hyväksymisprosessi...

Lisätiedot

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012 OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012 Luento 12: Käyttöjärjestelmät, alkua Tekijät: Antti Virtanen, Timo Lehtonen, Matti Kujala, Kirsti Ala-Mutka, Petri M. Gerdt et al. Mikä on käyttöjärjestelmä

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

Linux rakenne. Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat

Linux rakenne. Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat Linux rakenne Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat Linux ydin Ytimen (kernel) päätehtävä on tarjota rajapinta

Lisätiedot

Datatähti 2009 -alkukilpailu

Datatähti 2009 -alkukilpailu Datatähti 2009 -alkukilpailu Ohjelmointitehtävä 1/3: Hissimatka HUOM: Tutustuthan huolellisesti tehtävien sääntöihin ja palautusohjeisiin (sivu 7) Joukko ohjelmoijia on talon pohjakerroksessa, ja he haluavat

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

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

ASCII-taidetta. Intro: Python

ASCII-taidetta. Intro: Python Python 1 ASCII-taidetta All Code Clubs must be registered. Registered clubs appear on the map at codeclubworld.org - if your club is not on the map then visit jumpto.cc/18cplpy to find out what to do.

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

Paikkatietorajapinnat IT arkkitehtuurin näkökulmasta 21.12.200 7

Paikkatietorajapinnat IT arkkitehtuurin näkökulmasta 21.12.200 7 Paikkatietorajapinnat IT arkkitehtuurin näkökulmasta 21.12.200 7 Mikä on IT arkkitehtuuri? Liiketoimintamalli määrittelee IT arkkitehtuurin IT arkkitehtuuri ottaa kantaa sovelluksen laadullisiin vaatimuksiin

Lisätiedot

Samanaikaisuuden hallinta. tietokantapalvelimessa. Tiedonhallintaa. Alkuper. versio: Jaakko Rantanen Pieniä korjauksia: Jouni Huotari 26.2.

Samanaikaisuuden hallinta. tietokantapalvelimessa. Tiedonhallintaa. Alkuper. versio: Jaakko Rantanen Pieniä korjauksia: Jouni Huotari 26.2. Samanaikaisuuden hallinta tietokantapalvelimessa Tiedonhallintaa Alkuper. versio: Jaakko Rantanen Pieniä korjauksia: Jouni Huotari 1 Transaktiot eli tapahtuma(sarja)t 2 Transaktio (transaction) on DBMSn

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

Software product lines

Software product lines Thomas Gustafsson, Henrik Heikkilä Software product lines Metropolia Ammattikorkeakoulu Insinööri (AMK) Tietotekniikan koulutusohjelma Asiantuntijateksti 17.11.2013 Sisällys 1 Johdanto 1 2 Software product

Lisätiedot

Arto Salminen, arto.salminen@tut.fi

Arto Salminen, arto.salminen@tut.fi 3. Luento: Muistin hallinta Arto Salminen, arto.salminen@tut.fi Agenda Mitä väliä? Erityyppiset muistit Ohjelman sijoittelu muistiin Ohjelman sisäinen muistinhallinta Muistinhallintayksikkö Välimuisti

Lisätiedot

UML -mallinnus TILAKAAVIO

UML -mallinnus TILAKAAVIO UML -mallinnus TILAKAAVIO SISÄLLYS 3. Tilakaavio 3.1 Tilakaavion alku- ja lopputilat 3.2 Tilan nimi, muuttujat ja toiminnot 3.3 Tilasiirtymä 3.4 Tilasiirtymän vai tilan toiminnot 3.5 Tilasiirtymän tapahtumat

Lisätiedot

Pertti Pennanen DOKUMENTTI 1 (5) EDUPOLI ICTPro1 29.10.2013

Pertti Pennanen DOKUMENTTI 1 (5) EDUPOLI ICTPro1 29.10.2013 Virtualisointi Pertti Pennanen DOKUMENTTI 1 (5) SISÄLLYSLUETTELO Virtualisointi... 2 Virtualisointiohjelmia... 2 Virtualisointitapoja... 2 Verkkovirtualisointi... 2 Pertti Pennanen DOKUMENTTI 2 (5) Virtualisointi

Lisätiedot

Nero 7:n Windows Vista TM -tuki

Nero 7:n Windows Vista TM -tuki Nero 7:n Windows Vista TM -tuki Nero AG Sivu 1 Tietoja tekijänoikeudesta ja tavaramerkistä Tämä opaskirjanen ja sen sisältö on Nero AG:n omaisuutta ja suojattu tekijänoikeudella. Kaikki oikeudet pidätetään.

Lisätiedot

VHDL/Verilog/SystemC. Jukka Jokelainen 20.10.2009

VHDL/Verilog/SystemC. Jukka Jokelainen 20.10.2009 VHDL/Verilog/SystemC Jukka Jokelainen 20.10.2009 Sisältö Mitä ihmettä on hardwaren ohjelmointi? VHDL Verilog SystemC Analogiaelektroniikan yhdistäminen digitaaliseen maailmaan Yhteenveto ja pohdintaa Hardwaren

Lisätiedot

T740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

T740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010 12. Periytyminen Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi

Lisätiedot

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot) SQL sisältää operaatiot tietokannan sisällön muodostamiseen ja ylläpitoon: insert - uusien rivien vienti tauluun delete - rivien poisto update - rivien muutos 1 Insert lauseella on kaksi muotoa: insert

Lisätiedot

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Tekninen määrittely: Editori Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Sisällysluettelo 1. Johdanto...4 1.1. Tarkoitus ja kattavuus...4 1.2. Tuote ja ympäristö...4 1.3. Määritelmät,

Lisätiedot

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010 kielenä 9. joulukuuta 2010 Historia kielenä Historia Sovelluksia kehitettiin vuonna 1972 Kehittäjinä ranskalaiset Pääkehittäjä Alain Colmerauer Philippe Roussel programmation en logique Robert Kowalski

Lisätiedot

3. Ryhdy kirjoittamaan ja anna kaiken tulla paperille. Vääriä vastauksia ei ole.

3. Ryhdy kirjoittamaan ja anna kaiken tulla paperille. Vääriä vastauksia ei ole. 1 Unelma-asiakas Ohjeet tehtävän tekemiseen 1. Ota ja varaa itsellesi omaa aikaa. Mene esimerkiksi kahvilaan yksin istumaan, ota mukaasi nämä tehtävät, muistivihko ja kynä tai kannettava tietokone. Varaa

Lisätiedot

17/20: Keittokirja IV

17/20: Keittokirja IV Ohjelmointi 1 / syksy 2007 17/20: Keittokirja IV Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/10 Tavoitteita

Lisätiedot

Common Language Runtime

Common Language Runtime hyväksymispäivä arvosana arvostelija Common Language Runtime Jukka Katajisto Helsinki 16.4.2005 Ohjelmointikielten kääntäjät -kurssin seminaarityö HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Sisältö

Lisätiedot

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Viimeksi muokattu 5. toukokuuta 2012 Maastotietokannan torrent-jakeluun sisältyy yli 5000 zip-arkistoa,

Lisätiedot

AS-84.3400 Automaatiotekniikan seminaarikurssi. Kevät 2008

AS-84.3400 Automaatiotekniikan seminaarikurssi. Kevät 2008 AS-84.3400 Automaatiotekniikan seminaarikurssi Kevät 2008 Kurssin tavoitteet Konferenssisimulaatio Harjoitella tieteellisen tekstin / raportin kirjoittamista Harjoitella tiedon etsimistä ja viittaamista

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

Case TUHTI. Projektin tunnuslukuja. ! Suuri perusjärjestelmäuudistus! Työt alkoivat kesällä 1999. ! Java luokkia n. 5000

Case TUHTI. Projektin tunnuslukuja. ! Suuri perusjärjestelmäuudistus! Työt alkoivat kesällä 1999. ! Java luokkia n. 5000 Case TUHTI 17.12.2002 1 TietoEnator 2002 Projektin tunnuslukuja! Suuri perusjärjestelmäuudistus! Työt alkoivat kesällä 1999! Otettu tuotantokäyttöön syksyllä 2001! Proof of Concept (5 henkilöä 4 kk) ->

Lisätiedot

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille: Merkkijonot C-kielessä merkkijono on taulukko, jonka alkiot ovat char -tyyppiä. Taulukon viimeiseksi merkiksi tulee merkki '\0', joka ilmaisee merkkijonon loppumisen. Merkkijono määritellään kuten muutkin

Lisätiedot

DXL Library ja DXL-kielen olemus. Pekka Mäkinen Pekka.Makinen@softqa.fi SoftQA Oy http/www.softqa.fi/

DXL Library ja DXL-kielen olemus. Pekka Mäkinen Pekka.Makinen@softqa.fi SoftQA Oy http/www.softqa.fi/ DXL Library ja DXL-kielen olemus Pekka Mäkinen Pekka.Makinen@softqa.fi SoftQA Oy http/www.softqa.fi/ DOORS extension Language DXL on DOORSin laajennuskieli, jolla voidaan kehittää lisätoiminnallisuutta.

Lisätiedot

Agenda. Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu ohjelmointi

Agenda. Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu ohjelmointi 1. Luento: Sulautetut Järjestelmät Arto Salminen, arto.salminen@tut.fi Agenda Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu

Lisätiedot

Projektityö: Mobiiliajopäiväkirja. Mikko Suomalainen

Projektityö: Mobiiliajopäiväkirja. Mikko Suomalainen Projektityö: Mobiiliajopäiväkirja Mikko Suomalainen 1. Määritelmä Mobiiliajopäiväkirja on kännyköille suunnattu ajopäiväkirja-sovellus. Sovelluksen pääperiaate on toimia automaattisena ajopäiväkirjana.

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

Sukupuu -ohjelma. Ossi Väre (013759021) Joni Virtanen (013760641)

Sukupuu -ohjelma. Ossi Väre (013759021) Joni Virtanen (013760641) Sukupuu -ohjelma Ossi Väre (013759021) Joni Virtanen (013760641) 7.11.2011 1 Johdanto Toteutimme C -kielellä sukupuuohjelman, johon käyttäjä voi lisätä ja poistaa henkilöitä ja määrittää henkilöiden välisiä

Lisätiedot

ProQuest Dissertations & Thesis: The Humanities and Social Sciences Collection

ProQuest Dissertations & Thesis: The Humanities and Social Sciences Collection Kuukauden tietokanta tammikuu 2013 ProQuest databases ARTBibliographies Modern (ABM) Modern and contemporary art journal articles and books British Humanities Index (BHI) Humanities - journals, weekly

Lisätiedot

Pysyvät tunnukset ja niiden hyödyntäminen

Pysyvät tunnukset ja niiden hyödyntäminen Pysyvät tunnukset ja niiden hyödyntäminen Arkistopalvelut uuteen nousuun 15.9.2015 Esa-Pekka Keskitalo, orcid.org/0000-0002-4411-8452 URN:NBN:fi-fe2015091511591 Sisältö Millaisista tunnuksista on puhe?

Lisätiedot

Osaamispassi ja erityisosaamistietokanta tulevaisuuden osaajille

Osaamispassi ja erityisosaamistietokanta tulevaisuuden osaajille Osaamispassi ja erityisosaamistietokanta tulevaisuuden osaajille Futurex -seminaari Korkeakoulujen täydennyskoulutusten laatu Helsinki 6.3.2013 Anne-Maritta Tervakari Intelligent Information Systems Laboratory

Lisätiedot

Ruma merkitys. Tommi Nieminen. XLII Kielitieteen päivät. Kielitieteen epäilyttävin välttämätön käsite. tommi.nieminen@uef.fi. Itä-Suomen yliopisto ...

Ruma merkitys. Tommi Nieminen. XLII Kielitieteen päivät. Kielitieteen epäilyttävin välttämätön käsite. tommi.nieminen@uef.fi. Itä-Suomen yliopisto ... Ruma merkitys Kielitieteen epäilyttävin välttämätön käsite Tommi Nieminen tomminieminen@ueffi Itä-Suomen yliopisto XLII Kielitieteen päivät 21 23 toukokuuta 2015, Vaasa Merkitys, subst lingvistisen merkityksen

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

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

Tietokoneen muisti nyt ja tulevaisuudessa. Ryhmä: Mikko Haavisto Ilari Pihlajisto Marko Vesala Joona Hasu

Tietokoneen muisti nyt ja tulevaisuudessa. Ryhmä: Mikko Haavisto Ilari Pihlajisto Marko Vesala Joona Hasu Tietokoneen muisti nyt ja tulevaisuudessa Ryhmä: Mikko Haavisto Ilari Pihlajisto Marko Vesala Joona Hasu Yleisesti Muisti on yksi keskeisimmistä tietokoneen komponenteista Random Access Memory on yleistynyt

Lisätiedot

TIES325 Tietokonejärjestelmä. Jani Kurhinen Jyväskylän yliopisto Tietotekniikan laitos

TIES325 Tietokonejärjestelmä. Jani Kurhinen Jyväskylän yliopisto Tietotekniikan laitos TIES325 Tietokonejärjestelmä Jani Kurhinen Jyväskylän yliopisto Tietotekniikan laitos Kevät 2008 Luku 1 Tietokone abstraktina yksikkönä Tietokoneen asbtratiotasoa sen muotoisena kuin me sen tällä hetkellä

Lisätiedot

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti Teknillinen korkeakoulu 51 Vaatimusmäärittely Ohjelma-ajanvälitys komponentti Versio Päiväys Tekijä Kuvaus 0.1 21.11.01 Oskari Pirttikoski Ensimmäinen versio 0.2 27.11.01 Oskari Pirttikoski Lisätty termit

Lisätiedot

Uudelleenkäytön jako kahteen

Uudelleenkäytön jako kahteen Uudelleenkäyttö Yleistä On pyritty pääsemään vakiokomponenttien käyttöön Kuitenkin vakiokomponentit yleistyneet vain rajallisilla osa-alueilla (esim. windows-käyttöliittymä) On arvioitu, että 60-80% ohjelmistosta

Lisätiedot

Käyttöjärjestelmien historia. Joni Herttuainen Henri Jantunen Markus Maijanen Timo Saksholm Johanna Tjäder Eetu Turunen

Käyttöjärjestelmien historia. Joni Herttuainen Henri Jantunen Markus Maijanen Timo Saksholm Johanna Tjäder Eetu Turunen Käyttöjärjestelmien historia Joni Herttuainen Henri Jantunen Markus Maijanen Timo Saksholm Johanna Tjäder Eetu Turunen Käyttöjärjestelmien jaottelu Voidaan jaotella erilaisin menetelmin Aikajana (määrä,

Lisätiedot