Stabiloivat synkronoijat ja nimeäminen

Samankaltaiset tiedostot
Stabiloivat synkronoijat ja nimeäminen

Stabilointi. Marja Hassinen. p.1/48

Stabilointi. arvosana. arvostelija. Marja Hassinen

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

Hajautetut algoritmit. seminaari syksyllä 2007 vastuuhenkilö Jyrki Kivinen toinen vetäjä Timo Karvi

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

Paikallinen stabilointi

Itsestabilointi: perusmääritelmiä ja klassisia tuloksia

Jaetun muistin muuntaminen viestinvälitykseksi

Algoritmit 2. Luento 7 Ti Timo Männikkö

Konsensusongelma hajautetuissa järjestelmissä

Datatähti 2019 loppu

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

Johdatus graafiteoriaan

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

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.

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

Tarkennamme geneeristä painamiskorotusalgoritmia

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Verkon värittämistä hajautetuilla algoritmeilla

Algoritmit 2. Luento 2 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

Algoritmi on periaatteellisella tasolla seuraava:

7.4 Sormenjälkitekniikka

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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

V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen

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

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Yleinen paikallinen vakautuva synkronointialgoritmi

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Itsestabiloivat algoritmit: Paikallinen stabilointi

Luku 8. Aluekyselyt. 8.1 Summataulukko

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

Rinnakkaistietokoneet luento S

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

1 Kertaus. Lineaarinen optimointitehtävä on muotoa:

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

verkkojen G ja H välinen isomorfismi. Nyt kuvaus f on bijektio, joka säilyttää kyseisissä verkoissa esiintyvät särmät, joten pari

Tehtävä 4 : 2. b a+1 (mod 3)

11. Javan toistorakenteet 11.1

Ohjelmoinnin perusteet Y Python

Tehtävä 2: Tietoliikenneprotokolla

Luento 5. Timo Savola. 28. huhtikuuta 2006

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.

811120P Diskreetit rakenteet

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

2 Konekieli, aliohjelmat, keskeytykset

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

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.

Algoritmit 2. Luento 10 To Timo Männikkö

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat.

Gaussin ja Jordanin eliminointimenetelmä

Malliratkaisut Demot

Ennakkotehtävän ratkaisu

Näin ollen saadaan tulos rad(g) diam(g). Toisaalta huomataan, että verkon G kaikilla solmuilla x ja y pätee kolmioepäyhtälön nojalla havainto

isomeerejä yhteensä yhdeksän kappaletta.

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Luonnollisen päättelyn luotettavuus

Tietorakenteet ja algoritmit

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.

12. Javan toistorakenteet 12.1

Algoritmit 1. Luento 13 Ma Timo Männikkö

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

10. Painotetut graafit

OULUN YLIOPISTO, BIOLOGIAN LAITOS Puututkimus

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.

Ohjelmoinnin perusteet Y Python

Datatähti 2000: alkukilpailun ohjelmointitehtävä

Seminaari: Hajautetut algoritmit syksy 2009

Nopea kertolasku, Karatsuban algoritmi

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

Taulumenetelmä modaalilogiikalle K

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

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

Ohjelmoinnin perusteet Y Python

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Matriisilaskenta (TFM) MS-A0001 Hakula/Vuojamo Ratkaisut, Viikko 47, 2017

Ratkaisu. Tulkitaan de Bruijnin jonon etsimiseksi aakkostossa S := {0, 1} sanapituudelle n = 4. Neljän pituisia sanoja on N = 2 n = 16 kpl.

Satunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Bayesin pelit. Kalle Siukola. MS-E2142 Optimointiopin seminaari: Peliteoria ja tekoäly

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Täydentäviä muistiinpanoja jäsennysalgoritmeista

Transkriptio:

Stabiloivat synkronoijat ja nimeäminen Mikko Ajoviita Helsinki 28.10.2007 Hajautettujen algoritmien seminaari HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

i Sisältö 1 Johdanto 1 2 Stabiloivat synkronoijat 2 2.1 Rajoittamaton α-synkronoija...................... 2 2.2 Rajoitettu α-synkronoija......................... 4 2.3 β-synkronoija............................... 6 3 Nimeämistekniikka 9 Lähteet 11

1 1 Johdanto Synkronoimattoman järjestelmän suunnitteleminen ja analysointi voi olla hyvinkin monimutkaista. Asynkronisessa järjestelmässä jokainen alkutila voidaan tulkita joukoksi suorituksia, jotka eroavat järjestykseltään toisistaan. Suorituksen etenemiselle voi olla monia erilaisia vaihtoehtoja, koska prosessorit suorittavat toimiaan eri tahdissa. Näin ollen kaikkien erilaisten alkutilojen analysointi voi olla työlästä. Synkronisessa järjestelmässä sitä vastoin jokainen prosessi vaihtaa tilaa samanaikaisesti. Näin alkutila määrittelee yksiselitteisesti suoritukset, jotka ovat mahdollisia siitä eteenpäin. Siksi onkin järkevää lähestyä asynkronisia ongelmia käyttäen apuna synkronisia tuloksia. Tämä tapahtuu kehittämällä yleinen simulointitekniikka, jonka avulla synkroniset ongelmat voidaan laajentaa suoritettavaksi synkronoimattomissa järjestelmissä. Tästä simulointitekniikasta käytetään nimeä synkronoija. Synkronoijan perusidea on, että asynkroniselle ongelmalle etsitään synkroninen ratkaisu. Synkronoijaa avuksi käyttäen synkroninen algoritmi voidaan suorittaa asynkronisessa järjestelmässä. Aina ei ole kuitenkaan järkevää käyttää synkronoijaa, sillä tehokkuus kärsii samalla. Vuorottelemalla tasaisesti suorituksia nopeimmat prosessit kärsivät ja niiden toiminta rajoittuu hitaampien prosessien tasolle. Vastaavasti nopeammat prosessit eivät kykene auttamaan hitaampia prosesseja suorituksessa. Kirjoitelman lopussa tutustutaan pintapuolisesti nimeämistekniikkaan [Dol00]. Verkon solmut voidaan erottaa toisistaan yksilöivillä tunnuksilla, jotka kaikki eroavat toisistaan. Tietyt sovellukset vaativat nimenomaan, että kaikilla prosessoreilla verkossa on yksilöivät tunnisteet. Voidaanko tälläisiä sovelluksia käyttää myös anonyymeissä verkoissa, joissa solmujen tunnisteita ei tunneta? Nimeämistekniikka tarjoaa tähän ongelmaan erään ratkaisun. Tekniikka nimeää satunnaisesti anonyymin verkon solmut ja selvittää sen jälkeen, onko samoja tunnuksia olemassa. Tarkoituksena on lopulta päästä vastaavaan tilanteeseen kuin systeemissä, jolla on yksilöivät tunnisteet prosessoreillaan. Nimeämistekniikka pohjautuu pääosin synkronoijan käyttöön sekä päivitysalgoritmiin.

2 2 Stabiloivat synkronoijat Alunperin synkronoija käsitteen esitteli Baruch Awerbuch vuonna 1985 [Awe85]. Hän kehitti kolme erilaista synkronoija-algoritmia, joita kutsutaan alpha-, beta- ja gamma-synkronoijiksi. Tässä yhteydessä tarkastelemme kahta ensin mainittua algoritmia. γ-synkronoija on niiden eräänlainen yhdistelmä, mutta se ei ole itsestään stabiloiva algoritmi. 2.1 Rajoittamaton α-synkronoija Itsestabiloituva α-synkronoija soveltuu sanomanvälitys järjestelmään. Se käyttää apunaan itsestabiloivaa datayhteys -algoritmia(engl. self-stabilizing data-link algorithm). Tämä takaa sen, että päästessään stabiloituun tilaa, kaikki prosessorin lähettämät viestit ovat saapuneet perille. α-synkronoija edellyttää jokaisen prosessorin ottavan huomioon kaikki naapurinsa kertaalleen yhden suorituskierroksen aikana. Prosessori odottaa niin kauan, kunnes se on saanut viestin kaikilta naapureiltaan koskien edeltävää kierrosta. Vasta tämän jälkeen se päivittää tilansa tarvittaessa ja lähettää uuden viestin naapureilleen. Synkronisessa järjestelmässä prosessorin tila ajan hetkellä t + 1 riippuu sen naapureiden tilasta ajan hetkellä t. Kun käytetään α-synkronoijaa, jokainen prosessori laskee tilansa vastaavista naapuriprosessoreiden tiloista. Tällöin käytetään eräänlaista jäljiteltyä systeemiä, jolla simuloidaan synkronista toimintaa asynkronisessa järjestelmässä. Yksinkertaisuuden vuoksi voidaan aluksi määritellä rajoittamaton tilamuuttuja. Tällöin jokaisella prosessorilla on mielivaltainen arvo phase-muuttujassaan. Jokaisella suorituskierroksella prosessori lähettää tiedon omasta tilastaan muille (kuva 1 rivi 4) ja saa tiedot naapureiden tilamuuttujista (kuva 1 rivit 5-10). Tämän jälkeen prosessori vertaa niitä omaan tilaansa (kuva 1 rivi 11). Jos kaikkien naapureiden tilat ovat suurempia tai yhtä suuria kuin prosessorin itsensä tila, se kasvattaa tilamuuttujansa arvoa yhdellä (kuva 1 rivi 12). Tilamuuttujan arvo ei voida koskaan pienentyä. Kun näin edetään ja annetaan suoritusaikaa kaikille prosessoreille rajattomasti, päädytään lopulta turvalliseen tilaan koko asynkronisessa järjestelmässä.

3 1. do forever 2. forall P j N (i) do received j := false 3. do 4. DLsend(phase i ) (*start send to all neighbors*) 5. upon DLreceive(ack j, phase j ) 6. received j := true 7. phase ji := phase j 8. upon DLreceive(phase j ) 9. phase ji := phase j 10. until P j N (i) received j := true (*all send terminated*) 11. if P j N (i) phase i phase ji then 12. phase i := phase i + 1 13. od Kuva 1: α-synkronoija (rajoittamaton versio) Lemma 1.1 Jokaisen kelvollisen suorituksen jälkeen päädytään sellaiseen alkutilaan, jossa kaikkien naapuri prosessorien tilat eroavat toisistaan korkeintaan yhdellä. Oletetaan, että kaikissa alkutiloissa ensimmäisen prosessorin tila phase i on vähintään kahta suurempi kuin sen naapuriprosessorin tila phase j. Koska phase j ei voi koskaan pienentyä, päädytään jompaan kumpaan seuraavista vaihtoehdoista. (1) joko phase i korotetaan äärettömän monta kertaa, ja se on kaikissa alkutiloissa edelleen vähintään kahta suurempi kuin phase j tai (2) kumpikaan prosessori ei kasvata tilamuuttujansa arvoa. (1) vaihtoehto ei pidä paikkaansa. Tilamuuttujan arvo ei voi koskaan laskea. Tilamuuttujan phase i arvo ei voi myöskään kasvaa, koska phase i kasvaa vain, jos epäyhtälö phase i phase j (kuva 1 rivit 11-12) on totta. Kun prosessorille P j annetaan aikanaan suoritusvuoro, se kasvattaa tilamuuttujansa arvoa saavuttaen prosessorin P i tilamuuttujan arvon. Näin ensimmäinen kohta on mahdoton. (2) tapauksessa phase i arvoa ei enää koroteta jostain alkutilanteesta eteenpäin. Tässä tapauksessa prosessorilla phase i täytyy olla jokin naapuri, jolla on pienempi arvo tilamuuttujassaan. Naapurikaan ei kasvata arvoaan, jos sen toisella naapurilla on pienempi arvo tilamuuttujassaan. Sama tilanne toistuu seuraavan prosessorin kohdalla, kunnes lopulta löytyy naapuriprosessori, jolla ei enää ole pienempää tilaa. Näin ollen phase j arvo kasvaa aikanaan eikä tilamuuttujan arvo voi pysyä muuttumattomana eli seuraa ristiriita väitteen kanssa.

4 Lemma 1.2 Jokaisen kelvollisen suorituksen aikana tilamuuttujan arvoa kasvatetaan äärettömän monta kertaa. Nyt voidaan olettaa, että päädytään johonkin alkutilaan, jolloin mikään prosessori ei enää kasvata tilamuuttujan arvoaan. Tällöin valitaan prosessori P j, jolla on pienin tilamuuttujan arvo. Niin sanotun reiluuden nimissä suoritusvuoro tarjotaan myös prosessorille P j ja se suorittaa kuvan 1 rivit 2-12 äärettömän monta kertaa. Tällöin P j saa naapureidensa tilojen muuttumattomat vakioarvot. Koska epäyhtälö on totta, P j kasvattaa omaa arvoaan yhdellä. 2.2 Rajoitettu α-synkronoija Ongelmankuvaus on samanlainen kuin rajoittamattomassa α-synkronoijassa, mutta nyt käytössä on rajoitettu tilamuuttuja. Tällöin puhutaan α-synkronoijan rajoitetusta versiosta. Tilamuuttujassa arvona on modulo M, missä M N. Muuttujalla N tarkoitetaan järjestelmässä olevien prosessorien lukumäärää. Lisäksi kaikilla prosessoreilla on ylimääräinen reset-muuttuja verrattuna rajoittamattomaan versioon. Perusideana verrataan edelleen naapureiden tilamuuttujia toisiinsa, jotta systeemi saadaan synkronoitua. Kun naapurin tilamuuttuja eroaa yli yhdellä prosessorin omasta tilamuuttujasta, prosessori nollaa oman tilamuuttujansa. Näin saavutetaan tila, jossa kaikkien prosessorien tila lopulta eroaa toisistaan enintään yhdellä. Tämän tilan saavuttamisen jälkeen toiminta jatkuu vastaavasti kuin rajoittamattomassakin versiossa. Käytännössä nollaamisella tarkoitetaan sitä, että prosessorin huomatessa naapurinsa tilamuuttujan arvon eroavan yli yhdellä, prosessori asettaa nollausmuuttujalle arvon 0 (kuva 2 rivit 26-27 ). Samalla prosessorin tilamuuttuja nollataan (kuva 2 rivit 29-30). Resetoinnin johdosta prosessorin naapureilla tilamuuttujan arvo ei voi olla yli yhden tai muuten sekin nollataan. Naapurin seuraavalla naapurilla taas arvo ei voi olla yli kahden ja niin edelleen. Ensimmäinen prosessori, joka asettaa nollausarvonsa nollaksi, levittää eräänlaisen nollausaallon läpi järjestelmän. Nollausaalto asettaa lopulta kaikkien prosessorien tilamuuttujat nolliksi. Laskentaa jatketaan vasta silloin, kun kaikki tilamuuttujat ovat nollattu. Kun nollausaalto etenee, mikään prosessori, joka on jo nollannut kertaalleen nollausmuuttujansa, ei voi kasvattaa nollausmuuttujaansa yli arvon 2N. Tämän lisäksi tilamuuttujan arvo nollataan tarvittaessa, jos nollausmuuttujan arvo on alle 2N.

5 1. do forever 2. forall P j N (i) do received j := false 3. PhaseUpdated := false 4. ResetUpdated := false 5. do 6. DLsend(phase i, reset j )(*start send to all neighbors*) 7. upon DLreceive(ack j, phase j, reset j ) 8. received j := true 9. UpdatePhase() 10. upon DLreceive(phase j, reset j ) 11. UpdatePhase() 12. until P j N (i) received j := true (*all send terminated*) 13. if ResetUpdate = false then 14. if P j N (i) reset i reset ji then 15. reset i := min(2n, reset i +1) 16. if PhaseUpdated = false and 17. P j N (i) phase i {phase ji,(phase ji -1) mod M} then 18. phase i := (phase i + 1)mod M 19. od 20. UpdatePhase() 21. phase ji := phase j 22. reset ji := reset j 23. if reset i > reset ji then 24. reset i := min(2n, reset ji +1) 25. ResetUpdated := true 26. if phase ji / {(phase i -1)mod M, phase i, (phase i +1)mod M then 27. reset i := 0 28. ResetUpdated := true 29. if reset i 2N then 30. phase i := 0 31. PhaseUpdated := true Kuva 2: α-synkronoija (rajoitettu versio) Lemma 2.1 Jokainen kelvollinen suoritus päätyy turvalliseen tilaan, jos mikään prosessori ei aseta nollausmuuttujaansa nollaksi. Tässä tapauksessa kaikkien naapurusten tilamuuttuja eroavat toisistaan korkeintaan yhdellä kaikissa suorituksen vaiheissa tai muussa tapauksessa jokin nollausmuuttuja nollataan. Tämä ehto näkyy kuvassa 2 rivillä 26. Suorituksen edetessä nollausmuuttujat saavat lopulta kaikki arvon 2N. Tällöin järjestelmä on turvallisessa tilassa. Vastaavasti, jos kaikkien nollausmuuttujien arvo on alunperin 2N, niin kaikkien naapurin tilamuuttujat saavat erota korkeintaan yhdellä toisistaan. Näin järjestelmä saavuttaa silloinkin turvallisen tilan.

6 Lemma 2.2 Jokainen kelvollinen suoritus päätyy turvalliseen tilaan, jos jokin prosessori asettaa nollausmuuttujansa nollaksi. Nyt jokin prosessori P i asettaa nollausmuuttujansa arvoksi nollan. Seurauksena myös sen tilamuuttuja päivitetään nollaksi. Seuraavaksi kaikki naapuriprosessorit P j asettavat nollausmuuttujansa nolliksi tai muuten niiden nollausmuuttujat täytyvät olla alunperin pienempiä kuin yksi (kuva 2 rivit 10,11 ja 23). Täten myös naapureiden tilamuuttujat nollataan (kuva 2 rivit 28-29). Näin edetään ja nollausaalto leviää koko verkkoon. Lopulta päädytään tilanteeseen, jossa kaikkien prosessorien nollausmuuttujat ovat pienempiä kuin 2N ja tilamuuttujat ovat nollia. Eli on saavutettu turvallinen tila. Mikään prosessori ei aseta tämän jälkeen nollausmuuttujaansa nollaksi. Edellisen lemman mukaan kelvollinen suoritus päätyy tässä tilanteessa turvalliseen tilaan. 2.3 β-synkronoija Toinen klassinen synkronoija on β-synkronoija. Se toimii järjestelmissä, joissa käytetään apuna jaettua muistia prosessien välillä. β-synkronoija tarvitsee apunaan virittävää puuta, jossa on erikseen määritelty juuri. Itsestabiloituvalla johtajan valinta -algoritmilla saadaan selvitettyä puurakenteelle juuri, kun prosesseilla on yksilölliset tunnisteet. Ja toisaalta itsestabiloivan virittävän puun -algoritmilla saadaan luotua puurakenne. Näin suoritetulla alustuksella virittävässä puussa on prosessoreita, joista juuri-prosessori on erikoisasemassa. Jokaisella prosessorilla on oma color -muuttuja. Juuren tarkoituksena on värjätä koko puu toistuvasti. Juuri tarkastelee virittävän puun osapuita, joiden juurina ovat sen omat lapset. Jos lapset antavat tiedon, että alipuut on värjätty saman värisiksi kuin itse juuri, silloin tämä valitsee itselleen uuden värin. Tämän jälkeen juuri välittää uuden väritiedon lapsilleen. Nämä juuren suorittamat toimenpiteet näkyvät kuvassa 3 riveillä 2-5. Muut prosessorit lukevat vanhempansa tietoa toistuvasti ja asettavat vanhemman värin omaksi värikseen (kuva 3 rivit 8-10). Lisäksi prosessorit välittävät vanhemman värin eteenpäin omille lapsilleen (kuva 3 rivi 13). Toisin sanoen juuren väri leviää prosessoreille sen alipuissa ja näin koko virittävä puu saadaan värjättyä samalla värillä.

7 Root: 1. do forever 2. forall P j children(i) do lr ji := read(r ji ) 3. if P j children(i) (lr ji.color = color i ) then 4. color i := (color i + 1)mod(5n - 3) 5. forall P j children(i) do write r ij.color := color i 6. od Other: 7. do forever 8. forall P j {children(i) parent} do lr ji := read(r ji ) 9. if color i lr parent,i.color then 10. color i := lr parent,i.color 11. else if P j children(i) (lr ji.color = color i ) then 12. write r i,parent.color := color i 13. forall P j children(i) do write r ij.color := color i 14. od Kuva 3: β-synkronoija Myös tietoa värjäyksen valmistumisesta välitetään vastaavasti. Tämä tieto kulkee lehdistä kohti juurta. Lehden vanhempi saa tiedon värjäyksen valmistumisesta, kun lehti on värjännyt itsensä samalla värillä kuin juuri. Lehden vanhempi välittää saman tiedon aikanaan omalle vanhemmalleen jne. Lopulta tieto kulkeutuu aina juureen asti. Näin ollen muutkin prosessorit jäävät odottamaan tietoa lapsiltaan, onko niiden alipuut värjätty (kuva 3 rivi 11). Kun muut prosessorit saavat viimeisenkin kuittauksen kaikkien alipuidensa värjäyksestä, ne välittävät värjäystiedon vanhemmalleen (kuva 3 rivi 12). Karkeasti ottaen juuresta lehtiin leviää väri koko virittävään puuhun ja samalla lehdistä juureen välittyy kuittaus, että puu on värjätty. β-synkronoijan edellytyksenä on, että juuri vaihtaa väriään äärettömän monta kertaa. Viestien vastaanoton aikana prosessorit lukevat naapureidensa rekistereitä alkuperäisestä verkosta eivätkä pelkästään viritetystä puusta. Nämä ylimääräiset viestit kuitenkin jäävät synkronoijan suorituksen ulkopuolelle, eivätkä siten vaikuta synkronointiin.

8 Lemma 3.1. Jokaisessa kelvollisessa suorituksessa juuri vaihtaa väriään vähintään kerran jokaisen 2d + 1 syklin aikana. Oletetaan, että jollain alkutilalla juuri P ei vaihda väriään ollenkaan 2d + 1 syklin aikana. Tällöin jokaisen juuren lapsen on kopioitava juuren väri ensimmäisen syklin aikana. Samoin lapset kopioita värin lapsilleen toisen syklin aikana. Näin jatketaan ja kaikkien prosessorien väri on lopulta sama d syklin jälkeen. Täten d + 1 syklin aikana jokainen lehti puussa välittää tiedon vanhemmalleen P k siitä, että värjääminen lehden alipuussa (lehden alipuu on tyhjä) on lopetettu. Syklin d + 2 aikana jokainen prosessori P k raportoi vanhemmalleen, että sen alipuu on värjätty juuren väriseksi. Näin jatketaan ja viimein jokainen juuren lapsi välittää tiedon, että sen alipuu on värjätty juuren väriseksi. Tähän kuluu aikaa 2d sykliä. Näin ollen juuren on vaihdettava väriään viimeistään 2d + 1 syklin jälkeen. Lemma 3.2 Alkutilaan, jossa kaikkien prosessorien väri on sama, päästään O(dn) syklin aikana. Koko verkossa on n kappaletta värimuuttujia, yhteensä 2n 2 värikenttää viestirekistereissä ja 2n 2 sisäistä muuttujaa, jotka tallentavat värimuuttujan arvot rekisteristä. Täten, missä alkutilassa tahansa, värien kokonaismäärä voi olla korkeintaan 5n 4. Erilaisten värien määrä valitaan siten, että värimuuttuja voi saada arvot väliltä 0 (5n 2). Siten jäljelle jää vähintään yksi väri, jota ei ilmene verkossa. Edellisen lemman mukaan juuri vaihtaa väriään vähintään kerran jokaisen 2d + 1 syklin aikana. Juuri vaihtaa väriään kasvattamalla sitä yhdellä(mod 5n 3). Nyt jokaisen (2d + 1) (5n 3) syklin aikana juuri vaihtaa värinsä sellaiseen väriin, jota ei esiinny verkossa. Beta-synkronoijan kuvaukseen vaaditaan lisäksi tieto siitä, miten synkronointiaskel on toteutettu. Synkronointiaskel koostuu naapureiden viestirekisterien luvuista. Kun jokainen prosessori on lopettanut lukemisen, prosessori vaihtaa tilaa ja kirjoittaa uuden arvon viestirekisteriin sen mukaan, mitä on aikaisemmin lukenut. Toisin sanoen, ennen kuin prosessori P i vaihtaa väriään, se lukee viestirekisterin arvot naapureiltaan, ensimmäisen synkronointiaskeleen tavoin. Ja ennen kuin eijuuri prosessori välittää tiedon alipuun värjäytymisestä, se kirjoittaa uuden arvon viestirekisteriin, kuin toisena synkronointiaskeleena. Samoin juuri kirjoittaa uuden arvon viestirekisteriin, kun sen lapset ovat ilmoittaneet alipuiden värjäyksen olevan valmis.

9 3 Nimeämistekniikka Itsestabiloivan nimeämisen tarkoituksena on saavuttaa tilanne, jossa anonyymeille järjestelmille voidaan suorittaa vastaavia toimintoja kuin systeemeille, joissa on yksilöivät tunnisteet. Tunnisteettoman järjestelmän symmetrian rikkomiseen tarvitaan apuna satunnaistamista. Ilman sitä ei esimerkiksi johtajan valinta onnistu anonyymissä verkossa. Nimeämistekniikka pohjautuu olennaisesti itsestabiloivaan päivitys-algoritmiin sekä edellä esiteltyyn itsestabiloivaan β-synkronoijaan. Päivitysalgoritmi on suunniteltu stabilointiin järjestelmissä, joissa on yksilöivät tunnisteet. Lisäksi uusien satunnaisien tunnisteiden valinnassa käytetään apuna ns. Schedular-Luck peliä. Tämä takaa sen, että hyvin suurella todennäköisyydellä valittu tunniste ei ole jo olemassa verkossa. Aluksi verkolle valitaan satunnainen alkutila. Virittävää puuta rakennetaan samalla, kun tietoa lähetetään eteenpäin verkossa juuren tunnisteesta aina lehtiin asti. Vastaavasti tieto puun valmistumisesti leviää vastakkaiseen suuntaan. Lisäksi jokainen prosessori välittää tiedon alipuunsa prosessorien tunnisteista. Lopulta juuri saa listan kaikkien prosessoreiden tunnisteista, jotka ovat sen virittämässä puussa. Listalla voi olla samoja tunnisteita, kuten kuvassa 4 ilmenee. Tällöin juuri välittää tiedon alipuihin tällaisistä dublikaateista. Prosessori, jolla on tällainen tuplatunniste, vaihtaa tunnisteensa uuteen sattumanvaraisesti valittuun tunnisteeseen. Edellinen toimenpide toistetaan yhä uudestaan, kunnes juuri saa listan prosessorien tunnisteista, mitkä eroavat kaikki toisistaan. Tämä ei kuitenkaan vielä takaa, että koko verkossa ei olisi samoja tunnisteita. On mahdollista, että virittävää puuta etsittäessä löytyy useampi puu. Tällöin puiden juurilla on samat tunnisteet. Tällainen tilanne näkyy kuvassa 5. Oletaan, että päivitystekniikan avulla on muodostunut kaksi erillistä puuta T 1 ja T 2, joilla on sama tunniste juurenaan (kuva 5). Täten on olemassa kaksi naapuriprosessoria P i ja P j, jotka kuuluvat eri puihin. Puut erotetaan toisistaan β-synkronoijasta tutulla värjäysmenetelmällä. Toistuva värjäys takaa sen, että P i ja P j tunnistavat kuuluvansa eri puihin, vaikka niiden juurilla onkin sama tunniste. Nyt prosessorit P i ja P j välittävät tiedon oman puunsa juurelle tällaisesta tapauksesta. Juuri prosessori saa tiedon toisen puun olemassa olosta, jolla on sama tunniste kuin sillä itsellään. Tällöin juuri vaihtaa omaa tunnistettaan.

10 Kuva 4: Verkosta on luotu virittävä puu T, jota esittää paksummat viivat. Puu sisältää kuitenkin kaksi samaa tunnistetta X solmuissaan. Tämä tilanne hoidetaan valitsemalla niille uudet satunnaiset tunnisteet. Kuva 5: Verkosta on muodostunut kaksi erillistä virittävää puuta T ja T', joiden juurien tunnisteena on sama arvo X. Nämä puut erotetaan toisistaan värjäämällä kumpikin puu eri värillä. Tämän jälkeen toisen puun juuren tunniste vaihdetaan uuteen satunnaiseen tunnisteeseen.

11 Kun juuri joutuu vaihtamaan omaa tunnistettaan prosessi aloitetaan alusta. Käytännössä puiden rakentaminen ja värjäys etenevät yhtäaikaa. Ensisijaisesti siis tutkitaan, onko useita virittäviä puita olemassa värjäystekniikalla. Tämä tarkoittaa, että verkosta löytyy useampi puun juuri, jolla on sama tunniste. Tällöin ainakin yksi juurista vaihtaa tunnistetta ja puiden rakennus ja värjäys aloitetaan alusta. Näin edetään ja saavutetaan tila, jossa vain yksi puu on olemassa. Tähän prosessiin kuluu aikaa O (d) syklin verran, missä d on verkon halkaisija. Jos alunperinkään ei ollut kuin yksi puu, niin ollaan vastaavassa tilanteessa. Toissijaisena tutkinnan kohteena on, onko puussa samoja arvoja. Jos näin on päässyt tapahtumaan, ollaan kuvan 4 tapauksessa. Nyt tunnisteille, joita esiintyy useammin kuin kerran, annataan uudet satunnaiset arvot. Tähän toimenpiteeseen kuluu samoin O (d) syklin verran aikaa. Värien kokonaismäärä on määritelty β-synkronoijan yhteydessä. Sen sijaan erilaisten tunnisteiden määrä voi olla luokkaa N 10. Yhdessä schedular-luck pelin kanssa värien määrä takaa sen, että saman värin satunnainen valinta on hyvin epätodennäköistä. Yhtenä ehtona on, että mitään tunnistetta ei vaihdeta kahdesti. Eli jos uusi satunnainen luku on jo verkossa, sitä ei yritetä enää vaihtaa vaan koko prosessi aloitetaan tarvittaessa alusta. Turvallinen tilan saavuttamisen odotusarvo on O (d) sykliä. Näin toteutetulla tekniikalla saavutetaan verkko, jossa kaikilla prosessoreilla on satunnaiset yksilöivät tunnisteet. Lähteet Awe85 Awerbuch, B., Complexity of network synchronization. Journal of ACM, 32,4(1985), sivut 804823. Dol00 Dolev, S., Self-Stabilization. Mit Press, 2000.