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

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

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

T Rinnakkaiset ja hajautetut digitaaliset järjestelmät Stokastinen analyysi

13. Loogiset operaatiot 13.1

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

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

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

13. Loogiset operaatiot 13.1

Semaforit ja rinnakkaisuuden hallinta

Semaforit ja rinnakkaisuuden hallinta

Ohjelmoinnin peruskurssien laaja oppimäärä

Stabiloivat synkronoijat ja nimeäminen

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

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

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

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

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

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

16. Ohjelmoinnin tekniikkaa 16.1

Harjoitus 3 (viikko 39)

2 Konekieli, aliohjelmat, keskeytykset

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

Ohjelmointiharjoituksia Arduino-ympäristössä

16. Ohjelmoinnin tekniikkaa 16.1

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Ohjelmoinnin peruskurssien laaja oppimäärä

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

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

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

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

Yhteenvetoa. Ongelmakenttä

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

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

4.3. Matemaattinen induktio

Ehto- ja toistolauseet

Ohjelmoinnin perusteet Y Python

Luento 2: Viivan toteutus

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

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

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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

7.4 Sormenjälkitekniikka

Algoritmit 2. Demot Timo Männikkö

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

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

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

Kokemuksia Geoserveristä IL:n avoimen datan projektissa Mikko Visa

Javan semaforit. Joel Rybicki, Aleksi Nur mi, Jara Uitto. Helsingin yliopisto

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

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi

C++11 seminaari, kevät Johannes Koskinen

Java-kielen perusteita

Algoritmit 2. Demot Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Verkon värittämistä hajautetuilla algoritmeilla

Ohjelmoinnin perusteet Y Python

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

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

Ohjelmoinnin perusteet Y Python

Konsensusongelma hajautetuissa järjestelmissä. Niko Välimäki Hajautetut algoritmit -seminaari

Etäproseduurikutsu. RPC Toteutus Virhesemantiikka. Andrews 8.1, 10.3, Stallings 13.3

6.4. Järjestyssuhteet

Algoritmit 2. Luento 10 To Timo Männikkö

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Rinnakkaisohjelmointi, Syksy 2006

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Verilogvs. VHDL. Janne Koljonen University of Vaasa

T Ohjelmistojen määrittely- ja suunnittelumenetelmät Harjoitustyöraportti TNT - Tarkistetaan Ne Tentit Analyysimalli

Harjoitus 6 (viikko 42)

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

Harjoitus 4 (viikko 47)

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

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

RINNAKKAINEN OHJELMOINTI A,

Algoritmit 1. Luento 10 Ke Timo Männikkö

Ohjelmoinnin perusteet Y Python

Verifioinnin ja validoinnin ero. 7. Verifiointi ja validointi. Verifiointi- ja validointitekniikat. Verifiointi- ja validointitekniikat II

12. Javan toistorakenteet 12.1

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

Liikehavaintojen estimointi langattomissa lähiverkoissa. Diplomityöseminaari Jukka Ahola

21~--~--~r--1~~--~--~~r--1~

Algoritmit 1. Luento 1 Ti Timo Männikkö

Ohjelmointi 1 Taulukot ja merkkijonot

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Ohjelmoinnin perusteet Y Python

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Palvelut. Sulautetut järjestelmät Luku 2 Sivu 1 (??) Sulautetut käyttöjärjestelmät

Transkriptio:

T-79.179 Rinn. ja haj. digitaaliset järjestelmät Laskuharjoitus #7 15.3.2002 Laatinut: Esa Kettunen 1. Tarkastellaan seuraavaa stokastista Petri-verkkoa: p 1 p 2 getlock 1 getlock 2 lock write 1 write 2 releaselock 1 releaselock 2 Transitioiden laukeamistaajuudet ovat: Λ(getlock 1 ) = 5,Λ(getlock 2 ) = 10,Λ(releaselock 1 ) = 20,Λ(releaselock 2 ) = 5. Laadi ja ratkaise tasapainoyhtälö. Laske merkkien lukumäärän odotusarvo paikoille p 1 ja p 2. Miten transition releaselock 1 :n laukeamistaajuuden muutos vaikuttaa näihin odotusarvoihin? 1

) * + -,. 1 2. Ehkä olet jo havainnut, että Petri-verkot ovat aivan omalla abstraktiotasollaan. Petri-verkkospesifikaation toteuttaminen onkin oma taiteen lajinsa. Paljon riippuu siitä, mikä on kohdejärjestelmän rinnakkaisuusmalli. Synkroninen kommunikointi on tietyssä mielessä lähempänä Petriverkkoja, kun taas epäsynkroninen kommunikointi voi aiheuttaa lisätyötä. Seuraavassa hahmotellaan tilaa testaavan mutex-algoritmin toteutus käyttäen sanomanvaihtoon operaatioita send ja receive, joiden kaltaiset löytyvät mm. TCP/IP:n socket-pohjaisesta ohjelmointirajapinnasta. M H A = @ O? = H A = @ H A = @ O A J A H M = A K F > A C E M > A C E H E @ A M E @ A I J F M M H E J E C? = M H E J A H A = @ E C I J F H Teemme eron seuraavien Petri-verkon primitiivi-ilmiöiden välillä: testataan onko token paikassa, otetaan token paikasta tai pannaan token paikkaan. Järjestelmässä on kaksi prosessityyppiä, writer ja reader eikä kummastakaan voi olla enempää kuin yksi instanssi käynnissä kunakin ajan hetkenä. (On luonnollisesti myös muunlaisia ratkaisuja readers/writers-ongelmaan: joissakin sallitaan monta instanssia.) Kirjoittajaprosessilla on 3 prosessin omaa paikkaa: widle, wready ja writing. Ne mallitetaan kokonaislukumuuttujina. Kaksi paikkaa jaettuna lukijaprosessin kanssa: canread ja canwrite. Ne mallitetaan kokonaislukumuuttujina, mutta tokenin poistaminen/paneminen paikkaan edellyttää kommunikointia lukijaprosessin kanssa. 2

Lukijaprosessilla on 3 kolme omaa paikkaa: idle, ready ja reading. Ne mallitetaan kokonaislukumuuttujina. Kaksi paikkaa jaettuna lukijaprosessin kanssa: canread ja canwrite. Ne mallitetaan kokonaislukumuuttujina, mutta tokenin poistaminen/paneminen paikkaan edellyttää kommunikointia kirjoittajaprosessin kanssa. Osoittautuu, että writer pelkästään testaa tokenin olemassaoloa paikassa canread. Reader puolestaan testaa tokenin olemassaoloa canwrite-paikassa. Operaatiot send ja receive perustuvat epäsynkroniseen kommunikointiin, mutta luonnollisesti koko järjestelmän saa toimimaan myös synkronisella kommunikoinnilla (jolloin kuittaukset ovat tarpeettomia). process writer var widle: integer := 1; wready: integer := 0; writing: integer := 0; canread: integer := 1; canwrite: integer := 1; enter_crit: boolean := FALSE; procedure check_tokens (canwrite_op: canwrite_id) var place: place_id; oper: oper_id; recv operation if canwrite_op = Q_CANWRITE_GET send (Q_CANWRITE, Q_GET) elseif canwrite_op = Q_CANWRITE_PUT send (Q_CANWRITE, Q_PUT) while recv (place, oper) or (not canwrite_op = Q_CANWRITE_NONE) if place = Q_CANREAD and oper = Q_GET canread := canread - 1 send (Q_CANREAD, Q_ACK) else if place = Q_CANREAD and oper = Q_PUT canread := canread + 1 send (Q_CANREAD, Q_ACK) else if place = Q_CANWRITE and oper = Q_ACK canwrite_op := Q_CANWRITE_NONE endwhile endprocedure 3

begin writer process... while true enter_crit := calculate_a_little () check_tokens (CANWRITE_NONE) if widle and enter_crit widle := 0 wready := 1 if wready and canread and canwrite check_tokens (CANWRITE_GET) if canread canwrite := 0 wready := 0 writing := 1 now in critical section (writing) critical_section (Q_WRITE); now leaving critical section (writing) canwrite := 1 writing := 0 idle := 1 enter_crit := FALSE check_tokens (CANWRITE_PUT) else check_tokens (CANWRITE_PUT) endwhile endprocess 4

Reader-prosessi toteutetaan samaan tapaan. Kukin prosessi tuottaa lokin, jota verrataan Petri-verkon saavutettavuusgraafiin. Tarkkaavainen lukija on jo huomannut, että writer-prosessi tuottaa pelkkiä osittaismerkintöjä, koska se näkee ainoastaan viisi paikoista. Tämän vuoksi tyydymme siihen, että lokin ja saavutettavuusgraafin vertailussa löytyy sekvenssi osittaismerkintöjen kanssa yhteensopivia solmuja. Muussa tapauksessa päättelemme, että toteutus on virheellinen. 1 Joskus ohjelmoijan tehtävänä on toteuttaa vain osa spesifikaatiosta. Tällöin vaihtoehtona voi olla testata näkyvät transitiot (eikä siis merkintöjä) ja pitää muita transitioita näkymättöminä. Sen tarkistaminen löytyykö laukaistujen näkyvien transitioiden jälki saavutettavuusgraafista on suhteellisen yksinkertaista. Tämä lähestymistapa on ilmiselvässä yhteydessä prosessialgebrojen teorian kanssa. ), - 1 *, - 1 ), -. +, 1 *, -. ) - +,. * - Yo. saavutettavuusgraafissa kirjoittajaprosessin tulee generoida merkintäsekvenssit ADE*-BDE*-CDE*-ADE*, ADE*-BDE*-BE*-BDE*, ADE*- AE*-ADE* jne. eikä mitään muita sekvenssejä. Joskus sekä toteutuksessa ja Petri-verkossa on lukkiuma. Hyväksyttävää on vain se, että lukkiumat vastaavat toisiaan. Tilaa testaavan mutex-algoritmin voi parhaiten käsittää keinona taata keskinäinen poissulkevuus thread-pohjaisessa toteutuksessa (tai yleisemmin: prosessien jakaessa RAM-muistia). Tällöin TCP/IP-tyylinen send/receive ei todellakaan ole hyvä idea. Semaforit tai jaetut muuttujat ovat usein tehokkaampi tapa kommunikoida. Kriittisen resurssin voi kuvitella olevan esim. tiedosto. (Keskinäinen poissulkevuus voitaisiin saavuttaa lukitsemalla tiedosto, mutta tämä olisi todennäköisesti tehottomampaa kuin edellä esitetty Petri-verkkoratkaisuun perustuva mutexlähestymistapa.) 1 VAROITUS: Patologisessa tapauksessa voi käydä niin, että huolimatta reader- ja writerprosessin toteutusten oikeellisuudesta erikseen, kokonaisuus ei kuitenkaan toimi niinkuin Petriverkkospesifikaatio määrää. Tämä edellyttää pidemmälle meneviä prosessialgebran ja testauksen teorian opintoja kuin mitä tässä kurssissa voidaan edellyttää. Suurin varmuus saadaan, kun testiloki tuottaa kokonaisia merkintöjä ja koko saavutettavuusgraafin, mikä kieltämättä on varsin kova vaatimus testin kattavuudelle. 5