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 tehtävän suorittamista samanaikaisesti Mahdollisia hyötyjä: yksinkertaistaa testausta, työnjakoa, ajoitusta, parantaa modulaarisuutta ja suorituksen nopeutta jne
Todellinen Rinnakkaisuus Monisuoritinjärjestelmä / hajautettu järjestelmä Oheislaitteiden itsenäinen toiminta Näennäinen Moniajo Keskeytykset
Prosessien vuorovaikutus Suora vaikutus Yhteiset resurssit Viestinvälitys Epäsuora vaikutus Kilpailu yhteisistä resursseista Johtavat joukkoon hyvin tunnettuja käytännön ongelmia
Perusongelmat Poissulkeminen Synkronointi Lukkiutuminen Nälkiintyminen Testaus
Termejä Kriittinen alue Atominen operaatio Kilpailutilanne (race condition) Lukkiutuminen (deadlock) Nälkiintyminen (starvation)
Poissulkeminen Vain yksi ohjelma kerrallaan voi suorittaa kriittistä aluetta Keskeytyskielto Semaforit Erilaiset muut lukitusrutiinit Poissulkemisen vähentäminen tehtävä harkiten Yleensä ajoituksiin liittyvät syyt voivat pakottaa tähän (dokumentoi!) Toisaalta ylenmääräinen poissulkeminen sarjallistaa ohjelman
Synkronointi Ohjelman osa odottaa toisen ohjelman valmistumista tai oheislaitetta Semaforit Wait, Signal, Notify Pienissä sulautetuissa ohjelmissa harvoin suoraan ohjelmien välistä mutta sitäkin useammin keskeytyksiin liittyvää Synkronoinnin vähentäminen syytä tehdä harkiten Yleensä ajoituksiin liittyvät syyt voivat pakottaa tähän (dokumentoi!) Toisaalta ylenmääräinen poissulkeminen sarjallistaa ohjelman
Lukkiutuminen Ohjelman suoritus pysähtyy odottamatta Lukkiutuminen estyy jos neljästä ehdosta jonkin täyttyminen estetään Poissulkemisehto prosessi varaa resurssin itselleen Varaus-odotusehto prosessi ei vapauta resursseja odotuksen ajaksi Irroittamattomuusehto varatun resurssin vapauttaa vain prosessi itse Silmukkaodotusehto prosessit odottavat toisten varaamia resursseja
Nälkiintyminen Ohjelman suoritus etenee, mutta joku osa ohjelmaa ei saa koskaan suoritusvuoroa Nälkiintyminen voi tapahtua, jos ohjelmassa on poissulkemista Syynä yleensä epäsuora vaikutus, joten löytäminen testaamalla tai muuten perinteisin keinoin voi olla vaikeaa Ei selkeää ehtolistaa kuten lukkiutumiselle
Testaaminen Koska suoritus etenee rinnakkain, voivat eri säikeet/prosessit edetä eri suorituskerroilla eri tahtiin Ongelmia voi tuoda ainoastaan 1 suoritus 1.000.000.000 Eli siis vikaa tulee aina joskus Ei voida toistaa testein Vaikka virhe voitaisiin toistaakin, ei aina olla kuivilla Ongelmat voivat poistua kun testaustuki lisätään Varsinainen ongelma voi olla aivan muualla kuin missä virheen seuraukset havaitaan
Jako prosesseihin Toiminnallisuus Skedulointi Rakenne Tehokkuus Monisuoritinympäristössä Näiden yhdistelmä
Toiminnallinen jako Sovelluksen loogiseen toimintaan perustuva jako Etuja: ongelman ymmärtäminen, toteuttaminen ja testaaminen yksinkertaistuvat Haittoja: poissulkeminen, raskas kommunikaatio, muistinkulutus
Skedulointiin perustuva jako Samanaikaisesti suoritettavat tehtävät samassa prosessissa Etuja: reaaliaikaominaisuuksien laskenta yksinkertaistuu Haittoja: epämodulaarista, ohjelman ymmärtäminen voi vaikeutua
Rakenteeseen perustuva jako Fyysisille toimilohkoille, esim oheislaitteille, oma prosessi Etuja: jos laitteisto muuttuu -> helppo muuttaa myös koodi Haittoja: sovelluksen hallitseminen voi vaikeutua, erilaiset ajastustarpeet törmäävät
Rinnakkaistaminen Algoritmin jakaminen monisuoritinjärjestelmässä Etuja: nopeus Haittoja: vaikea suunnitella, nopeushyöty voi olla kyseenalaista
Erilaisista yhdistelmistä Saattavat helposti sekoittaa ohjelman perusfilosofian Muutosten tekeminen hankaloituu, jos useita mahdollisia paikkoja lisätä uutta toiminnallisuutta Pidä tyylien määrä pienenä! Dokumentoi erityisesti Yleiset suunnitteluperiaatteet Yksittäiset poikkeukset jotka kumminkin unohtuvat
Reaaliaika Tapahtumien ajoittaminen oikeaan (ennustettavaan) aikaan Toisinaan mahdollisimman nopea vasteaika
Reaaliaikajärjestelmät Pehmeä: ajoituksen epäonnistuminen ei ole vakava virhe Kova: ajoitus ei saa epäonnistua Reaktiivisuus: reagoi ärsykkeisiin nopeasti Ennustettavuus: vasteajat voidaan laskea
Yhteenveto Rinnakkaisuuden ongelmat Jakoperusteet Reaaliaikajärjestelmät