• Ei tuloksia

Stabilointi MarjaHassinenHelsinki28.10.2007Hajautetutalgoritmit-seminaariHELSINGINYLIOPISTOTietojenk¨asittelytieteenlaitos hyv¨aksymisp¨aiv¨aarvosanaarvostelija

N/A
N/A
Info
Lataa
Protected

Academic year: 2022

Jaa "Stabilointi MarjaHassinenHelsinki28.10.2007Hajautetutalgoritmit-seminaariHELSINGINYLIOPISTOTietojenk¨asittelytieteenlaitos hyv¨aksymisp¨aiv¨aarvosanaarvostelija"

Copied!
15
0
0

Kokoteksti

(1)

arvostelija

Stabilointi

Marja Hassinen

Helsinki 28.10.2007

Hajautetut algoritmit -seminaari HELSINGIN YLIOPISTO Tietojenk¨asittelytieteen laitos

(2)

Sis¨ alt¨ o

1 Johdanto 1

2 Resynkroninen stabilointi 2

3 Yleinen stabilointi: j¨arjestelm¨an tarkkailu ja alustus 4 3.1 Virheiden havaitseminen . . . 4 3.2 J¨arjestelm¨an alustus . . . 8 3.3 J¨arjestelm¨an toipumiskyky . . . 12

4 L¨ahteet 13

(3)

1 Johdanto

T¨am¨a esitelm¨a k¨asittelee stabilointia eli algoritmien muuntamista toipumiskykyi- siksi (self-stabilizing). Jos johonkin ongelmaan tunnetaan algoritmi, joka ei ole toi- pumiskykyinen, voidaan stabiloinnin avulla muodostaa vastaava toipumiskykyinen algoritmi.

Stabilointi voidaan suorittaa sek¨a synkronisissa ett¨a asynkronisissa j¨arjestelmiss¨a.

Synkronisissa j¨arjestelmiss¨a l¨ahetet¨a¨an globaali kellopulssi, jonka vastaanottaessaan jokainen prosessori suorittaa yhden askelen algoritmistaan. Asynkronisissa j¨arjestel- miss¨a prosessorit suorittavat algoritmejaan rinnakkain ja mahdollisesti eri nopeuksil- la. Synkronisissa j¨arjestelmiss¨a toimivat algoritmit voidaan muuntaa asynkronisissa j¨arjestelmiss¨a toimiviksi. T¨at¨a muunnosta kutsutaan synkronoinniksi.

Viestinv¨alitykseen ja jaettuun muistiin perustuvat hajautetut j¨arjestelm¨at eiv¨at olennaisesti eroa toisistaan, sill¨a jaetun muistin j¨arjestelmiss¨a toimivat algoritmit voidaan muuntaa viestinv¨alitysj¨arjestelmiss¨a toimiviksi. Stabiloinnin osalta voidaan siis yleisyytt¨a rajoittamatta tarkastella jompaakumpaa kommunikointimallia.

Hajautettujen j¨arjestelmien toipumiseen kuluvaa aikaa mitataan kierrosten ja syklien avulla. Kierros (round) on lyhin ajanjakso, jonka aikana jokainen proses- sori suorittaa v¨ahint¨a¨an yhden laskenta-askelen. Jokaisella prosessorilla oletetaan olevan algoritmi, joka on esitetty ikuisena silmukkana. Sykli (cycle) on lyhin ajan- jakso, jonka aikana jokainen prosessori suorittaa yhden kerran ikuisen silmukkansa sis¨all¨on.

Stabilointialgoritmit k¨aytt¨av¨at osateht¨avien suorittamiseen muita toipumiskykyisi¨a algoritmeja. Tarvittavia algoritmeja ovat esimerkiksi johtajan valinta ja viestika- navien muuntaminen luotettaviksi. Lis¨aksi k¨aytet¨a¨an tietoa siit¨a, ett¨a toipumisky- kyinen algoritmi voidaan muodostaa reilun koostamisen (fair composition) avulla osateht¨av¨at suorittavista toipumiskykyisist¨a algoritmeista.

Luvussa 2 esitell¨a¨an resynkroninen stabilointi, joka on yksinkertainen menetelm¨a kiinte¨an tulosteen algoritmien muuntamiseksi toipumiskykyisiksi. Toipumiskykyis- ten ja ei-toipumiskykyisten algoritmien v¨alill¨a ei siis ole periaatteellista eroa, sill¨a ei-toipumiskykyinen algoritmi voidaan muuntaa toipumiskykyiseksi resynkronisen stabiloinnin avulla.

Luvussa 3 esitet¨a¨an yleisempi menetelm¨a stabiloinnin suorittamiseen. Menetelm¨a perustuu tarkkailuun, jonka avulla havaitaan j¨arjestelm¨ass¨a esiintyv¨at virheet, ja alustukseen, jonka avulla j¨arjestelm¨a palautetaan sallittuun alkutilaan.

(4)

2 Resynkroninen stabilointi

Seuraavaksi tarkastellaan kiinteiden tulosteiden (fixed output) algoritmien muunta- mista toipumiskykyisiksi. Esimerkiksi minimaalisen viritt¨av¨an puun laskevan algo- ritmin tulosteena on verkon minimaalinen viritt¨av¨a puu, joten algoritmin tuloste on kiinte¨a. Toisaalta esimerkiksi keskin¨aisen poissulkemisen algoritmeilla ei ole kiinte-

¨a¨a tulostetta, vaan algoritmin oikeellinen toiminta on jatkuva prosessi, jossa jaettua resurssia k¨aytt¨a¨a vain yksi prosessori kerrallaan.

Resynkroninen stabilointi (resynchronous stabilizer) on yksinkertainen stabilointita- pa, jolla mik¨a tahansa hajautettuja sy¨otteit¨a k¨aytt¨av¨a kiinte¨an tulosteen algoritmi voidaan muuntaa toipumiskykyiseksi. Resynkronista stabilointia voidaan soveltaa sek¨a synkronisiin ett¨a asynkronisiin algoritmeihin.

Algoritmin synkronisella suoritusajalla tarkoitetaan sit¨a askelten m¨a¨ar¨a¨a, jossa synk- ronoidun j¨arjestelm¨an prosessorit saavat laskettua algoritmin tulosteen. Tarkastel- laan algoritmiaA, jonka suoritusaika synkronisessa j¨arjestelm¨ass¨a ont askelta. Tar- koituksena on m¨a¨aritell¨a algoritmi, joka toimii kuten A ja on toipumiskykyinen.

Tarkastellaan prosessorien tiloja, kun algoritmiaAsuoritetaan synkronisessa j¨arjes- telm¨ass¨a, jossa ei esiinny virheit¨a. Aluksi jokainen prosessori Pi on alkutilassa Ti,0. Ensimm¨aisen laskenta-askelen aikana jokainen prosessoriPi lukee naapureidensa al- kutilatTj,0ja laskee niiden ja oman alkutilansa perusteella uuden tilansaTi,1. Toisen laskenta-askelen aikana jokainen prosessori Pi lukee naapureidensa tilat Tj,1 ja las- kee niiden ja oman tilansa Ti,1 perusteella uuden tilansa Ti,2. Viimeist¨a¨an t askelen kuluttua prosessorit ovat saaneet laskettua halutun tulosteen.

Resynkronisen stabiloinnin perusajatus on tallentaa jokaisen prosessorin Pi yhtey- teen tieto tiloista Ti,0, Ti,1, . . . , Ti,t. Jokaisen prosessorin yhteyteen tallennetaan siis t+ 1 alkion taulukko, jonka soluihin n¨am¨a tilat tallentuvat. Aluksi taulukon sis¨al- t¨o voi olla mit¨a tahansa, mutta laskennan edetess¨a taulukon soluihin tallentuvat halutut tilat.

Resynkronisen stabiloinnin suoritus. Jokainen prosessoriPi laskee ikuisen sil- mukkansa suorituksen aikana uudelleen kaikki tilansaTi,0, Ti,1, . . . , Ti,t. Aluksi se tal- lentaa tilaan Ti,0 algoritminsa m¨a¨ar¨a¨am¨an alkutilan. Sen j¨alkeen se lukee naapurei- densa Pj tilataulukot Tj,0, Tj,1, . . . , Tj,t. Oman ja naapureiden 0-tilojen perusteella se laskee tilansa Ti,1, sen ja naapureiden 1-tilojen perusteella tilansa Ti,2 ja niin edelleen.

(5)

? ? ? ?

? ? ? ?

? ? ? ?

A ? ? ?

C ? ? ? B ? ? ?

A D ? ?

C ? ? ? B ? ? ?

Kuva 1: Kun virheet¨on jakso alkaa, prosessorit voivat olla mielivaltaisessa tilassa.

Ensimm¨aisen syklin j¨alkeen jokainen prosessori on alustanut alkutilansa (A, B ja C). Toisen syklin aikana jokainen prosessori saa laskettua toisen tilansa oikein, sill¨a tilan m¨a¨aritt¨amiseen tarvittavat sy¨otteet (t¨ass¨a A, B ja C) on tallennettu oikein.

Koska kaikki naapureiden tilat eiv¨at v¨altt¨am¨att¨a vastaa algoritminA virheett¨om¨as- s¨a suorituksessa esiintyvi¨a tiloja, ei prosessori itsek¨a¨an saa laskettua kaikkia omia tilojaan oikein. Kuitenkin, jos naapureiden tilat Tj,0, . . . , Tj,k ja prosessorin omat tilatTi,0, . . . , Ti,k on tallennettu oikein, saa prosessori laskettua tilansaTi,k+1 oikein.

J¨arjestelm¨an toipumiskyky. Kun virheet loppuvat, niin jossain vaiheessa jokai- nen prosessori Pi on suorittanut ikuisen silmukkansa sis¨all¨on v¨ahint¨a¨an kerran ja alustanut l¨aht¨otilanteen Ti,0 oikeaksi. T¨am¨an j¨alkeen jokainen prosessori Pi pystyy laskemaan oikein tilansa Ti,1, sill¨a tarvittavat sy¨otteet, prosessorin itsens¨a 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¨ain edeten voidaan havaita, ett¨a jossain vaiheessa kaikki prosessorit saavat algoritminsa suoritettua lop- puun, ellei uusia virhetilanteita esiinny.

Olennaista on, ett¨a mik¨a¨an prosessori ei muuta kertaalleen oikein laskettuja tiloja, vaikka se laskeekin ne uudelleen. N¨ain ollen jokainen sykli lis¨a¨a ainakin yhden tilan oikein laskettujen tilojen joukkoon.

Kuva 1 havainnollistaa resynkronisen stabiloinnin toimintaa, kun hajautetun j¨arjes- telm¨an virheet¨on jakso alkaa.

(6)

Resynkronisen stabiloinnin ongelmia. Resynkroninen stabilointi tarvitsee ep¨ak¨ayt¨ann¨ollisen paljon muistia, sill¨a jokainen prosessori joutuu tallentamaan oman tilansa yht¨a monta kertaa kuin algoritmin suorittamiseen tarvitaan askelia. Lis¨aksi resynkroninen stabilointi ei sovellu satunnaisalgoritmien stabilointiin, koska satun- naisalgoritmeissa prosessorin seuraava tila ei m¨a¨ar¨aydy deterministisesti sen edelli- sen tilan ja naapurien tilojen avulla.

3 Yleinen stabilointi: j¨ arjestelm¨ an tarkkailu ja alustus

Resynkronisen stabiloinnin sijasta algoritmi voidaan muuntaa toipumiskykyiseksi k¨aytt¨aen yleist¨a stabilointia. Yleist¨a stabilointia voidaan soveltaa sek¨a kiinte¨an tu- losteen algoritmeihin ett¨a ei-kiinte¨an tulosteen algoritmeihin. T¨ass¨a luvussa tarkas- tellaan kiinte¨an tulosteen algoritmeja. Voidaan lis¨aksi yleisyytt¨a rajoittamatta tar- kastella hajautettuja j¨arjestelmi¨a, joissa prosessorien v¨alinen kommunikaatio perus- tuu viestinv¨alitykseen.

Yleisen stabiloinnin perusajatus on havaita j¨arjestelm¨ass¨a esiintyv¨at virheet (tark- kailu) ja palauttaa j¨arjestelm¨a sallittuun l¨aht¨otilanteeseen virheen tapahtuessa (alus- tus). Tarkkailun ja alustamisen yhteensovittaminen ei ole triviaalia: on esimerkiksi varmistettava, ett¨a virheen havaitsemisesta johtuva alustus suoritetaan loppuun en- nen uusien alustusten k¨aynnist¨amist¨a.

Luvussa 3.1 esitell¨a¨an virheidenhavaitsemisalgoritmi ja luvussa 3.2 kuvataan algo- ritmi, joka alustaa j¨arjestelm¨an eli palauttaa sen sallittuun alkutilaan. Luvussa 3.3 esitet¨a¨an lyhyt perustelu j¨arjestelm¨an toipumiskyvyst¨a.

3.1 Virheiden havaitseminen

Useissa toipumiskykyisiss¨a algoritmeissa ei pyrit¨a eksplisiittisesti havaitsemaan vir- heit¨a, vaan ohjataan j¨arjestelm¨a¨a jatkuvasti kohti sallittua tilaa. Prosessorit eiv¨at yleens¨a pid¨a yll¨a tietoa siit¨a, onko j¨arjestelm¨a kulloinkin sallitussa tilassa vai ei.

T¨ast¨a l¨ahestymistavasta poiketen tarkkailu ja alustus -stabiloinnissa on m¨a¨aritelt¨a- v¨a keino havaita, onko virheit¨a tapahtunut.

Er¨as keino havaita virheiden havaitsemiseen on tallentaa kuva j¨arjestelm¨an hetkelli- sest¨a kokonaistilanteesta ja tarkastaa sen avulla, onko j¨arjestelm¨a sallitussa tilassa.

(7)

Kuvan ottaminen ei keskeyt¨a varsinaista laskentaa, vaan suoritetaan sen lomassa.

Tilannekuva-algoritmi. Oletetaan, ett¨a toipumiskykyisen johtajanvalinta- algoritmin avulla jokin prosessori on valittu johtajaksi. Kuvanottoalgoritmissa jokainen prosessori tallentaa muistiinsa kopion tilastaan ja saamistaan viesteist¨a.

Sen j¨alkeen johtaja ker¨a¨a tiedot prosessoreilta.

Kuvanottoalgoritmissa oletetaan, ett¨a viestikanavat ovat luotettavia. T¨am¨a voidaan saada aikaan toipumiskykyisell¨a algoritmilla, jolla jaetun muistin j¨arjestelmiss¨a toi- mivat algoritmit muunnetaan viestinv¨alityst¨a k¨aytt¨aviksi. Lis¨aksi kuvanottoalgo- ritmi k¨aytt¨a¨a luvussa 3.2 kuvattavaa alustusalgoritmia tarvitsemiensa muuttujien alustamiseen.

Kuvan tallentava algoritmi on seuraava:

1. Johtaja tallentaa oman tilansa ja alkaa l¨ahett¨a¨a merkki¨a toistuvasti jokaiselle naapurilleen.

2. Kun prosessori Pi saa merkin ensimm¨aisen kerran, se tallentaa muistiinsa ko- pion nykyisest¨a tilastaan ja l¨ahett¨a¨a merkin jokaiselle naapurilleen.

3. Jos prosessoriPisaa viestin prosessoriltaPk, se tallentaa kopion viestist¨a muis- tiinsa. Kun prosessori Pi saa merkin prosessorilta Pk, prosessori Pi lopettaa saapuvien viestien tallentamisen.

4. Kun prosessori Pi on saanut merkin jokaiselta naapuriltaan, se l¨ahett¨a¨a tal- lentamansa tiedot johtajalle.

Vaikka prosessorin Pi tila tallennetaan eri ajanhetkell¨a kuin sen naapuriprosesso- rin Pj tila, saa viestien tallentaminen aikaan sen, ett¨a kokonaiskuva j¨arjestelm¨an tilasta on yhten¨ainen. Jos prosessorin Pi tila tallennetaan ensin ajanhetkell¨a t1 ja prosessorin Pj tila my¨ohemmin ajanhetkell¨a t2, tallentaa prosessori Pi muistiinsa prosessoriltaPj tulevat viestit, jotka saapuvat ajanhetkient1 jat2 v¨alill¨a. Kokonais- kuvaan kuuluu prosessorin Pi tila ajanhetkell¨a t1, prosessorin Pj tila ajanhetkell¨a t2 sek¨a prosessorinPi tallentamat viestit. Kokonaiskuva voidaan tulkita tilanteeksi, jossa molempien prosessorien tilat on tallennettu ajanhetkell¨a t2 eik¨a prosessori Pi ole saanut suoritusvuoroa ajanhetkien t1 ja t2 v¨alill¨a. Tallennettujen viestien voi- daan ajatella olevan matkalla viestikanavassa, jolloin prosessori Pi ole viel¨a ehtinyt saada niit¨a. Todellisuudessa prosessoriPi on voinut muuttaa tilaansa ajanhetkient1

ja t2 v¨alill¨a ja se on my¨os saanut tallentamansa viestit.

(8)

Saatuaan kuvanottoalgoritmin tallentamat tiedot kaikilta prosessoreilta johtaja muodostaa kokonaiskuvan j¨arjestelm¨ast¨a ja tarkastaa, onko j¨arjestelm¨a sallitussa tilassa vai ei. Se, miten tarkastus suoritetaan, riippuu stabiloitavasta algoritmista.

Kiinte¨an tulosteen algoritmeja stabiloitaessa on pystytt¨av¨a erottamaan virhetilan- ne j¨arjestelm¨an normaalista toiminnasta, jossa halutun tuloksen laskenta on viel¨a kesken.

Joissain tilanteissa kuvanottoalgoritmi voidaan korvata versiolla, jossa j¨arjestelm¨an tila tallennetaan useisiin paikallisiin tilannekuviin. T¨all¨oin stabiloitavan algoritmin on oltava sellainen, ett¨a virheet voidaan havaita paikallisista tilannekuvista.

Esimerkki virheiden havaitsemisesta. Tarkastellaan esimerkkin¨a seuraavaa al- goritmia, joka laskee prosessorien et¨aisyydet tiettyyn kohdeprosessoriin. Jokaisella prosessorillaPi on muuttujadi, johon se tallentaa nykyisen k¨asityksen et¨aisyydest¨a.

Algoritmi on kuvattu taulukossa 1.

Kohdeprosessori P0

Alustus: aseta d0 = 0

L¨ahet¨a jokaiselle naapurille tietod0:sta Muut prosessorit Pi

Alustus: aseta di =∞

Kun saat naapurilta Pj arvon dj:

Josdj+ 1 < di, aseta di =dj+ 1 ja l¨ahet¨a jokaiselle muulle naapurille tietodi:st¨a Muutoin ¨al¨a tee mit¨a¨an

Taulukko 1: Algoritmi, jolla prosessorit laskevat oman et¨aisyytens¨a kohdeprosesso- rista. Algoritmi ei ole toipumiskykyinen.

T¨am¨a algoritmi ei ole toipumiskykyinen. Esimerkiksi jos jonkin prosessorinPj muut- tujaan dj tallentuu virheen johdosta arvo 0, vaikkei Pj ole kohdeprosessori, niin al- goritmi ei saa sit¨a korjatuksi.

Esitetty et¨aisyyksienlaskenta-algoritmi voidaan kuitenkin stabiloida eli muuntaa toi- pumiskykyiseksi. Sit¨a varten on muodostettava menetelm¨a, jolla virheet havaitaan j¨arjestelm¨an tilannekuvasta.

Johtajaprosessorin saamassa tilannekuvassa on tieto arvoista, jotka on tallennettu muuttujiind. J¨arjestelm¨an normaalissa toiminnassa prosessorinPi arvodi on yleen- s¨a yht¨a suurempi kuin pienin naapuriprosessorien arvoista. Muissa tapauksissa pro-

(9)

d = 0

d = Inf

d = Inf d = Inf

d = 0

d = 1

d = Inf d = 1

d = 0

d = 1

d = 2 d = 1

Kuva 2: Esimerkki et¨aisyydet laskevan algoritmin oikeasta suorituksesta.

d = 0

d = 3

d = Inf d = Inf

d = 0

d = 1

d = Inf d = 1

d = 0

d = 0

d = 2 d = 1

Kuva 3: Esimerkkej¨a virhetilanteista eli tilanteista, jotka eiv¨at voi esiinty¨a et¨aisyydet laskevan algoritmin normaalin suorituksen aikana.

sessori Pi ei ole viel¨a ehtinyt saada viesti¨a silt¨a naapurilta, jolta pienempi d-arvo periytyisi. Johtajaprosessori voi siis prosessorien d-muuttujista ja viestikanavien si- s¨all¨oist¨a p¨a¨atell¨a, onko j¨arjestelm¨a sallitussa tilassa vai ei.

Sen sijaan virhetilanteeksi ei pid¨a tulkita tilannetta, jossa jonkin prosessorin d-arvo ei vastaa prosessorin et¨aisyytt¨a kohdeprosessorista. T¨allainen tilanne kuuluu j¨arjes- telm¨an normaaliin toimintaan silloin, kun et¨aisyyksien laskenta on viel¨a kesken.

Kuvassa 2 on esimerkki et¨aisyydenlaskemisalgoritmin oikeasta suorituksesta ja ku- vassa 3 on esimerkkej¨a virhetilanteista, jotka eiv¨at voi esiinty¨a j¨arjestelm¨an oikean suorituksen aikana. Virhetilanteet voidaan erottaa normaaliin suoritukseen kuulu- vista tilanteista tarkastelemalla solmujen tiloja ja viestikanavien sis¨alt¨oj¨a.

Virheet voidaan havaita esimerkiksi tarkastamalla seuraava ehto:

Algoritmin tila on sallittu, jos

(10)

• kohdesolmulleP0 p¨ateed0 = 0 ja muille solmuille Pi p¨atee di >0 ja

• jokaisella kohdesolmusta eroavalla solmullaPi on naapuri Pj, jolle p¨ateedi = dj+ 1 tai matkalla on arvon dj sis¨alt¨av¨a viesti naapurilta Pj naapurille Pi.

3.2 J¨ arjestelm¨ an alustus

J¨arjestelm¨an alustus suoritetaan, kun virheenhavaitsemisalgoritmi ilmoittaa, ettei j¨arjestelm¨a ole sallitussa tilassa. Alustuksen teht¨av¨an¨a on palauttaa j¨arjestelm¨a sal- littuun alkutilaan.

Seuraavaksi esitet¨a¨an alustusalgoritmi, jossa mik¨a tahansa prosessori voi virheen havaitessaan pyyt¨a¨a j¨arjestelm¨an alustusta. Algoritmi k¨aytt¨a¨a johtajanvalinta-algoritmia ja β-synkroinoija-algoritmia osateht¨avien suoritta- miseen. Johtajanvalinta-algoritmi muodostaa viritt¨av¨an puun, jonka juurena oleva prosessori on nimetty johtajaksi.β-synkronoija v¨aritt¨a¨a puun toistuvasti siten, ett¨a juuri valitsee uuden v¨arin, joka ”valuu” puussa alasp¨ain kunnes koko puu on saman v¨arinen. Sen j¨alkeen juuri valitsee seuraavan v¨arin ja sama prosessi toistuu.

Kun j¨arjestelm¨a ei ole sallitussa tilassa, virheidenhavaitsemisalgoritmi takaa, ett¨a ainakin yksi prosessori havaitsee virheen. Seuraavaksi kuvattava alustusalgoritmi saa aikaan j¨arjestelm¨an alustuksen silloin, kun jokin prosessoreista havaitsee virheen.

Alustusalgoritmin runkona on puun toistuvan v¨arityksen suorittava algoritmi. Alus- tusalgoritmin toiminnot, kuten virheist¨a raportointi ja oman tilan alustus, lomittu- vat puun toistuvaan v¨aritykseen.

Puun toistuva v¨aritys. Jokaisella prosessorilla on tieto siit¨a, mitk¨a prosessorit ovat sen lapsia ja mik¨a prosessori on sen vanhempi. Lis¨aksi prosessorillaPi on tieto omasta v¨arist¨a¨an colori. V¨ari on kokonaisluku joukosta {0, . . . ,5n−4}, jossa n on prosessoreiden m¨a¨ar¨a1.

Prosessorien v¨alisen kommunikoinnin mallina k¨aytet¨a¨an jaettua muistia. Prosesso- rin Pi ja sen vanhemman Pj v¨aliseen kommunikointikanavaan liittyy kaksi muut- tujaa: colorj,i, jolla vanhempi kertoo lapselleen v¨arins¨a ja colori,j, jolla lapsi kertoo vanhemmalleen alipuunsa v¨arin.

1ahdeteoksessa esitetyss¨a algoritmissa v¨ari¨a kasvatetaan modulo 5n3, jolloin suurin mah- dollinen v¨ari on 5n4 eik¨a 5n2.

(11)

2

1 1

1 1 1

2

2 2

1 1 1

Kuva 4: Kun juuri on valinnut uuden v¨arin, se kertoo sen lapsilleen, jotka vaihtavat v¨arins¨a ja kertovat uuden v¨arin omille lapsilleen.

Juurena toimiva prosessori suorittaa seuraavaa algoritmia: Jos kaikki lapset ilmoit- tavat, ett¨a niiden alipuut ovat saman v¨arisi¨a kuin juuri, niin juuri kasvattaa omaa v¨ari¨a¨an. Joka tapauksessa juuri kertoo lapsille oman v¨arins¨a.

Muut prosessorit suorittavat seuraavaa algoritmia: Jos vanhempi on kertonut pro- sessorille jonkun muun v¨arin kuin prosessorin nykyisen v¨arin, niin prosessori vaihtaa oman v¨arins¨a vanhemman v¨ariksi. Jos kaikki lapset ilmoittavat, ett¨a niiden alipuut ovat saman v¨arisi¨a kuin prosessori itse, niin prosessori ilmoittaa t¨am¨a alipuun v¨arin vanhemmalleen. Joka tapauksessa prosessori kertoo lapsille oman v¨arins¨a.

T¨am¨an algoritmin seurauksena juuren valitsema v¨ari valuu puussa alas. Kun koko puu on saman v¨arinen, tieto siit¨a v¨alittyy puussa yl¨osp¨ain juureen asti. T¨am¨an seurauksena juuri valitsee uuden v¨arin ja sama prosessi toistuu.

Kuva 4 havainnollistaa v¨arin valumista alas puussa. Jokainen solmu kertoo lapsilleen oman v¨arins¨a. Kuva 5 havainnollistaa, miten tieto v¨arityksen loppuunsaattamisesta etenee puussa yl¨osp¨ain.

Synkronointi voidaan saada aikaan hy¨odynt¨am¨all¨a puun toistuva v¨aritys -algoritmia antamalla jokaisen prosessorin suorittaa yksi laskenta-askel silloin, kun se vaihtaa omaa v¨ari¨a¨an. T¨allaista synkronointialgoritmia kutsutaan β-synkronoinniksi. Ylei- sess¨a stabiloinnissa puun toistuva v¨aritys -algoritmia ei kuitenkaan k¨aytet¨a synkro- nointiin vaan alustuksen suorittamiseen.

(12)

2

2 2

2 2 2

2

2 2

2 2 2

Kuva 5: Kun koko puu on v¨aritetty, lehtisolmut kertovat vanhemmilleen, ett¨a niiden alipuut on v¨aritetty niiden omalla v¨arill¨a. Lehtisolmujen vanhemmat huomaavat, ett¨a my¨os niiden alipuut on v¨aritetty niiden omalla v¨arill¨a ja v¨alitt¨av¨at t¨am¨an viestin edelleen vanhemmilleen.

Alustusalgoritmin toiminta. Puun toistuva v¨aritys -algoritmin tarvitsemien muuttujien lis¨aksi alustusalgoritmi tarvitsee seuraavat muuttujat: jokaisella proses- sorilla Pi on alustusta varten kaksi bin¨a¨arimuuttujaa: invokei ja reseti. Muuttuja invokei saa arvon true, jos prosessori Pi on havainnut virheen. Muuttuja reseti saa arvon true, jos prosessori Pi tiet¨a¨a, ett¨a alustus on parhaillaan k¨aynniss¨a.

Prosessorin Pi ja sen vanhemman Pj v¨aliseen kommunikointikanavaan liittyy kaksi lis¨amuuttujaa: resetj,i, jolla vanhempi v¨alitt¨a¨a lapselleen tiedon k¨aynniss¨a olevasta alustuksesta ja requesti,j, jolla lapsi v¨alitt¨a¨a vanhemmalleen tiedon alustuspyynn¨os- t¨a.

Alustusalgoritmi on erilainen juurena toimivalle prosessorille ja muille prosessoreille.

Jos alustusta ei ole k¨aynniss¨a, jokainen prosessori suorittaa virheentarkastusalgorit- min juuri ennen kuin se raportoi vanhemmalleen, ett¨a sen koko alipuu on v¨aritetty nykyisell¨a v¨arill¨a2.

Jos prosessori Pi havaitsee virheen, se kirjoittaa muuttujaansa invokei arvon true. Kun virheen havainnut prosessori kertoo vanhemmalle oman alipuunsa olevan itsens¨a v¨arinen, se v¨alitt¨a¨a samalla vanhemmalleen pyynn¨on k¨aynnist¨a¨a j¨arjestelm¨an alustus kirjoittamalla vanhempansa kommunikointikanavan request-muuttujaan arvontrue.

Kun vanhempi huomaa t¨am¨an alustuspyynn¨on, se v¨alitt¨a¨a sen vastaavasti omalle vanhemmalleen samalla kun se raportoi oman alipuunsa olevan itsens¨a v¨arinen. N¨ain

2ahdeteoksessa esitetyss¨a algoritmissa juuriprosessori ei koskaan suorita virheidenhavaitsemi- salgoritmia; t¨am¨a t¨aytynee lis¨at¨a algoritmiin.

(13)

alustuspyynt¨o etenee puussa yl¨osp¨ain.

Lopulta alustuspyynt¨o saapuu juuriprosessorille, joka k¨aynnist¨a¨a j¨arjestelm¨an alus- tuksen. Kun juuri seuraavan kerran vaihtaa v¨arins¨a, se alustaa oman tilansa ja v¨a- litt¨a¨a lapsilleen tiedon uudesta v¨arist¨a ja k¨aynniss¨a olevasta alustuksesta. Aina, kun prosessori vaihtaa oman v¨arins¨a vanhemman v¨ariksi, se alustaa oman tilansa ja kirjoittaa invoke-muuttujaansa arvon false. Kun prosessori kertoo oman v¨arins¨a lapsilleen, se v¨alitt¨a¨a my¨os tiedon k¨aynniss¨a olevasta alustuksesta.

Kun uusi v¨ari ja sen kanssa v¨alitett¨av¨a tieto alustuksesta on edennyt puussa juu- resta lehtisolmuihin, jokainen prosessori on alustanut tilansa. Sen j¨alkeen tieto siit¨a, ett¨a puu on v¨aritetty loppuun, alkaa kulkea puussa yl¨osp¨ain. T¨all¨a kertaa mik¨a¨an prosessori ei suorita virheentarkastusta, sill¨a j¨arjestelm¨an alustus on k¨aynniss¨a.

Kun tieto v¨arityksen saattamisesta loppuun kulkeutuu puussa yl¨osp¨ain, jokainen prosessori v¨alitt¨a¨a vanhemmalleen tiedon siit¨a, ettei uutta alustusta pyydet¨a, eli kir- joittaa vanhempansa kommunikointikanavan request-muuttujaan arvon false. Kun t¨am¨a tieto v¨alittyy juureen asti, juuri kirjoittaa muuttujaansa reset arvonfalse. Kun juuri seuraavan kerran valitsee uuden v¨arin, sen lapset kopioivat arvon false omiin reset-muuttujiinsa. Uuden v¨arin valuessa alas puussa jokainen prosessori huomaa, ettei j¨arjestelm¨an alustus ole k¨aynniss¨a, eik¨a t¨all¨a kertaa alusta omaa tilaansa.

Alustusalgoritmin oikeellisuus. Esitetty alustusalgoritmi takaa sen, ettei uusia virheentarkastuksia k¨aynnistet¨a, kun j¨arjestelm¨an alustus on k¨aynniss¨a. Vasta kun kaikki prosessorit ovat alustaneet oman tilansa, voidaan virheentarkastusalgoritmi suorittaa uudelleen.

Alustusalgoritmin oikea toiminta edellytt¨a¨a viritt¨av¨an puun muodostamista ja puun toistuva v¨aritys -algoritmin oikeaa toimintaa. Viritt¨av¨a puu voidaan muodostaa toi- pumiskykyisell¨a johtajan valita-algoritmilla ja my¨os puun toistuva v¨aritys -algoritmi on toipumiskykyinen.

Kun j¨arjestelm¨an virheet loppuvat, voi viritt¨av¨an puun muodostavan algoritmin toi- puminen alkaa. Kun se on toipunut virheist¨a, alkaa puun toistuva v¨aritys -algoritmin toipuminen. Senkin toivuttua alustusalgoritmi voi olla mielivaltaisessa tilassa. Jon- kin prosessorin invoke-muuttujassa voi esimerkiksi olla arvo true, vaikkei j¨arjestel- m¨a¨a tarvitsisi alustaa. Alustusalgoritmi toipuu kuitenkin n¨aist¨a virhetilanteista, sill¨a vaikka se aluksi suorittaisikin turhia alustuksia, niin viimeist¨a¨an kahden seuraavan puussa valuvan v¨arin my¨ot¨a prosessorien invoke- ja reset-muuttujien arvot korja- taan. Sen j¨alkeen alustusalgoritmi alkaa toimia oikein.

(14)

Stabilointi

Virheiden

tarkkailu Alustus

Kuvanotto

Johtajan valinta

Toistuva väritys

Puun muodostus Viestikanavat

luotettaviksi

Muuttujien alustus

Kuva 6: Stabilointialgoritmin jakautuminen osateht¨aviin.

3.3 J¨ arjestelm¨ an toipumiskyky

J¨arjestelm¨ass¨a esiintyv¨at virheet voivat vaikuttaa my¨os virheenhavaitsemisalgorit- min ja alustusalgoritmin toimintaan. J¨arjestelm¨ass¨a esiintyv¨an virheen johdosta vir- heidenhavaitsemisalgoritmi voi toimia v¨a¨arin, eli ilmoittaa olemattomasta virheest¨a tai j¨att¨a¨a virheen havaitsematta. Riitt¨a¨a kuitenkin, ett¨a virheidenhavaitsemisalgo- ritmi ei ilmoita virheist¨a silloin, kun sek¨a virheidenhavaitsemisalgoritmi ett¨a tark- kailtava algoritmi ovat sallitussa tilassa.

Tarkastellaan j¨arjestelm¨an toimintaa silloin, kun virheet loppuvat ja j¨arjestelm¨an toi- puminen voi alkaa. Aluksi j¨arjestelm¨a voi olla mielivaltaisessa tilassa. Jonkin ajan kuluttua osateht¨avi¨a suorittavat toipumiskykyiset algoritmit, kuten viritt¨av¨an puun muodostava algoritmi ja kommunikointikanavat luotettavaksi tekev¨a algoritmi, ovat p¨a¨atyneet sallittuun tilaan. Niiden toivuttua virheist¨a alkavat virheidentarkkailual- goritmi ja alustusalgoritmi toimia edell¨a kuvatulla tavalla.

Kuva 6 havainnollistaa stabilointialgoritmin osateht¨avi¨a. Jokaisessa solmussa oleva algoritmi voi toipua virheist¨a kun sen lapsisolmuina kuvatut osateht¨avi¨a suorittavat algoritmit ovat p¨a¨atyneet sallittuun tilaan.

Virheidentarkkailualgoritmin ja alustusalgoritmin toivuttua virheist¨a voi varsinainen tarkkailtava algoritmi olla sallitussa tai ei-sallitussa tilassa. Jos algoritmi on sallitus- sa tilassa, virheidentarkkailualgoritmi toimii oikein eik¨a havaitse virhett¨a, ja sallittu

(15)

suoritus voi jatkua. Jos algoritmi ei ole sallitussa tilassa, virheidentarkkailualgorit- mi toimii oikein ja havaitsee virheen, jolloin alustusalgoritmi palauttaa j¨arjestelm¨an sallittuun tilaan. Sen j¨alkeen virheidenhavaitsemisalgoritmi ei en¨a¨a ilmoita virheist¨a eik¨a uusia alustuksia suoriteta. Jos uusia virheit¨a ei tapahdu, varsinaisen algoritmin suoritus jatkuu sallitusti.

4 L¨ ahteet

Shlomi Dolev: Self-Stabilization, luku 5. MIT Press 2000.

Viittaukset

LIITTYVÄT TIEDOSTOT

Pit¨aisik¨o mukaan laskea my¨os ensimm¨ainen ja viimei- nen p¨aiv¨a? Helpottaako ratkaisemista tieto siit¨a, ett¨a ensimm¨ainen p¨aiv¨a on keskiviikko ja viimeinen p¨aiv¨a

”ei”, kehit¨a toimiva turnausj¨arjestelm¨a: Millaisella sys- teemill¨a pelaajat kannattaisi jakaa pareihin niin, ett¨a kullakin kierroksella korkeintaan yksi pelaaja lep¨a¨a,

Matematiikan perusmetodit I/soveltajat Harjoitus 1, syksy

Lanttia heitet¨ a¨ an, kunnes sek¨ a kruunu ett¨ a klaava ovat esiintyneet ainakin kaksi kertaa.. Olkoon X sen kerran j¨ arjestysluku, jolla peli p¨

Yksi mahdollisuus on ajatella pukemisen tulosta ja olettaa, ett¨ a keng¨ at ja sukat ovat yksil¨ oit¨ aviss¨ a, mutta ett¨ a jokainen kenk¨ a tai sukka voi olla miss¨ a hyv¨ ans¨

Ensimm¨ aisen kokousp¨ aiv¨ an j¨ alkeen jotkut osallistujat poistuivat, ja k¨ avi ilmi, ett¨ a jokaisella j¨ aljelle j¨ a¨ aneell¨ a oli edelleen yht¨ a monta tuttavaa

Lis¨ aksi kannattaa vilkaista liit- teen¨ a olevaa kopiota kirjasta Simmons: Introduction to Topology and Modern Analysis.. Ratkaisun selvent¨ amiseksi

a) Laske silmukkaan indusoituva virta ajan funktiona, kun silmukan etureuna saa- puu kentt¨ a¨ an hetkell¨ a t = 0. Silmukan vastus on R ja induktanssi L... b) Silmukka on