200 likes | 323 Views
Rinnakkaisuus. Rinnakkaisella ohjelmalla tarkoitetaan ohjelmaa, jossa rinnakkain etenevät prosessit kommunikoivat keskenään käsittelemällä yhteisiä tietorakenteita tai sanomien avulla Esimerkiksi moniajokäyttöjärjestelmä. Rinnakkaiset prosessit.
E N D
Rinnakkaisuus • Rinnakkaisella ohjelmalla tarkoitetaan ohjelmaa, jossa rinnakkain etenevät prosessit kommunikoivat keskenään käsittelemällä yhteisiä tietorakenteita tai sanomien avulla • Esimerkiksi moniajokäyttöjärjestelmä
Rinnakkaiset prosessit • Yksittäisen ohjelman sisällä on rinnakkain eteneviä prosesseja (multitasking) • Ja/tai järjestelmässä on toisistaan riippumatta rinnakkain eteneviä prosesseja (moniajo, multiprogramming)
Rinnakkaisuutta voi olla todellista (monisuoritinjärjestelmä) tai • näennäistä (yksi suoritin)
Syitä rinnakkaisuuteen • Nopeus: usea suoritin • Hajautus: esim. Hajautettu tiedostojärjestelmä • Ongelman luonne: Jotkin ohjelmointiongelmat on helpompi ratkaista • Modularisointi: esimerkiksi unixissa putket (pipe)=> sanomien vaihto
Prosessit voivat vaikuttaa toisiinsa • Suorasti: • käyttämällä yhteisiä tietorakenteita, lähettämällä toisilleen sanomia • Epäsuorasti • kilpailemalla resursseista
Ratkaistavia ongelmia • Poissulkemisongelma • Yhteisten tietorakenteiden päivitys • Synkronointi • tahdistaminen • Lukkiutuminen • prosessit odottavat ristiin toisiansa • Nälkiintyminen • Prosessi ei etene (prioriteetti alhainen)
Poissulkemisongelma • Samojen tietorakenteiden samanaikaisen käytön riskin sisältäviä käskyjaksoja kutsutaan kriittisiksi alueiksi • Kriittisen alueen käskyt pitäisi suorittaa yhtenä jakamattomana operaationa
Poissulkemisongelma voidaan lyhytaikaisesti välttää keskeytysten estämisellä, mutta ei kaikissa tilanteissa: • voi aiheuttaa virhetoimintoja laitteissa • kriittisen alueen sisällä voidaan joutua odottamaan jotain tapahtumaa
Esimerkkikäyttöjärjestelmässä käytetään poissulkemiseen synkronointikäskyä: if (lock_bit==1) wait; lock_bit= 1; ….kriittisen alueen käskyt lock_bit=0;
Dijkstran P- ja V-operaatiot VAL: semaforimuuttujan arvo, alkuarvo on tässä tapauksessa 1 LINK: Linkkiketju, johon on linkitetty semaforin arvon muuttumista jonottavien prosessien PCB:t P-operaatio (Passeer, pidätä) toimii seuraavasti: P(sem) SEM.VAL = SEM.VAL - 1 if (SEM.VAL < 0) { linkitä prosessin PCB LINK-ketjun loppuun; aseta prosessin tilaksi WAIT; siirry vuorontajaan; }
V-operaatio (Verlaaten, vapauta) toimii seuraavasti: V(sem) SEM.VAL = SEM.VAL + 1 if (SEM.VAL <= 0) { linkitä jonon ensimmäinen prosessielementti pois ja aseta aseta sen tilaksi READY; siirry vuorontajaan; } • Kriittiset alueet ympäröidään P- ja V-operaatioilla
Sykronointi • Voidaan ratkaista esimerkiksi P- ja V-operaatioilla • Käyttöjärjestelmissä usein eri operaatiot poissulkemisen ja synkronoinnin toteuttamiseksi
Synkronointi- ja poissulkemisoperaatioiden käytöstä • Käänteisprioriteettiongelma = kriittinen alue jää suljetuksi, koska alhaisen prioriteetin prosessi joutuu luopumaan kriittisellä alueella suorittimesta • Ongelma voidaan osittain ratkaista lisäämällä semaforimuuttujaan parametriksi prioriteetti, johon prosessi nostetaan kriittisellä alueella
Lukkiutumis- ja nälkiintymisongelmat • Lukkiutuminen = joukko prosesseja, jotka kaikki odottavat jonkin muun tähän joukkoon kuuluvan prosessin hallussa olevaa resurssia (myös muita tapauksia) • Lukkiutuminen estetään laukaisemalla lukitus tai välttämällä tai estämällä
Laukaiseminen • Havaitaan, ja lopetetaan tai perutetaan prosesseja • Välttäminen • resurssi annetaan prosessin käyttöön ehdolla, että resurssia on riittävästi vapaana • Estäminen • Esim. resurssien numerointi, kielto prosessia pyytämästä resurssia, jonka numero on pienempi kuin sen jo saaman resurssin
Sanomienvälitysmekanismit • Postilaatikkomekanismi P1 P4 Ei osoitetta mbox P2 P5 P3
Sanomajono P1 P4 Q1 P2 Q2 P3 Vastaanottava prosessi voi kuunnella useita kanavia ja noukkia viestejä - Lähettävän prosessin täytyy tuntea vastaanottaja
Sanomakanava • yksi- tai kaksisuuntaisia • esimerkiksi unix-putket tai socketit P1 P2 P3
Rinnakkainen ohjelmointi lausekielissä • Monitori • Aliohjelmapakkaus • Poissulkeminen tapahtuu automaattisesti • Synkronointia varten ehtomuuttujia sekä operaatio await() ja signal() • await(x) odotus; signal(x) herättää yhden odottajista • Sanomanvälitys • kohtaamismekanismin toteutus: • etäproseduurikutsu = proseduurikutsun parametrit saadaan toiselta prosessilta ja ulostuloparametrit välitetään takaisin