Rinnakkaisohjelmointi

Samankaltaiset tiedostot
Rinnakkaisohjelmointi

Rinnakkaisohjelmointi

OSA I: Yhteisten muuttujien käyttö Prosessit samassa koneessa. Sisältöä. Poissulkeminen. Halutut ominaisuudet 2-1. Rinnakkaiset, atomiset operaatiot

OSA I: Sisältöä. Atomisuus (atomic action) v Poissulkeminen ja synkronointi. Kriittinen (koodi)alue (critical section)

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

OSA I: Yhteisten muuttujien käyttö. Prosessit samassa koneessa. Rio 2004 / Auvo Häkkinen 2-1

OSA I: Yhteisten muuttujien käyttö. Sisältöä. Prosessit samassa koneessa. Poissulkeminen ja synkronointi. Semaforit ja rinnakkaisuuden hallinta

Johdantoa. Miksi rinnakkaisuutta? Keskinäinen kommunikointi. Prosessit voivat häiritä toisiaan! Rinnakkaisuus - Samanaikaisuus

Johdantoa. Andrews, Ch 1

Johdantoa. Rinnakkaisuus - Samanaikaisuus. Peräkkäisyyteen perustuvat sovellukset

Johdantoa. Miksi rinnakkaisuutta? Laitteistoarkkitehtuureja. Rinnakkaisuus - Samanaikaisuus. Peräkkäisyyteen perustuvat sovellukset

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi

Ongelmakenttä. Yhteenvetoa. Ratkottava. Mekanismit. Lukkomuuttujat. Lukkomuuttujat, Spin Locks. Rinnakkaisuuden tarve. Kommunikointiin tarvitaan

Yhteenvetoa. Ongelmakenttä

Ongelmakenttä. Rinnakkaisuuden tarve. Kommunikointiin tarvitaan. Ympäristö Suunnittelun yksinkertaistaminen Suorituskyky Luotettavuus

Rinnakkaisohjelmistot. Liisa Marttinen Tietojenkäsittelytieteen laitos Helsingin yliopisto Kevät 2004

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

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

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

Prosessi perinteisesti

Stallings, Luku 4.1. KJ-I I S2005 / Tiina Niklander, kalvot Auvo HäkkinenH

Ongelmakenttä. Yhteenvetoa. Mekanismit. Ratkottava. Lukkomuuttujat, Spin Locks. Lukkomuuttujat. Rinnakkaisohjelmistot 2004 / Auvo Häkkinen 9-1

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

Stallings, Luku 4.1. KJ-I S2004 / Tiina Niklander, kalvot Auvo Häkkinen 4-1. KJ-I I S2004 / Tiina Niklander, kalvot Auvo Häkkinen 12-1

Sisältöä SÄIKEET, SMP

815338A Ohjelmointikielten periaatteet

2 Konekieli, aliohjelmat, keskeytykset

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

RINNAKKAINEN OHJELMOINTI A,

Processes and threads

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

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

Tavoite. Monitorit. Monitori Hoare Monitori. Minimoi virhemahdollisuuksia. Monitori Synkronointimenetelmiä Esimerkkejä

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

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

TIES542 kevät 2009 Yhteismuistisamanaikaisuus

Ohjelmoinnin peruskurssien laaja oppimäärä

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Jaana Diakite Projekti 1 JAVA-Monitorit 1(13) Rinnakkaisohjelmointi Anu Uusitalo

SÄIKEET, SMP. Sisältöä. Stallings, Luku 4. Prosessi vs. säie Miksi säikeitä? ULT: Käyttäjätason säikeet KLT: Säikeiden toteutus ytimessä

Sisältöä SÄIKEET, SMP

4. Luento: Prosessit ja säikeets. Tommi Mikkonen,

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

Semaforit ja rinnakkaisuuden hallinta. Tuottajat ja kuluttajat. Lukijat ja kirjoittajat. Andrews 4.2, Rio 2004 / Auvo Häkkinen

Lukkiutuminen. Taustaa

4-13. Ratkaisu 4: OK, mutta... vrt. 2. Ratkaisu 3: OK. Ratkaisu 5: OK? Nälkiintyminen?

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

812315A Ohjelmiston rakentaminen. Asynkronisuus

C++11 seminaari, kevät Johannes Koskinen

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Samanaikaisuuden hallinta

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Semaforit ja rinnakkaisuuden hallinta

Semaforit ja rinnakkaisuuden hallinta

Lukkiutuminen. Taustaa Aterioivat Filosofit Ennaltaehkäisy Havaitseminen Välttely. Andrews 4.3 Stallings (tai mikä tahansa KJ-kirja)

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

Rinnakkaistietokoneet luento S

Ohjelmoinnin peruskurssien laaja oppimäärä

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

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

Tutoriaaliläsnäoloista

Verkkojen verkko - maailmankylä. Hajautetut järjestelmät yhteistyön ongelmallinen maailma. Hajautettuja järjestelmiä. Hajautusta!. miksi oikeastaan?

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla

poissulkeminen ohjelmoijan vastuulla P():t ja V():t siellä, täällä ja tuolla - meniköhän oikein? Yksityiskohtia pois ohjelmoijalta kääntäjälle

Monitorit. Monitori Synkronointimenetelmiä Esimerkkejä

Tavoite. Monitorit. Semafori perusmekanismi synkronointiin. Hyötyjä:

Luento 1 Tietokonejärjestelmän rakenne

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

Tietokoneen toiminta, K Tavoitteet (4)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

IT K 1 45 K ä yt t öj ä rj estelmät

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Taustaa. Lukkiutuminen. Seuraukset. Määritelmiä Lukkiuma (deadlock) päättymätön odotus BLOCKED-tilassa. prosessi P. prosessi Q. pyydä A? OK.

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

OSA II: Hajautettu ympäristö. Sisältö, osa II. Sanomanvälitys. Käsitteistöä. Sanomanvälitys. Kommunikointi. Sanomanvälitys. Etäproseduurikutsu

OSA II: Hajautettu ympäristö. Ei yhteistä muistia. Rio 2004 / Auvo Häkkinen

Sisältö, osa II. Sanomanvälitys. Kanavat. Hajautettu ympäristö Ei yhteistä muistia Kommunikointi sanomien välityksellä.

Monitorit -projekti Rinnakkaisohjelmointi

5. Luento: Rinnakkaisuus ja jako prosesseihin (+ lyhyesti reaaliajasta) Arto Salminen,

Different language, different terminology. Process and thread

13. Loogiset operaatiot 13.1

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Transaktiot - kertausta

Tietokoneen toiminta (Computer Organization I)

Hajautettu ympäristö Ei yhteistä muistia Kommunikointi sanomien välityksellä

Hajautettu ympäristö Ei yhteistä muistia Kommunikointi sanomien välityksellä

Tietokoneen toiminta (Computer Organization I)

Etäproseduurikutsu, Remote Procedure Call (RPC) Etäproseduurikutsu. Poissulkeminen moduulin sisällä?

Ehto- ja toistolauseet

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Etäproseduurikutsu, Remote Procedure Call (RPC) Etäproseduurikutsu. Poissulkeminen moduulin sisällä?

Etäproseduurikutsu. Etäproseduurikutsu, Remote Procedure Call (RPC)

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

Semaforit Javassa. Mari Kononow, Eveliina Mattila, Sindi Poikolainen HELSINGIN YLIOPISTO

Tietokoneen toiminta (Computer Organization I)

Käyttöjärjestelmät: prosessit

Intel Threading Building Blocks

Semaforit ja rinnakkaisuuden hallinta. Tuottajat ja kuluttajat. Halkaistu binäärisemafori (Split binary semaphore) semaforit empty ja full

Transkriptio:

Rinnakkaisohjelmointi Liisa Marttinen 5.6.2006 5.6.2006 Liisa Marttinen 1

Missä rinnakkaisuutta? tietokoneiden käyttöjärjestelmissä I/O-toiminta WWW-palvelin palvelee samanaikaisesti useita asiakkaita hajautettu laskenta SETI-projekti, sääennusteet, salakirjoituksen murtaminen sulautetut järjestelmät esim. autoissa keräämässä ja käsittelemässä tietoja eri paikoista simulaatiot reaalimaailman tapahtumien mallintaminen multimedia-/peliohjelmat samanaikaisesti käsiteltävä liikkuvaa kuvaa ja ääntä komponenttiohjelmointi 5.6.2006 Liisa Marttinen 2

Tavoite Tunnistaa rinnakkaisuuteen liittyvät ongelmat, tietää peruskeinot rinnakkaisuuden tehokkaaseen toteuttamiseen ja osaa toteuttaa tarvittava prosessien tahdistaminen yleisesti käytettyjen menetelmien avulla. Yleisesti, ei mihinkään kieleen tai järjestelmään keskittyen 5.6.2006 Liisa Marttinen 3

Eri näkökulmia tarkastella rinnakkaisuutta Spesifiointi + verifiointi Keskitytään rinnakkaisuuden ydinasioihin. KJ+ laitteet TÄMÄ KURSSI Ohjelmointikielet Toteutukset 5.6.2006 Liisa Marttinen 4

Kurssin sisältö 1. Rinnakkaisuuden ongelmakenttä käsitteitä ja termejä 2. Prosessien tahdistus semaforilla semafori, P- ja V-operaatiot 3. Prosessien tahdistus monitorilla monitori, signal ja wait 4. Tahdistus ilman yhteistä muistia Sanomanvälitys Etäproseduurikutsu (RPC) Adan rendezvous 5.6.2006 Liisa Marttinen 5

Kirjallisuutta ja muuta materiaalia Gregory Andrews: Foundations of Multithreaded, Parallel, and Distributed Programming, Addison Wesley, 2000 M. Ben-Ari: Principles of concurret and distributed programming, Addison-Wesley, 2. edition 2006 Gadi Taubefeld: Synchronization Algorithms and Concurrent Programming, Pearson, 2006 HY:n TKTL:n kurssin Rinnakkaisohjelmointi (-ohjelmistot) luentokalvot Vuosien varrella kehitelleet Teemu Kerola, Timo Alanko, Auvo Häkkinen, Liisa Marttinen 5.6.2006 Liisa Marttinen 6

Concurrent programming (computing) (from Wikipedia) Concurrent computing is the concurrent (simultaneous) execution of multiple interacting computational tasks. These tasks may be implemented as separate programs, or as a set of processes or threads created by a single program. The tasks may also be executing on a single processor, several processors in close proximity, or distributed across a network. Concurrent computing is related to parallel computing, but focuses more on the interactions between tasks. Correct sequencing of the interactions or communications between different tasks, and the coordination of access to resources that are shared between tasks, are key concerns during the design of concurrent computing systems. Pioneers in the field of concurrent computing include Edsger Dijkstra, Per Brinch Hansen, and C. A. R. Hoare 5.6.2006 Liisa Marttinen 7

1. Rinnakkaisuuden ongelmakenttä Prosessin ajallinen epädeterministisuus Prosessin tilat ja käskyjen suoritus. Atomisuus, kriittinen alue Poissulkeminen ja prosessien tahdistus, Lukkiutuminen ja nälkiintyminen Toiminnan oikeaksi osoittaminen Test-And-Set, lukkomuuttuja 5.6.2006 Liisa Marttinen 8

Ohjelman suoritus if (x==0) a=10 else b=5; LOAD R1, x J NZER R1, bb aa LOAD R2, =10 STORE R2, a JUMP ohi bb LOAD R2, =5 ohi STORE R2, b Tietokone osaa suorittaa vain oman konekielensä käskyjä => korkeamman tason ohjelmointikielen lauseet käännetään ensin konekielisiksi. Konekielisen ohjelman suoritus voi keskeytyä jokaisen konekielisen käskyn jälkeen: aikaviipalekeskeytys laitteistokeskeytys muu KJ:n väliintuloa vaativa tilanne 5.6.2006 Liisa Marttinen 9

Initiated 5. Odotus päättyy 1. alkutoimet READY to Run 3. Aikaviipale täyttyy 2. vuorottaja antaa prosessille prosessorivuoron WAITING Prosessin elinkaari: prosessin tilat ja tilasiirtymät 4. Odotustilaan RUNNING Terminated 6. Valmistuu tai paha virhetilanne 5.6.2006 Liisa Marttinen 10

Yksi prosessori, moniprosessorikone, hajautettu järjestelmä Yksi prosessori Moniajo eli rinnakkaisuus näennäistä, mutta prosesseja tai säikeitä (thread) suoritetaan limittäin KJ:n määräämässä järjestyksessä. Kommunikointi yhteisen muistin kautta Monta prosessoria Aito rinnakkaisuus mahdollinen, kommunikointi yhteisen muistin kautta tai Monta tietokonetta Hajautettu järjestelmä, aito rinnakkaisuus, kommunikointi sanomanvälitystä käyttäen 5.6.2006 Liisa Marttinen 11

Atominen toiminto (atomic action) Käsky tai käskyjakso, joka voidaan suorittaa yhtenä rinnakkaisuuden kannalta jakamattomana toimintona; jota ei voida keskeyttää (välitilat eivät näy muille) yksi konekäsky kaikissa koneissa test-and-set konekäsky Arvon testaaminen ja asetus yhtenä konekäskynä => jakamattomana toimintona Laajempia kokonaisuuksia voidaan toteuttaa kriittisen alueen protokollien avulla Jakamattomuus koskee yleensä vain yhdessä toimivia prosesseja, oikeaan toimintaan sitoutuneita 5.6.2006 Liisa Marttinen 12

Kun suoritetaan ohjelmia rinnakkain, lopputulos on epädeterministinen Olkoon x==2 ja y ==5 co P: <x = x + y;> Rinnakkaisia atomisia (<>) Q: < y = x - y;> suorituksia R: <x = x y;> oc Rinnakkain suoritettuna suoritusjärjestys voi vaihdella (Tässä 6 eri järjestystä). Jos suoritukset eivät ole atomisia, ne voivat limittyä konekäskyttäin. P Q R P1: LOAD X Q1: LOAD X R1: LOAD X P2: ADD Y Q2: SUB Y R2: SUB Y P3: STORE X Q3: STORE Y R3: STORE X Erilaisia vaihtoehtoja tulee hyvin, hyvin paljon enemmän! Kaikki vaihtoehdot eivät ole oikean toiminnan kannalta hyväksyttyjä. 5.6.2006 Liisa Marttinen 13

Esimerkki: pankkiautomaatit PA P: nosto ==200 PA Q: nosto =100 LOAD saldo SUB nosto STORE saldo.. LOAD saldo SUB nosto STORE saldo Vain järjestykset: P1P2P3Q1Q2Q3 ja Q1Q2Q3P1P2P3 antavat pankin kannalta oikean tuloksen saldo ==0, muut saldoksi joko 100 tai 200 STOREkäskyn suoritusjärjestyksestä riippuen saldo == 300 P1P2P3Q1Q2Q3 P1Q1P2P3Q2Q3 P1P2Q1P3Q2Q3 P1Q1Q2P2P3Q3 P1Q1P2Q2P3Q3 P1P2Q1Q2P3Q3 P1Q1Q2Q3P2P3 P1P2Q1Q2Q3P3 P1Q1Q2P2Q3P3 P1Q1P2Q2Q3P3 P1Q1Q2P2Q3P3 Vastaavasti kun ensin on Q1... 5.6.2006 Liisa Marttinen 14

Huom! Tietokantasovellukset lukitsevat datan, rinnakkaisohjelmoinnissa rajoitetaan prosessien suoritusta Kriittinen alue (critical section) Ohjelmakoodin käskyjono, jota vain yksi prosessi kerrallaan voi suorittaa poissulkeminen (mutual exclusion) esim. yhteisen muuttujan päivittäminen a: 5 Prosessi1: a=a+1; Prosessi2: a=a+1; a: a: 6 7?? 5.6.2006 Liisa Marttinen 15

Kriittinen (koodi)alue int buf[n]; buf Yhteinen muistialue process kertoma (int arvo) { int apu = 1, i =2; while (i<= arvo) { apu = i*apu; i++; } buf[arvo] = apu; } process laskija( ) { int apu, luku,...; while (true) { laske jotain; luku=f( ); # laske luku apu = buf[luku]; if (apu = = 0)... else lasketaan taas;... { { 5.6.2006 Liisa Marttinen 16

Kriiitinen alue pyritään pitämään pienenä, koska se rajoittaa prosessien rinnakkaisuutta while (true) { do something not critical1; enter critical section; critical section 1; exit critical section; do something not critical1 } PROSESSI1:n koodi while (true) { do something not critical2; enter critical section; critical section 2; exit critical section; do something not critical2 } PROSESSI2:n koodi 5.6.2006 Liisa Marttinen 17

enter critical section exit critical section varmistavat poissulkemisen vain yksi prosessi pääsee suorittamaan kriittisen alueensa koodia, muut joutuvat odottamaan Seuraava pääsee kriittiselle alueelleen vasta, kun siellä oleva on poistunut (exit critical section) Toteutus riippuu atomisen toiminnon koosta 5.6.2006 Liisa Marttinen 18

Decker s algorithm: the solution to the critical section problem for two processes (atomisia vain yksittäiset konekäskyt (esim. load tai store)) boolean enter1=false, enter2=false; int turn=1; /* vain lukee enter2- ja turn-muuttujia */ process P1 { while (true) { noncritical section; enter1=true; /* enter critical section */ while(enter2) if (turn==2) { enter1=false; while(turn==2) skip; /*odotussilmukka*/ enter1=true; } critical section; enter1=false; turn=2 /* exit critical section */ noncritical section; { { Vastaavasti prosessi P2. Melkoisen monimutkainen! Entä jos n prosessia! Poissulkeminen yksinkertaistuu, jos LOAD + STORE on atominen Esim. test-and-set, test-and-test-andset, exchance, 5.6.2006 Liisa Marttinen 19

Test- and-set ja lukkomuuttuja Luetaan muuttujan arvo ja asetetaan se yhtenä atomisena toimintona Oma konekielinen käsky => atominen laitetasolla Nyt voidaan testata muuttuja ( alueen lukon ) tilaa ja varata se itselle: bool test-and-set(boolean lock) { <bool arvo = lock; lock = true; /*lukko kiinni*/ return arvo;> /*saiko lukon vai oliko jo varattu jollekin toiselle?*/ } 5.6.2006 Liisa Marttinen 20

Test-and-Set-käsky Oma konekielen käsky atominen laitetason suoritus (execute-vaihe) argumentti: lukkomuuttuja boolean paluuarvo TS L merkitys: < temp=l; L=0; if (temp==1) jump *+2; > Käyttö: merkitään varatuksi! LOOP: TS L JUMP LOOP Jää odottamaan!... Saa edetä! 5.6.2006 Liisa Marttinen 21

Lukkomuuttujat (Spin Locks) Boolean-muuttuja lock # sopimus prosessien kesken! lock== true kriittinen alue varattu (in1 V in2 V V inn) lock==false kriittinen alue vapaa Entry protocol while (lock) ; # aktiivinen odotus, pörrää # check again if (!lock) # busy loop lock=true; Exit protocol lock=false; 5.6.2006 Liisa Marttinen 22

Kriittisen alueen hallinta lukkomuuttujalla N:lle prosessille bool lock = false; /* lukko auki */ process CriticalSection[i=1 to N] { while(true) { while (test-and-set (lock)) skip; critical section; lock = false; noncritical section; } } 5.6.2006 Liisa Marttinen 23

Aktiivinen odotus (busy wait) Tuhlaa koneen resursseja Prosessi kuluttaa prosessoriaikaa tai aikaviipaleita odottaessaan Tutkii koko ajan lukkomuuttujaa Korkean prioriteetin prosessi estää alemman prioriteetin prosesseja pääsemästä suoritukseen Parempi olisi passiivinen odotus wait-tilassa Ainakin silloin kun prosessorilla on muuta käyttöä Odottava prosessi siirretään wait-tilaan ja sieltä (yleensä) ready-tilaan vasta, kun prosessi todella pääsee etenemään kriittiselle alueelle. => semaforit, monitorit 5.6.2006 Liisa Marttinen 24

Rinnakkaisen (jatkuvasti toimivan) ohjelman oikeellisuus (correctness) Turvallisuusominaisuudet (safety properties) Tällaisen ominaisuuden on oltava aina tosi Oikea toiminta, esim. aina kriittisellä alueella on korkeintaan yksi prosessi eli ei koskaan tapahdu sellaista, että usea prosessi suorittaa samanaikaisesti kriittistä koodiaan Ei tapahdu lukkiutumista Elävyysominaisuudet (liveness properties) Ominaisuus tulee tulee joskus todeksi Ei tapahdu nälkiintymistä eli jokainen prosessi pääsee joskus kriittiselle alueella Tehokkuus Jos pääsisi etenemään (esim. kriittistä aluettaan suorittamassa ei ole muuta prosessia), ei mitään turhaa viivystystä 5.6.2006 Liisa Marttinen 25

Lukkiutuminen ja nälkiintyminen Lukkiutuminen (deadlock) Mikään prosessi ei pääse etenemään, kaikki odottavat kehässä toisiaan Nälkiintyminen (starvation) Jokin tai jotkut prosessit eivät lainkaan pääse etenemään. Muut saavat vuoron aina ennen. 5.6.2006 Liisa Marttinen 26

Reiluus (fairness) Heikko reiluus Jokainen saa joskus vuoron mikään prosessi ei täysin nälkiinny Vahva reiluus Kaikki saavat tasapuolisesti vuoroja 5.6.2006 Liisa Marttinen 27

Toteutuvatko vaatimukset lukkomuuttujaa käytettäessä? Poissulkeminen? OK! Vain yksi prosessi kerrallaan suorituksessa kriittisellä alueella Ei lukkiutumisvaraa, ei elohiirtä? OK! Jos useita sisäänpyrkijöitä, jotain onnistaa Ei turhia viipeitä, ei nälkiintymistä? OK! Jos alue vapaa, pääsy sallittava Lopulta onnistaa? EI VÄLTTÄMÄTTÄ Kukaan ei joudu odottamaan ikuisesti Ongelmana suorituskyky, jos monta prosessia kilpailemassa ja koko ajan tutkimassa ja kirjoittamassa lukkomuuttujaan Rasittaa muistia ja muistiväylää Kirjoittaminen häiritsee välimuistin toimintaa => Test-and-Test-and-Set = testataan ensin, onko lukko vapaa 5.6.2006 Liisa Marttinen 28

Rinnakkaisen ohjelman oikeellisuuden osoittaminen Formaali spesifiointi ja mallintaminen + mallin ohjelmallinen tarkistaminen Tilamalli (state model): kuvataan kaikki mahdolliset suorituspolut tiloina ja kaarina Ongelmana tilaräjähdys Deduktiivinen todistus: temporaalilogiikka P1 Invariantti lauseke on tosi joka kohdassa ohjelmaa R1 Q1 Induktiivitodistus tosi alkutilassa => R1 P2 tosi kaikkialla R2 5.6.2006 Liisa Marttinen 29

Specifiointi- ja verifiointivälineitä temporaalilogiikka Spin (model checker) pystyvät tarkistamaan nykyisin jo miljardeja tiloja BACI (concurrency simulator) Paljon erilaisia 5.6.2006 Liisa Marttinen 30

Prosessien tahdistusta eli synkronointia tarvitaan Keskinäiseen poissulkemiseen (mutual exclusion), jotta prosessit eivät sotke toistensa toimintaa Vain yksi kerrallaan kriittisellä alueellaan Prosessien toiminnan koordinointiin, jotta prosessien yhteistoiminta sujuisi halutulla tavalla tuottajakuluttaja -malli Ehtosynkronointi (conditon synchronization) prosessin eteneminen estetään, kunnes tietty ehto toteutuu kuluttaja saa ottaa puskurista vasta kun tuottaja on sinne jotakin tuonut tuottaja saa kirjoittaa uutta vasta kun kuluttaja on entisen lukenut tuottaja data puskuri kuluttaja 5.6.2006 Liisa Marttinen 31

Keskinäinen kommunikointi prosessi i prosessi j kommunikointiin voidaan käyttää -yhteistä muuttujaa -sanomanvälitystä Prosessien ja/tai säikeiden välillä on hyvin monenlaista tarvetta kommunikointiin 5.6.2006 Liisa Marttinen 32

Prosessit voivat häiritä toisiaan! prosessi i yhteinen muisti i: 10 prosessi j k=k+1; i=i-1 k: 5 k=k+1; i=i-1; Prosessien tai säikeiden yhteistoiminta pitää varmistaa! 5.6.2006 Liisa Marttinen 33

Tuottajat ja kuluttajat: välissä rajallinen puskuri tuottajat kirjoittavat puskuriin kuluttajat lukevat puskurista Mitä ongelmia voi syntyä? Mitä toimintoja tässä pitää synkronoida? puskurin käsittely kirjoittamisen ja lukemisen tahdistus: täysi puskuri tyhjä puskuri 5.6.2006 Liisa Marttinen 34

Kommunikointitavat Yhteiskäyttöinen muisti LOAD STORE LOAD STORE viestien tahdistus muistipaikan käyttö Sanomanvälitys SEND RECEIVE RECEIVE Kanava pitää viestit järjestyksessä Liisa Marttinen SEND

Kumpi kommunikointitapa? Tarkkuus / nopeus (granularity) Yhteiskäyttöinen muisti välitön vaikutus käskyn tarkkuudella Sanomanvälitys, dedikoidut prosessorit LAN: 5-10 ms viiveet proseduurin tarkkuudella Sanomanvälitys, yleiset palvelinkoneet LAN/WAN: 10 ms n sekunnin viiveet palvelun tarkkuudella 5.6.2006 Liisa Marttinen 36

Luotettavuus Yhteiskäyttöinen muisti täysin luotettava (tai täysi epäonnistuminen) Sanomanvälitys Saman koneen sisäisesti sama kuin yhteiskäyttöisellä muistilla (lähes) LAN kommunikointi luotettavaa prosessit voivat epäonnistua toisista riippumatta WAN epäluotettava kommunikointi prosessit voivat epäonnistua toisista riippumatta

Prosessi ja sen säikeet Stallings Fig 4.2 5.6.2006 Liisa Marttinen 38

Yhteiskäyttöinen muisti / Säikeet Nopein kommunikointitapa Yhteiskäyttöinen muisti oletusarvoisesti saman prosessin säikeille KJ huolehtii viittauksista yhteisiin globaaleihin muuttujiin (kirjanpito PCB:ssä) Kullakin säikeellä oma pino dynaaminen tilanvaraus aliohjelmia kutsuttaessa kullakin säikeellä omat paikalliset muuttujat Käyttö normaaleilla muistiviitekäskyillä LOAD, STORE, 5.6.2006 Liisa Marttinen 39

Prosessien välinen kommunikointi putki (pipe) eräänlainen puskuri, joka siirtää tavuvirtaa prosessilta toiselle Unix sanomajono (message queue) prosessi voi lähettää sanomia sanomajonojen avulla Esim. Solaris, System V jaettu muistialue (shared memory) alue kuuluu useamman prosessin muistiavaruuteen Unixissa yhteinen muistialue kaikkien aluetta jakavien prosessien virtuaalimuistia säie (thread) yhteinen muistialue oma kontrolli 5.6.2006 Liisa Marttinen 40

POSIX-kirjasto, pthread Yli 60 funktiota Luonti, pysäytys, lopettaminen, pthread_create(), pthread_attr_init() pthread _exit(), pthread_join(), pthread_detach() sched_yield() Synkronointi, poissulkeminen mutexit, rw-lukot, ehtomuuttujat JAVA: pakkaus java.lang luokka Thread säie.start(), säie.stop(), säie.sleep() 5.6.2006 Liisa Marttinen 41

#include <pthread.h> // esittele globaalit muuttujat tässä (shared) int main(int argc, char *argv[]) { } pthread_t pid, cid; printf( Creating two threads\n"); pthread_create(&pid, NULL, Producer, NULL); pthread_create(&cid, NULL, Consumer, NULL); pthread_join(pid, NULL); pthread_join(cid, NULL); printf( Threads joined\n"); void *Producer(void *arg) { // säikeen suoritus alkaa tästä // esittele paikalliset muuttujat tässä (private) printf( Producer started\n"); } void *Consumer(void *arg){ } printf( Consumer started\n"); // säikeen suoritus alkaa tästä 5.6.2006 Liisa Marttinen 42

Täysin Poissulkeminen erilliset Kilpailu Lukkiutuminen prosessit Nälkiintyminen Prosessit Poissulkeminen epäsuorasti Yhteistyö Lukkiutuminen tietoisia toisista Yhteinen muisti Nälkiintyminen Prosessit Datan ajantasaisuus suorasti Yhteistyö Lukkiutuminen tietoisia toisista Sanomanvälitys Nälkiintyminen 5.6.2006 Liisa Marttinen 43