Stabilointi. arvosana. arvostelija. Marja Hassinen



Samankaltaiset tiedostot
Stabilointi. Marja Hassinen. p.1/48

Stabiloivat synkronoijat ja nimeäminen

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

Itsestabilointi: perusmääritelmiä ja klassisia tuloksia

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

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

Stabiloivat synkronoijat ja nimeäminen

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

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

Algoritmit 2. Luento 2 Ke Timo Männikkö

v 8 v 9 v 5 C v 3 v 4

Algoritmit 2. Luento 4 To Timo Männikkö

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

Algoritmit 1. Luento 8 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 2. Luento 6 To Timo Männikkö

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Algoritmit 1. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Ohjelmoinnin peruskurssi Y1

Luku 8. Aluekyselyt. 8.1 Summataulukko

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Yleinen paikallinen vakautuva synkronointialgoritmi

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

Sähköpostitilin käyttöönotto. Versio 2.0

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Ohjelmoinnin perusteet Y Python

Harjoitustyö: virtuaalikone

Algoritmit 2. Demot Timo Männikkö

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

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

Algoritmit 2. Luento 4 Ke Timo Männikkö

Datatähti 2019 loppu

Algoritmit 1. Luento 7 Ti Timo Männikkö

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

A TIETORAKENTEET JA ALGORITMIT

11. Javan toistorakenteet 11.1

Harjoitus 6 ( )

Algoritmit 2. Luento 6 Ke Timo Männikkö

Rinnakkaistietokoneet luento S

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

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

10. Painotetut graafit

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

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

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

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

2 Konekieli, aliohjelmat, keskeytykset

Rakennusten elinkaarimittareiden verkkotyökalun käyttöohje.

Paikallinen stabilointi

Diskreetit rakenteet

Jaetun muistin muuntaminen viestinvälitykseksi

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

DVD-RAM-levyjen käyttö

Algoritmit 1. Luento 10 Ke Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Muuttujien roolit Kiintoarvo cin >> r;

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

Pro 57 UM/S Setelilaskuri

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

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.

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

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

Algoritmit 2. Luento 11 Ti Timo Männikkö

7.4 Sormenjälkitekniikka

Konsensusongelma hajautetuissa järjestelmissä

PERSONEC HR-JÄRJESTELMÄ Käyttöohje Yksikön johtaja

BL40A1711 Johdanto digitaaleketroniikkaan: Sekvenssilogiikka, pitopiirit ja kiikut

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

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

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

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen)

Yksityisautoilijoille ABAX AJOPÄIVÄKIRJA

Algoritmit 2. Luento 5 Ti Timo Männikkö

Tarkennamme geneeristä painamiskorotusalgoritmia

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

Reiluus. Maxmin-reiluus. Tärkeä näkökohta best effort -tyyppisissä palveluissa. Reiluuden maxmin-määritelmä

Ehto- ja toistolauseet

Ohjelmoinnin perusteet Y Python

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 9. marraskuuta 2009

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

Tasohyppelypeli. Piirrä grafiikat. Toteuta pelihahmon putoaminen ja alustalle jääminen:

Toimeentulotuen sähköinen asiointi - Käyttöohje

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

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

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

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.

811120P Diskreetit rakenteet

Rinnakkaistietokoneet luento S

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

Transkriptio:

hyväksymispäivä arvosana arvostelija Stabilointi Marja Hassinen Helsinki 28.10.2007 Hajautetut algoritmit -seminaari HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Sisältö 1 1 Johdanto 1 2 Resynkroninen stabilointi 2 3 Yleinen stabilointi: järjestelmän tarkkailu ja alustus 4 3.1 Virheiden havaitseminen......................... 4 3.2 Järjestelmän alustus........................... 8 3.3 Järjestelmän toipumiskyky....................... 12 4 Lähteet 13

1 Johdanto 1 Tämä esitelmä käsittelee stabilointia eli algoritmien muuntamista toipumiskykyisiksi (self-stabilizing). Jos johonkin ongelmaan tunnetaan algoritmi, joka ei ole toipumiskykyinen, voidaan stabiloinnin avulla muodostaa vastaava toipumiskykyinen algoritmi. Stabilointi voidaan suorittaa sekä synkronisissa että asynkronisissa järjestelmissä. Synkronisissa järjestelmissä lähetetään globaali kellopulssi, jonka vastaanottaessaan jokainen prosessori suorittaa yhden askelen algoritmistaan. Asynkronisissa järjestelmissä prosessorit suorittavat algoritmejaan rinnakkain ja mahdollisesti eri nopeuksilla. Synkronisissa järjestelmissä toimivat algoritmit voidaan muuntaa asynkronisissa järjestelmissä toimiviksi. Tätä muunnosta kutsutaan synkronoinniksi. Viestinvälitykseen ja jaettuun muistiin perustuvat hajautetut järjestelmät eivät olennaisesti eroa toisistaan, sillä jaetun muistin järjestelmissä toimivat algoritmit voidaan muuntaa viestinvälitysjärjestelmissä toimiviksi. Stabiloinnin osalta voidaan siis yleisyyttä rajoittamatta tarkastella jompaakumpaa kommunikointimallia. Hajautettujen järjestelmien toipumiseen kuluvaa aikaa mitataan kierrosten ja syklien avulla. Kierros (round) on lyhin ajanjakso, jonka aikana jokainen prosessori suorittaa vähintään yhden laskenta-askelen. Jokaisella prosessorilla oletetaan olevan algoritmi, joka on esitetty ikuisena silmukkana. Sykli (cycle) on lyhin ajanjakso, jonka aikana jokainen prosessori suorittaa yhden kerran ikuisen silmukkansa sisällön. Stabilointialgoritmit käyttävät osatehtävien suorittamiseen muita toipumiskykyisiä algoritmeja. Tarvittavia algoritmeja ovat esimerkiksi johtajan valinta ja viestikanavien muuntaminen luotettaviksi. Lisäksi käytetään tietoa siitä, että toipumiskykyinen algoritmi voidaan muodostaa reilun koostamisen (fair composition) avulla osatehtävät suorittavista toipumiskykyisistä algoritmeista. Luvussa 2 esitellään resynkroninen stabilointi, joka on yksinkertainen menetelmä kiinteän tulosteen algoritmien muuntamiseksi toipumiskykyisiksi. Toipumiskykyisten ja ei-toipumiskykyisten algoritmien välillä ei siis ole periaatteellista eroa, sillä ei-toipumiskykyinen algoritmi voidaan muuntaa toipumiskykyiseksi resynkronisen stabiloinnin avulla. Luvussa 3 esitetään yleisempi menetelmä stabiloinnin suorittamiseen. Menetelmä perustuu tarkkailuun, jonka avulla havaitaan järjestelmässä esiintyvät virheet, ja alustukseen, jonka avulla järjestelmä palautetaan sallittuun alkutilaan.

2 Resynkroninen stabilointi 2 Seuraavaksi tarkastellaan kiinteiden tulosteiden (fixed output) algoritmien muuntamista toipumiskykyisiksi. Esimerkiksi minimaalisen virittävän puun laskevan algoritmin tulosteena on verkon minimaalinen virittävä puu, joten algoritmin tuloste on kiinteä. Toisaalta esimerkiksi keskinäisen poissulkemisen algoritmeilla ei ole kiinteää tulostetta, vaan algoritmin oikeellinen toiminta on jatkuva prosessi, jossa jaettua resurssia käyttää vain yksi prosessori kerrallaan. Resynkroninen stabilointi (resynchronous stabilizer) on yksinkertainen stabilointitapa, jolla mikä tahansa hajautettuja syötteitä käyttävä kiinteän tulosteen algoritmi voidaan muuntaa toipumiskykyiseksi. Resynkronista stabilointia voidaan soveltaa sekä synkronisiin että asynkronisiin algoritmeihin. Algoritmin synkronisella suoritusajalla tarkoitetaan sitä askelten määrää, jossa synkronoidun järjestelmän prosessorit saavat laskettua algoritmin tulosteen. Tarkastellaan algoritmia A, jonka suoritusaika synkronisessa järjestelmässä on t askelta. Tarkoituksena on määritellä algoritmi, joka toimii kuten A ja on toipumiskykyinen. Tarkastellaan prosessorien tiloja, kun algoritmia A suoritetaan synkronisessa järjestelmässä, jossa ei esiinny virheitä. Aluksi jokainen prosessori P i on alkutilassa T i,0. Ensimmäisen laskenta-askelen aikana jokainen prosessori P i lukee naapureidensa alkutilat T j,0 ja laskee niiden ja oman alkutilansa perusteella uuden tilansa T i,1. Toisen laskenta-askelen aikana jokainen prosessori P i lukee naapureidensa tilat T j,1 ja laskee niiden ja oman tilansa T i,1 perusteella uuden tilansa T i,2. Viimeistään t askelen kuluttua prosessorit ovat saaneet laskettua halutun tulosteen. Resynkronisen stabiloinnin perusajatus on tallentaa jokaisen prosessorin P i yhteyteen tieto tiloista T i,0,t i,1,...,t i,t. Jokaisen prosessorin yhteyteen tallennetaan siis t + 1 alkion taulukko, jonka soluihin nämä tilat tallentuvat. Aluksi taulukon sisältö voi olla mitä tahansa, mutta laskennan edetessä taulukon soluihin tallentuvat halutut tilat. Resynkronisen stabiloinnin suoritus. Jokainen prosessori P i laskee ikuisen silmukkansa suorituksen aikana uudelleen kaikki tilansa T i,0,t i,1,...,t i,t. Aluksi se tallentaa tilaan T i,0 algoritminsa määräämän alkutilan. Sen jälkeen se lukee naapureidensa P j tilataulukot T j,0,t j,1,...,t j,t. Oman ja naapureiden 0-tilojen perusteella se laskee tilansa T i,1, sen ja naapureiden 1-tilojen perusteella tilansa T i,2 ja niin edelleen.

3???? A??? A D?????????? B??? C??? B??? C??? Kuva 1: Kun virheetön jakso alkaa, prosessorit voivat olla mielivaltaisessa tilassa. Ensimmäisen syklin jälkeen jokainen prosessori on alustanut alkutilansa (A, B ja C). Toisen syklin aikana jokainen prosessori saa laskettua toisen tilansa oikein, sillä tilan määrittämiseen tarvittavat syötteet (tässä A, B ja C) on tallennettu oikein. Koska kaikki naapureiden tilat eivät välttämättä vastaa algoritmin A virheettömässä suorituksessa esiintyviä tiloja, ei prosessori itsekään saa laskettua kaikkia omia tilojaan oikein. Kuitenkin, jos naapureiden tilat T j,0,...,t j,k ja prosessorin omat tilat T i,0,...,t i,k on tallennettu oikein, saa prosessori laskettua tilansa T i,k+1 oikein. Järjestelmän toipumiskyky. Kun virheet loppuvat, niin jossain vaiheessa jokainen prosessori P i on suorittanut ikuisen silmukkansa sisällön vähintään kerran ja alustanut lähtötilanteen T i,0 oikeaksi. Tämän jälkeen jokainen prosessori P i pystyy laskemaan oikein tilansa T i,1, sillä tarvittavat syötteet, prosessorin itsensä 0-tila ja muiden prosessorien 0-tilat, on laskettu oikein. Kun jokainen prosessori on laskenut oikein 1-tilansa, voivat kaikki prosessorit laskea oikein 2-tilansa. Näin edeten voidaan havaita, että jossain vaiheessa kaikki prosessorit saavat algoritminsa suoritettua loppuun, ellei uusia virhetilanteita esiinny. Olennaista on, että mikään prosessori ei muuta kertaalleen oikein laskettuja tiloja, vaikka se laskeekin ne uudelleen. Näin ollen jokainen sykli lisää ainakin yhden tilan oikein laskettujen tilojen joukkoon. Kuva 1 havainnollistaa resynkronisen stabiloinnin toimintaa, kun hajautetun järjestelmän virheetön jakso alkaa.

4 Resynkronisen stabiloinnin ongelmia. Resynkroninen stabilointi tarvitsee epäkäytännöllisen paljon muistia, sillä jokainen prosessori joutuu tallentamaan oman tilansa yhtä monta kertaa kuin algoritmin suorittamiseen tarvitaan askelia. Lisäksi resynkroninen stabilointi ei sovellu satunnaisalgoritmien stabilointiin, koska satunnaisalgoritmeissa prosessorin seuraava tila ei määräydy deterministisesti sen edellisen tilan ja naapurien tilojen avulla. 3 Yleinen stabilointi: järjestelmän tarkkailu ja alustus Resynkronisen stabiloinnin sijasta algoritmi voidaan muuntaa toipumiskykyiseksi käyttäen yleistä stabilointia. Yleistä stabilointia voidaan soveltaa sekä kiinteän tulosteen algoritmeihin että ei-kiinteän tulosteen algoritmeihin. Tässä luvussa tarkastellaan kiinteän tulosteen algoritmeja. Voidaan lisäksi yleisyyttä rajoittamatta tarkastella hajautettuja järjestelmiä, joissa prosessorien välinen kommunikaatio perustuu viestinvälitykseen. Yleisen stabiloinnin perusajatus on havaita järjestelmässä esiintyvät virheet (tarkkailu) ja palauttaa järjestelmä sallittuun lähtötilanteeseen virheen tapahtuessa (alustus). Tarkkailun ja alustamisen yhteensovittaminen ei ole triviaalia: on esimerkiksi varmistettava, että virheen havaitsemisesta johtuva alustus suoritetaan loppuun ennen uusien alustusten käynnistämistä. Luvussa 3.1 esitellään virheidenhavaitsemisalgoritmi ja luvussa 3.2 kuvataan algoritmi, joka alustaa järjestelmän eli palauttaa sen sallittuun alkutilaan. Luvussa 3.3 esitetään lyhyt perustelu järjestelmän toipumiskyvystä. 3.1 Virheiden havaitseminen Useissa toipumiskykyisissä algoritmeissa ei pyritä eksplisiittisesti havaitsemaan virheitä, vaan ohjataan järjestelmää jatkuvasti kohti sallittua tilaa. Prosessorit eivät yleensä pidä yllä tietoa siitä, onko järjestelmä kulloinkin sallitussa tilassa vai ei. Tästä lähestymistavasta poiketen tarkkailu ja alustus -stabiloinnissa on määriteltävä keino havaita, onko virheitä tapahtunut. Eräs keino havaita virheiden havaitsemiseen on tallentaa kuva järjestelmän hetkellisestä kokonaistilanteesta ja tarkastaa sen avulla, onko järjestelmä sallitussa tilassa.

5 Kuvan ottaminen ei keskeytä varsinaista laskentaa, vaan suoritetaan sen lomassa. Tilannekuva-algoritmi. Oletetaan, että toipumiskykyisen johtajanvalintaalgoritmin avulla jokin prosessori on valittu johtajaksi. Kuvanottoalgoritmissa jokainen prosessori tallentaa muistiinsa kopion tilastaan ja saamistaan viesteistä. Sen jälkeen johtaja kerää tiedot prosessoreilta. Kuvanottoalgoritmissa oletetaan, että viestikanavat ovat luotettavia. Tämä voidaan saada aikaan toipumiskykyisellä algoritmilla, jolla jaetun muistin järjestelmissä toimivat algoritmit muunnetaan viestinvälitystä käyttäviksi. Lisäksi kuvanottoalgoritmi käyttää luvussa 3.2 kuvattavaa alustusalgoritmia tarvitsemiensa muuttujien alustamiseen. Kuvan tallentava algoritmi on seuraava: 1. Johtaja tallentaa oman tilansa ja alkaa lähettää merkkiä toistuvasti jokaiselle naapurilleen. 2. Kun prosessori P i saa merkin ensimmäisen kerran, se tallentaa muistiinsa kopion nykyisestä tilastaan ja lähettää merkin jokaiselle naapurilleen. 3. Jos prosessori P i saa viestin prosessorilta P k, se tallentaa kopion viestistä muistiinsa. Kun prosessori P i saa merkin prosessorilta P k, prosessori P i lopettaa saapuvien viestien tallentamisen. 4. Kun prosessori P i on saanut merkin jokaiselta naapuriltaan, se lähettää tallentamansa tiedot johtajalle. Vaikka prosessorin P i tila tallennetaan eri ajanhetkellä kuin sen naapuriprosessorin P j tila, saa viestien tallentaminen aikaan sen, että kokonaiskuva järjestelmän tilasta on yhtenäinen. Jos prosessorin P i tila tallennetaan ensin ajanhetkellä t 1 ja prosessorin P j tila myöhemmin ajanhetkellä t 2, tallentaa prosessori P i muistiinsa prosessorilta P j tulevat viestit, jotka saapuvat ajanhetkien t 1 ja t 2 välillä. Kokonaiskuvaan kuuluu prosessorin P i tila ajanhetkellä t 1, prosessorin P j tila ajanhetkellä t 2 sekä prosessorin P i tallentamat viestit. Kokonaiskuva voidaan tulkita tilanteeksi, jossa molempien prosessorien tilat on tallennettu ajanhetkellä t 2 eikä prosessori P i ole saanut suoritusvuoroa ajanhetkien t 1 ja t 2 välillä. Tallennettujen viestien voidaan ajatella olevan matkalla viestikanavassa, jolloin prosessori P i ole vielä ehtinyt saada niitä. Todellisuudessa prosessori P i on voinut muuttaa tilaansa ajanhetkien t 1 ja t 2 välillä ja se on myös saanut tallentamansa viestit.

6 Saatuaan kuvanottoalgoritmin tallentamat tiedot kaikilta prosessoreilta johtaja muodostaa kokonaiskuvan järjestelmästä ja tarkastaa, onko järjestelmä sallitussa tilassa vai ei. Se, miten tarkastus suoritetaan, riippuu stabiloitavasta algoritmista. Kiinteän tulosteen algoritmeja stabiloitaessa on pystyttävä erottamaan virhetilanne järjestelmän normaalista toiminnasta, jossa halutun tuloksen laskenta on vielä kesken. Joissain tilanteissa kuvanottoalgoritmi voidaan korvata versiolla, jossa järjestelmän tila tallennetaan useisiin paikallisiin tilannekuviin. Tällöin stabiloitavan algoritmin on oltava sellainen, että virheet voidaan havaita paikallisista tilannekuvista. Esimerkki virheiden havaitsemisesta. Tarkastellaan esimerkkinä seuraavaa algoritmia, joka laskee prosessorien etäisyydet tiettyyn kohdeprosessoriin. Jokaisella prosessorilla P i on muuttuja d i, johon se tallentaa nykyisen käsityksen etäisyydestä. Algoritmi on kuvattu taulukossa 1. Kohdeprosessori P 0 Alustus: aseta d 0 = 0 Lähetä jokaiselle naapurille tieto d 0 :sta Muut prosessorit P i Alustus: aseta d i = Kun saat naapurilta P j arvon d j : Jos d j +1 < d i, aseta d i = d j +1 ja lähetä jokaiselle muulle naapurille tieto d i :stä Muutoin älä tee mitään Taulukko 1: Algoritmi, jolla prosessorit laskevat oman etäisyytensä kohdeprosessorista. Algoritmi ei ole toipumiskykyinen. Tämä algoritmi ei ole toipumiskykyinen. Esimerkiksi jos jonkin prosessorin P j muuttujaan d j tallentuu virheen johdosta arvo 0, vaikkei P j ole kohdeprosessori, niin algoritmi ei saa sitä korjatuksi. Esitetty etäisyyksienlaskenta-algoritmi voidaan kuitenkin stabiloida eli muuntaa toipumiskykyiseksi. Sitä varten on muodostettava menetelmä, jolla virheet havaitaan järjestelmän tilannekuvasta. Johtajaprosessorin saamassa tilannekuvassa on tieto arvoista, jotka on tallennettu muuttujiin d. Järjestelmän normaalissa toiminnassa prosessorin P i arvo d i on yleensä yhtä suurempi kuin pienin naapuriprosessorien arvoista. Muissa tapauksissa pro-

7 d = 0 d = 0 d = 0 d = Inf d = 1 d = 1 d = Inf d = 1 d = 1 d = Inf d = Inf d = 2 Kuva 2: Esimerkki etäisyydet laskevan algoritmin oikeasta suorituksesta. d = 0 d = 0 d = 0 d = Inf d = 1 d = 1 d = 3 d = 1 d = 0 d = Inf d = Inf d = 2 Kuva 3: Esimerkkejä virhetilanteista eli tilanteista, jotka eivät voi esiintyä etäisyydet laskevan algoritmin normaalin suorituksen aikana. sessori P i ei ole vielä ehtinyt saada viestiä siltä naapurilta, jolta pienempi d-arvo periytyisi. Johtajaprosessori voi siis prosessorien d-muuttujista ja viestikanavien sisällöistä päätellä, onko järjestelmä sallitussa tilassa vai ei. Sen sijaan virhetilanteeksi ei pidä tulkita tilannetta, jossa jonkin prosessorin d-arvo ei vastaa prosessorin etäisyyttä kohdeprosessorista. Tällainen tilanne kuuluu järjestelmän normaaliin toimintaan silloin, kun etäisyyksien laskenta on vielä kesken. Kuvassa 2 on esimerkki etäisyydenlaskemisalgoritmin oikeasta suorituksesta ja kuvassa 3 on esimerkkejä virhetilanteista, jotka eivät voi esiintyä järjestelmän oikean suorituksen aikana. Virhetilanteet voidaan erottaa normaaliin suoritukseen kuuluvista tilanteista tarkastelemalla solmujen tiloja ja viestikanavien sisältöjä. Virheet voidaan havaita esimerkiksi tarkastamalla seuraava ehto: Algoritmin tila on sallittu, jos

8 kohdesolmulle P 0 pätee d 0 = 0 ja muille solmuille P i pätee d i > 0 ja jokaisella kohdesolmusta eroavalla solmulla P i on naapuri P j, jolle pätee d i = d j + 1 tai matkalla on arvon d j sisältävä viesti naapurilta P j naapurille P i. 3.2 Järjestelmän alustus Järjestelmän alustus suoritetaan, kun virheenhavaitsemisalgoritmi ilmoittaa, ettei järjestelmä ole sallitussa tilassa. Alustuksen tehtävänä on palauttaa järjestelmä sallittuun alkutilaan. Seuraavaksi esitetään alustusalgoritmi, jossa mikä tahansa prosessori voi virheen havaitessaan pyytää järjestelmän alustusta. Algoritmi käyttää johtajanvalinta-algoritmia ja β-synkroinoija-algoritmia osatehtävien suorittamiseen. Johtajanvalinta-algoritmi muodostaa virittävän puun, jonka juurena oleva prosessori on nimetty johtajaksi. β-synkronoija värittää puun toistuvasti siten, että juuri valitsee uuden värin, joka valuu puussa alaspäin kunnes koko puu on saman värinen. Sen jälkeen juuri valitsee seuraavan värin ja sama prosessi toistuu. Kun järjestelmä ei ole sallitussa tilassa, virheidenhavaitsemisalgoritmi takaa, että ainakin yksi prosessori havaitsee virheen. Seuraavaksi kuvattava alustusalgoritmi saa aikaan järjestelmän alustuksen silloin, kun jokin prosessoreista havaitsee virheen. Alustusalgoritmin runkona on puun toistuvan värityksen suorittava algoritmi. Alustusalgoritmin toiminnot, kuten virheistä raportointi ja oman tilan alustus, lomittuvat puun toistuvaan väritykseen. Puun toistuva väritys. Jokaisella prosessorilla on tieto siitä, mitkä prosessorit ovat sen lapsia ja mikä prosessori on sen vanhempi. Lisäksi prosessorilla P i on tieto omasta väristään color i. Väri on kokonaisluku joukosta {0,...,5n 4}, jossa n on prosessoreiden määrä 1. Prosessorien välisen kommunikoinnin mallina käytetään jaettua muistia. Prosessorin P i ja sen vanhemman P j väliseen kommunikointikanavaan liittyy kaksi muuttujaa: color j,i, jolla vanhempi kertoo lapselleen värinsä ja color i,j, jolla lapsi kertoo vanhemmalleen alipuunsa värin. 1 Lähdeteoksessa esitetyssä algoritmissa väriä kasvatetaan modulo 5n 3, jolloin suurin mahdollinen väri on 5n 4 eikä 5n 2.

9 2 2 1 1 2 2 1 1 1 1 1 1 Kuva 4: Kun juuri on valinnut uuden värin, se kertoo sen lapsilleen, jotka vaihtavat värinsä ja kertovat uuden värin omille lapsilleen. Juurena toimiva prosessori suorittaa seuraavaa algoritmia: Jos kaikki lapset ilmoittavat, että niiden alipuut ovat saman värisiä kuin juuri, niin juuri kasvattaa omaa väriään. Joka tapauksessa juuri kertoo lapsille oman värinsä. Muut prosessorit suorittavat seuraavaa algoritmia: Jos vanhempi on kertonut prosessorille jonkun muun värin kuin prosessorin nykyisen värin, niin prosessori vaihtaa oman värinsä vanhemman väriksi. Jos kaikki lapset ilmoittavat, että niiden alipuut ovat saman värisiä kuin prosessori itse, niin prosessori ilmoittaa tämä alipuun värin vanhemmalleen. Joka tapauksessa prosessori kertoo lapsille oman värinsä. Tämän algoritmin seurauksena juuren valitsema väri valuu puussa alas. Kun koko puu on saman värinen, tieto siitä välittyy puussa ylöspäin juureen asti. Tämän seurauksena juuri valitsee uuden värin ja sama prosessi toistuu. Kuva 4 havainnollistaa värin valumista alas puussa. Jokainen solmu kertoo lapsilleen oman värinsä. Kuva 5 havainnollistaa, miten tieto värityksen loppuunsaattamisesta etenee puussa ylöspäin. Synkronointi voidaan saada aikaan hyödyntämällä puun toistuva väritys -algoritmia antamalla jokaisen prosessorin suorittaa yksi laskenta-askel silloin, kun se vaihtaa omaa väriään. Tällaista synkronointialgoritmia kutsutaan β-synkronoinniksi. Yleisessä stabiloinnissa puun toistuva väritys -algoritmia ei kuitenkaan käytetä synkronointiin vaan alustuksen suorittamiseen.

10 2 2 2 2 2 2 2 2 2 2 2 2 Kuva 5: Kun koko puu on väritetty, lehtisolmut kertovat vanhemmilleen, että niiden alipuut on väritetty niiden omalla värillä. Lehtisolmujen vanhemmat huomaavat, että myös niiden alipuut on väritetty niiden omalla värillä ja välittävät tämän viestin edelleen vanhemmilleen. Alustusalgoritmin toiminta. Puun toistuva väritys -algoritmin tarvitsemien muuttujien lisäksi alustusalgoritmi tarvitsee seuraavat muuttujat: jokaisella prosessorilla P i on alustusta varten kaksi binäärimuuttujaa: invoke i ja reset i. Muuttuja invoke i saa arvon true, jos prosessori P i on havainnut virheen. Muuttuja reset i saa arvon true, jos prosessori P i tietää, että alustus on parhaillaan käynnissä. Prosessorin P i ja sen vanhemman P j väliseen kommunikointikanavaan liittyy kaksi lisämuuttujaa: reset j,i, jolla vanhempi välittää lapselleen tiedon käynnissä olevasta alustuksesta ja request i,j, jolla lapsi välittää vanhemmalleen tiedon alustuspyynnöstä. Alustusalgoritmi on erilainen juurena toimivalle prosessorille ja muille prosessoreille. Jos alustusta ei ole käynnissä, jokainen prosessori suorittaa virheentarkastusalgoritmin juuri ennen kuin se raportoi vanhemmalleen, että sen koko alipuu on väritetty nykyisellä värillä 2. Jos prosessori P i havaitsee virheen, se kirjoittaa muuttujaansa invoke i arvon true. Kun virheen havainnut prosessori kertoo vanhemmalle oman alipuunsa olevan itsensä värinen, se välittää samalla vanhemmalleen pyynnön käynnistää järjestelmän alustus kirjoittamalla vanhempansa kommunikointikanavan request-muuttujaan arvon true. Kun vanhempi huomaa tämän alustuspyynnön, se välittää sen vastaavasti omalle vanhemmalleen samalla kun se raportoi oman alipuunsa olevan itsensä värinen. Näin 2 Lähdeteoksessa esitetyssä algoritmissa juuriprosessori ei koskaan suorita virheidenhavaitsemisalgoritmia; tämä täytynee lisätä algoritmiin.

11 alustuspyyntö etenee puussa ylöspäin. Lopulta alustuspyyntö saapuu juuriprosessorille, joka käynnistää järjestelmän alustuksen. Kun juuri seuraavan kerran vaihtaa värinsä, se alustaa oman tilansa ja välittää lapsilleen tiedon uudesta väristä ja käynnissä olevasta alustuksesta. Aina, kun prosessori vaihtaa oman värinsä vanhemman väriksi, se alustaa oman tilansa ja kirjoittaa invoke-muuttujaansa arvon false. Kun prosessori kertoo oman värinsä lapsilleen, se välittää myös tiedon käynnissä olevasta alustuksesta. Kun uusi väri ja sen kanssa välitettävä tieto alustuksesta on edennyt puussa juuresta lehtisolmuihin, jokainen prosessori on alustanut tilansa. Sen jälkeen tieto siitä, että puu on väritetty loppuun, alkaa kulkea puussa ylöspäin. Tällä kertaa mikään prosessori ei suorita virheentarkastusta, sillä järjestelmän alustus on käynnissä. Kun tieto värityksen saattamisesta loppuun kulkeutuu puussa ylöspäin, jokainen prosessori välittää vanhemmalleen tiedon siitä, ettei uutta alustusta pyydetä, eli kirjoittaa vanhempansa kommunikointikanavan request-muuttujaan arvon false. Kun tämä tieto välittyy juureen asti, juuri kirjoittaa muuttujaansa reset arvon false. Kun juuri seuraavan kerran valitsee uuden värin, sen lapset kopioivat arvon false omiin reset-muuttujiinsa. Uuden värin valuessa alas puussa jokainen prosessori huomaa, ettei järjestelmän alustus ole käynnissä, eikä tällä kertaa alusta omaa tilaansa. Alustusalgoritmin oikeellisuus. Esitetty alustusalgoritmi takaa sen, ettei uusia virheentarkastuksia käynnistetä, kun järjestelmän alustus on käynnissä. Vasta kun kaikki prosessorit ovat alustaneet oman tilansa, voidaan virheentarkastusalgoritmi suorittaa uudelleen. Alustusalgoritmin oikea toiminta edellyttää virittävän puun muodostamista ja puun toistuva väritys -algoritmin oikeaa toimintaa. Virittävä puu voidaan muodostaa toipumiskykyisellä johtajan valita-algoritmilla ja myös puun toistuva väritys -algoritmi on toipumiskykyinen. Kun järjestelmän virheet loppuvat, voi virittävän puun muodostavan algoritmin toipuminen alkaa. Kun se on toipunut virheistä, alkaa puun toistuva väritys -algoritmin toipuminen. Senkin toivuttua alustusalgoritmi voi olla mielivaltaisessa tilassa. Jonkin prosessorin invoke-muuttujassa voi esimerkiksi olla arvo true, vaikkei järjestelmää tarvitsisi alustaa. Alustusalgoritmi toipuu kuitenkin näistä virhetilanteista, sillä vaikka se aluksi suorittaisikin turhia alustuksia, niin viimeistään kahden seuraavan puussa valuvan värin myötä prosessorien invoke- ja reset-muuttujien arvot korjataan. Sen jälkeen alustusalgoritmi alkaa toimia oikein.

12 Stabilointi Virheiden tarkkailu Alustus Kuvanotto Toistuva väritys Viestikanavat luotettaviksi Johtajan valinta Muuttujien alustus Puun muodostus Kuva 6: Stabilointialgoritmin jakautuminen osatehtäviin. 3.3 Järjestelmän toipumiskyky Järjestelmässä esiintyvät virheet voivat vaikuttaa myös virheenhavaitsemisalgoritmin ja alustusalgoritmin toimintaan. Järjestelmässä esiintyvän virheen johdosta virheidenhavaitsemisalgoritmi voi toimia väärin, eli ilmoittaa olemattomasta virheestä tai jättää virheen havaitsematta. Riittää kuitenkin, että virheidenhavaitsemisalgoritmi ei ilmoita virheistä silloin, kun sekä virheidenhavaitsemisalgoritmi että tarkkailtava algoritmi ovat sallitussa tilassa. Tarkastellaan järjestelmän toimintaa silloin, kun virheet loppuvat ja järjestelmän toipuminen voi alkaa. Aluksi järjestelmä voi olla mielivaltaisessa tilassa. Jonkin ajan kuluttua osatehtäviä suorittavat toipumiskykyiset algoritmit, kuten virittävän puun muodostava algoritmi ja kommunikointikanavat luotettavaksi tekevä algoritmi, ovat päätyneet sallittuun tilaan. Niiden toivuttua virheistä alkavat virheidentarkkailualgoritmi ja alustusalgoritmi toimia edellä kuvatulla tavalla. Kuva 6 havainnollistaa stabilointialgoritmin osatehtäviä. Jokaisessa solmussa oleva algoritmi voi toipua virheistä kun sen lapsisolmuina kuvatut osatehtäviä suorittavat algoritmit ovat päätyneet sallittuun tilaan. Virheidentarkkailualgoritmin ja alustusalgoritmin toivuttua virheistä voi varsinainen tarkkailtava algoritmi olla sallitussa tai ei-sallitussa tilassa. Jos algoritmi on sallitussa tilassa, virheidentarkkailualgoritmi toimii oikein eikä havaitse virhettä, ja sallittu

13 suoritus voi jatkua. Jos algoritmi ei ole sallitussa tilassa, virheidentarkkailualgoritmi toimii oikein ja havaitsee virheen, jolloin alustusalgoritmi palauttaa järjestelmän sallittuun tilaan. Sen jälkeen virheidenhavaitsemisalgoritmi ei enää ilmoita virheistä eikä uusia alustuksia suoriteta. Jos uusia virheitä ei tapahdu, varsinaisen algoritmin suoritus jatkuu sallitusti. 4 Lähteet Shlomi Dolev: Self-Stabilization, luku 5. MIT Press 2000.