Taustaa. Lukkiutuminen. Seuraukset. Määritelmiä Lukkiuma (deadlock) päättymätön odotus BLOCKED-tilassa. prosessi P. prosessi Q. pyydä A? OK.

Samankaltaiset tiedostot
Lukkiutuminen. Taustaa Aterioivat Filosofit Ennaltaehkäisy Havaitseminen Välttely. Andrews 4.3 Stallings (tai mikä tahansa KJ-kirja)

Lukkiutuminen. Taustaa

4-13. Ratkaisu 4: OK, mutta... vrt. 2. Ratkaisu 3: OK. Ratkaisu 5: OK? Nälkiintyminen?

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

Käyttöjärjestelmät: poissulkeminen ja synkronointi

Semaforit Liisa Marttinen 2-1

alkuarvo P(S) public V(S) public jos kriittinen alue vapaa, lukitse se ja jatka eteenpäin jos kriittinen alue varattu, odota

Semaforit. Semaforit. semafori S S.arvo. alkuarvo P(S) S.joukko V(S)

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

Monitorit. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5

Monitorit. Tavoite. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5. Minimoi virhemahdollisuuksia

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

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

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

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

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

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

Yhteenvetoa. Ongelmakenttä

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

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen

Semaforit ja rinnakkaisuuden hallinta

Semaforit ja rinnakkaisuuden hallinta

Syitä siirtoon. Hajautettu prosessien hallinta. Stallings, Luku 15. Sisältöä luento 20. Kuka/mikä päättää siirrosta? Esimerkki.

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

Hajautettu prosessien hallinta. Stallings, Luku 15. Sisältöä luento 20

Itsestabilointi: perusmääritelmiä ja klassisia tuloksia

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

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

Stabilointi. Marja Hassinen. p.1/48

Jaana Diakite Projekti 1 JAVA-Monitorit 1(13) Rinnakkaisohjelmointi Anu Uusitalo

Sisältöä luento 20. Hajautettu prosessien hallinta. Stallings, Luku 15. Prosessin siirto. Syitä siirtoon. Esimerkki. Kuka/mikä päättää siirrosta?

Transaktiot - kertausta

Tavoite. Monitorit. Monitori Hoare Monitori. Minimoi virhemahdollisuuksia. Monitori Synkronointimenetelmiä Esimerkkejä

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

Rinnakkaisohjelmointi, Syksy 2006

R 2 [0] ei ole likainen luku, sillä avaimelle 0 on jo palautettu sen alkuperäinen arvo.

Seminaari: Keskusmuistitietokannat. Keskusmuistitietokantojen samanaikaisuuden hallinta Ilkka Pullinen

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

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

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

Rinnakkaisohjelmistot. Liisa Marttinen Tietojenkäsittelytieteen laitos Helsingin yliopisto Kevät 2004

Ohjelmoinnin peruskurssien laaja oppimäärä

11. Javan toistorakenteet 11.1

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

Semaforit ja rinnakkaisuuden hallinta. Tuottajat ja kuluttajat. Halkaistu binäärisemafori (Split binary semaphore) semaforit empty ja full

Tietojenkäsittelyn perusteet 2. Lisää käyttöjärjestelmistä

Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön?

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

12. Javan toistorakenteet 12.1

Algoritmit 1. Luento 4 Ke Timo Männikkö

12. Javan toistorakenteet 12.1

käyttötapaukset mod. testaus

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

Ohjelmoinnin peruskurssien laaja oppimäärä

Algoritmit 2. Luento 13 Ti Timo Männikkö

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.

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

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

Osio 3: Prosessit, siirräntä ja tiedostojärjestelmä

» multiaccess channel» random access channel LAN (Ethernet) langaton. ongelma: käyttövuoron jakelu Yhteiskäyttöisen kanavan käyttö

4. MAC-alikerros. yleislähetys (broadcast) ongelma: käyttövuoron jakelu. » multiaccess channel» random access channel LAN (Ethernet) langaton

Käyttöjärjestelmät: prosessit

Harjoitussuunnitelma viikko 14 Potkaiseminen II

Samanaikaisuuden hallinta

2 Konekieli, aliohjelmat, keskeytykset

Ellipsoidimenetelmä. Samuli Leppänen Kokonaislukuoptimointi. S ysteemianalyysin Laboratorio

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

Turingin koneen laajennuksia

Algoritmit 1. Demot Timo Männikkö

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

Harjoitussuunnitelma viikko 15 Sisäsyrjäpotku I

Algoritmit 2. Luento 9 Ti Timo Männikkö

7.4 Sormenjälkitekniikka

Algoritmit 2. Luento 10 To Timo Männikkö

Rinnakkaisohjelmointi

Rinnakkaisohjelmointi

Rinnakkaisohjelmointi

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 2 (opetusmoniste, lauselogiikka )

Prosessi perinteisesti

Stallings, Luku 4.1. KJ-I I S2005 / Tiina Niklander, kalvot Auvo HäkkinenH

Luento 3: PROSESSIT JA NIIDEN HALLINTA

Algoritmit 2. Luento 10 To Timo Männikkö

SUBSTANTIIVIT 1/6. juttu. joukkue. vaali. kaupunki. syy. alku. kokous. asukas. tapaus. kysymys. lapsi. kauppa. pankki. miljoona. keskiviikko.

u vapaakäyntisyys (reentrancy) u Yhteinen koodialue u kullakin oma data-alue, pino, PCB u osoitteet suhteellisia prosessin alun suhteen

Sisältöä PROSESSIT JA NIIDEN HALLINTA. Prosessi. Prosessi virtuaalimuistissa. Prosessi. Prosessi virtuaalimuistissa. Käyttöjärjestelmät

Algoritmit 1. Luento 9 Ti Timo Männikkö

Prosessi virtuaalimuistissa PROSESSIT JA NIIDEN HALLINTA. Sisältöä. Prosessi virtuaalimuistissa. Prosessi. Prosessi. Käyttöjärjestelmät, Luento 4

PROSESSIT JA NIIDEN HALLINTA

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

KUMPI OHJAA, STRATEGIA VAI BUDJETTI?

Yllättävän, keskustelun aikana puhkeavan ristiriidan käsittely

Vapaus. Määritelmä. jos c 1 v 1 + c 2 v c k v k = 0 joillakin c 1,..., c k R, niin c 1 = 0, c 2 = 0,..., c k = 0.

Harjoitussuunnitelma viikko 1 Sisäsyrjäpotku I

Tietokoneen toiminta (Computer Organization I)

5. Luento: Rinnakkaisuus ja jako prosesseihin (+ lyhyesti reaaliajasta) Arto Salminen,

Stabiloivat synkronoijat ja nimeäminen

811120P Diskreetit rakenteet

Ohjelmoinnin perusteet Y Python

Transkriptio:

Lukkiutuminen Taustaa Aterioivat Filosofit Ennaltaehkäisy Havaitseminen Välttely Taustaa prosessi P pyydä A? OK. pyydä B? Odota! yksityiskäyttöiset objektit objekti: puskuri, sivu, skanneri, levyajuri, kriittinen vaihe,... Andrews. Stallings 6.-6.6 (tai mikä tahansa KJ-kirja) - A B C prosessi Q pyydä B? OK. pyydä A? Odota! Seuraukset Prosessit eivät etene ja... niiden varaamat resurssit pysyvät varattuina CPU muisti, I/O-laitteet loogiset resurssit (semaforit, kriittiset alueet,...) Kriittinen vaihe Suoritusjärjestys, ajoitus Stallings Fig 6. - Laskenta epäonnistuu suoritus ei pääty koskaan järjestelmä kaatua köllähtää tilanne ei kenties toistettavissa: suoritusjärjestys - Määritelmiä Lukkiuma (deadlock) päättymätön odotus BLOCKED-tilassa Livelock prosessi käyttää prosessoria odottamiseen (spinlock, busy loop) Ping-pong sinä ensin eikun sinä ensin -... kaksi prosessia vuorottelevat tarjoten vuoroa toiselle, eivätkä tee mitään hyödyllistä Nälkiintyminen (starvation) prosessi READY-tilassa - mutta ei silti saa koskaan prosessoria tai haluamaansa resurssia tai pääse kriittiselle alueelle tai yleensä etenemään -5 Mahdollinen suorituspolku Suoritusjärjestys, ajoitus Stallings Fig 6. orig Bacon Fig 7. -6

Mahdollinen suorituspolku Stallings Fig 6. orig Bacon Fig 7. -7 Lukkiutumisen syy Kolme staattista toimintapoihin liittyvää ehtoa S Poissulkemistarve (mutual exclusion) resurssilla yksi käyttäjä kerrallaan S Pidä ja odota (hold and wait) prosessi pitää saamansa resurssin samalla, kun jää odottamaan lisäresursseja S Kenelläkään ei etuoikeutta (no pre-emption) resurssia ei voi ottaa pois väkisin Yksi dynaaminen ehto D Odotus kehässä (circular wait) on olemassa kehä prosesseista, jotka pitävät itsellään resurssia, jota kehän seuraava prosessi tarvitsee edetäkseen Kaikki ehdot voimassa => lukkiutuminen -8 Aterioivat Filosofit (Dijkstra) Aterioivat Filosofit Filosofi: aattelepa ite ota kaksi haarukkaa... yksi kummaltakin puolelta syö, syö, syö spagettia palauta haarukat Kuinka varata haarukat ilman - lukkiutumista - turhaa odottamista - nälkiintymistä s.e. kaikki saavat olla paikalla? -9 - Ratkaisu : kullekin haarukalle oma semafori sem fork[..] = (,,,, ) Ratkaisu : vain yksi voi yrittää kerrallaan sem turn = # säätelee yritysvuoroja process P[i]: repeat think() P(fork[i]) P(fork[(i + ) mod 5]) eat() V(fork[i]) V(fork[(i+) mod 5]) until false Voi lukkiutua! Kukin ehtii ottaa yhden haarukan ja jää odottamaan Ei OK! Miksei? process P[i]: repeat think() P(turn) P(fork[i]) P(fork[(i+) mod 5]) V(turn) eat() V(fork[i]) V(fork[(i+) mod 5]) until false Turhaa odotusta! Ei ihanok! Miksei? toista eikä kukaan pääse syömään! - -

Turhaa odotusta! Oletetaan, että ensin kaikki ajattelevat ja sitten haluavat syömään esim. järjestyksessä fil, fil, fil, fil, fil fil saa haarukat ja pääsee syömään, fil varaa itselleen varausvuoron ja jää odottamaan haarukkaa ja muut sitten vain odottavat, ensin varausvuoroa ja haarukoita fil joutuu ihan turhaan odottamaan, haarukat olisivat vapaina, mutta niitä ei pääse varaamaan! Mutta kukin pääsee varaamaan ja aikanaan syömään => ei ole nälkiintymistä! varaussemafori turn pitää varaukset FIFO-jonossa - Ratkaisu : OK Andrews Fig..7 - Entä onko turhaa odotusta? Korkeintaan filosofia saa haarukan käteensä: fil haarukan, fil haarukan, fil haarukan ja joko fil tai fil haarukan riippuen siitä kumpi ensiksi ehtii. Haarukka jää aina vapaaksi ja sen saa fil, joka siis pääsee syömään ja aikanaan vapauttaa hallussaan olevat haarukat ja päästää muut syömään. Näin estetään lukkiutuminen! Ratkaisu ei myöskään aiheuta nälkiintymistä. Suosii tosin fil:aa, mutta vain tässä erikoistilanteessa. - 5 Ratkaisu : OK, mutta... vrt. sem fork[5] = ([5] ); sem room = ; process Philosopfer[i= to ] { while (true) { think(); P(room); P(fork[i]); P(fork[(i+) mod 5]); eat(); V(fork[i]); V(fork[(i+) mod 5]); V(room); } } Estää lukkiutumisen! Ei turhaa odotusta. Saavatko kaikki olla paikalla? Stallings Fig. 6. - 6 Ratkaisu 5: OK? Nälkiintyminen? Tanenbaum Fig.. - 7 Huom: down() = P(), up() = V() Tanenbaum Fig.. - 8

Ratkaisu 5: Tapettaisko filosofi? Ratkaisu 6: OK, ei yhteisiä resursseja EATING HUNGRY Ostakaa 5 haarukkaa lisää! Filosofi[i]: aatteleppa ite ota kaksi haarukkaa yksi molemmilta puolilta syö, syö, syö spagettia palauta haarukat - 9 - Ennaltaehkäisy = Poista joku syistä S, S, S tai D Ehkäise S (poissulkemistarve)? Lukkiuman ennaltaehkäisy = käytä yhteiskäyttöisiä resursseja yksittäiskäyttöisten sijasta, spooling (= hanki enemmän resursseja) poissulkemistarpeelle omat syynsä, mutta Stallings 6. hienojakoisempi toteutus sallii paremmin rinnakkaisuutta pienemmät alueet, yhtäaikainen käyttö, enemmän lukkoja Yleistä, esim. tietokantojen yhteydessä lyhyet transaktiot - - Ehkäise S (pidä ja odota)? Ehkäise S (ei etuoikeuksia)? = pyydä kaikki resurssit yhdellä kertaa = odota, että saat kaikki kerralla tehotonta pitkät odotusajat: varaa nyt - käytä paljon paljon myöhemmin varautuminen pahimpaan: varaa resursseja, joita ei ehkä tarvitakaan vaikea / mahdoton toteuttaa? tiedettävä etukäteen mitä resursseja tarvitaan kaikilla mahdollisilla suorituspoluilla = jos varaaminen ei onnistu, vapauta jo varatut resurssit, peruuta edelliseen tilanteeseen kokeile alustavasti varausta, tai tarkistuspisteet manageri? OK, jos järjestelmä suunniteltu tämä mielessä käytännöllinen, jos tilatiedon talletus helppoa ja lukkiutumisriski aidosti olemassa normaalia käytäntöä transaktioiden käsittelyssä - -

Ehkäise D (odottaminen kehässä)? = numeroi resurssit lineaarisesti, varaa numerojärjestyksessä etukäteistietoa resurssitarpeesta, varauduttu pahimpaan tapaukseen pessimistinen TAI varaa sitä mukaa kun tarve (järjestyksessä), tarvittaessa palaa aiempaan tilaan optimistinen - 5 Ratkaisu 5: Ehkäise S (pidä ja odota) = varaa kaksi haarukkaa yhtäaikaa process P[i]: repeat think( ) take_ forks(i, (i+) mod 5) eat( ) put_forks( i, (i+) mod 5) until false take & put: resurssin hallinta tehtävät: vuorojen antaminen lukkiutuman ehkäisy nälkiintymisen ehkäisy - 6 Vaarallisten kohtien metsästys P(turn) P(fork[i]) P(fork[(i+) mod 5]) V(turn) : eat() : P(turn) : this is not fair! Lukkiuman havaitseminen : eat() : eat() : this is not fair! : eat() : eat() Stallings 6. - 7-8 Lukkiuman havaitseminen Havaitseminen vaikeaa muodostaako ryhmä prosesseja lukkiuman, vai odottavatko ne ulkoista tapahtumaa? Jotta voisi toipua, pystyttävä havaitsemaan toipuminen: peruutus edeltävään tilanteeseen tapa yksi tai useampi lukkiumaan kuuluva prosessi KJ tarvitsee tietoa resurssien allokoinnista sellaisessa muodossa, että voi havaita lukkiuman! tutki aika-ajoin onko lukkiumaa Resurssien (objektien) allokointi Prosessit Resurssit P i i=..m R j j=..n yhteensä R = (R,..., R n ) vapaana V = (V,..., V n ) Allokointimatriisi A [P i,r j ] montako resurssia Rj allokoitu prosessille Pi Pyyntömatriisi Q [P i,r j ] montako resurssia Rj prosessi Pi pyytänyt - 9-5

Esim.: Alkutilanne Prosessilla on resurssit ja, ja se haluaa resurssit ja 5. Kenellä on resurssi? Mitkä resurssit ovat vapaana? DDA: Deadlock Detection Algorithm (Dijkstra) DDA [Poista prosessit, joille ei ole allokoitu resursseja] Merkitse käsitellyiksi kaikki tyhjät rivit matriisissa A. DDAk [Alusta vapaiden resurssien laskurit] Alusta työvektori W = V DDA [Etsi prosessi, jonka maksimipyyntöön voi suostua] Etsi merkitsemätön rivi Pi siten, että Q[Pi,Rj] W[Rj] j =..n Jos ei löydy, algoritmi on päättynyt. DDAm. [Oleta, että prosessi suoritettu, ja vapauta varaukset] Aseta W = W+A[Pi] ts.. W[Rj] = W[Rj]+A[Pi,Rj] j =..n Merkitse rivi Pi käsitellyksi ja palaa askeleeseen DL. Onko tässä lukkiuma vai ei? Stallings Fig. 6.9 - Kun algoritmi päättyy, merkitsemättömät rivit osoittavat lukkiumaan kuuluvat prosessit. Miksi? - Esim.: Vaihe allokointi matriisi A DDAj merkitse pyyntömatriisi Q kaikki R: vapaat V: työvektori W: + DDAm -> uusi W: DDA merkitse, voi suostua: Q[,5] W[5] DDAk kopioi - Esim.: Vaihe allokointi matriisi A kaikki R: vapaat V: työvektori W: pyyntömatriisi Q DDA ei prosessia Pi s.e. Q[Pi,Rj] W[Rj] j. Algoritmi päättyy prosessit ja lukkiutuneet Mitä sitten? Bacon Fig. 7.9: Graphs - Pankkiirin algoritmi Alkujaan yhdelle resurssille (raha) Lukkiuman välttely Miksi Pankkiirin? varmistettava, että pankki ei koskaan uloslainaa niin paljon, ettei se pysty tyydyttämään kaikkien talletusasiakkaiden maksimitarpeita (Huom: pankilla myös omaa pääomaa) Varmista ensin, allokoi vasta sitten Stallings 6. - 5-6 6

Pankkiirin algoritmi useille resursseille (Dijkstra) Kerää tilatietoa Prosesseille jo allokoiduista resursseista Resursseista, joita kukin prosessi voisi edelleen pyytää Varmista pyynnön vaikutus etukäteen Allokoi vasta, kun varma ettei johda lukkiumaan pahimmassakaan tapauksessa Tarkista, että löytyy ainakin yksi vuorottelujärjestys, jossa kaikki prosessit voivat suoriutua loppuun vaikka muut pyytäisivät maksimitarpeensa "worst case analysis" - 7 Allokointi- ja pyyntömatriisit kuten edellä LISÄKSI Resurssien maksimipyyntö C[Pi,Rj] montako resurssia Rj prosessi Pi voisi maksimissaan pyytää prosessien kerrottava etukäteen! Mahdollinen uusi allokointimatriisi A [Pi,Rj] montako resurssia Rj prosessilla Pi olisi, jos sille annettaisiin sen maksimitarpeen mukaan Mahdollinen uusi pyyntömatriisi Q [Pi,Rj] montako resurssia Rj prosessi Pi voisi vielä tämän jälkeen pyytää Q = C - A Alkuperäisiä ei voi vielä muuttaa! - 8 Mieti allokoinnin seurauksia etukäteen: Oleta, että allokointi tehdään Laske uusi mahdollinen allokointimatriisi A Laske uusi mahdollinen pyyntömatriisi Q pahimmassa tapauksessa, ts. tilanteessa jossa kaikki pyytävät oman maksimimääränsä Sovella lukkiuman havaitsemisalgoritmia DDA matriiseille A ja Q Jos ei johda lukkiumaan, suostu pyyntöön muuten älä suostu pyyntöön jätä prosessi odottamaan kun joku vapauttaa, tarkista uudelleen Allokointimatriisi A Pyyntömatriisi Q Maksimipyyntö C R R R R R5 R R R R R5 R R R R R5 P P P P Resurssivektori R R R R R R5 Vapaana V Voiko P:n pyyntöön suostua? Voisiko lukkiutua? - 9 - Jos P:n pyyntöön suostuttaisiin niin Allokointimatriisi A' Pyyntömatriisi Q' Maksimipyyntö C R R R R R5 R R R R R5 R R R R R5 P P P P Resurssivektori R R R R R R5 Vapaana V R R R R R5 Vapaana V' - R R R R R5 Työvektori W Työvektori W Työvektori W Työvektori W Työvektori W DDAm merkkaa rivi DDAm merkkaa rivi DDAm merkkaa rivi DDAm merkkaa rivi Voi suostua! Mitä, jos ei voi? - 7

Ongelmia Kertauskysymyksiä? Yleisrasite tutki jokaisella pyynnöllä... prosessia ja resurssia? Prosessin tiedettävä maksimitarve etukäteen viksu arvaus? pahin tapaus? dynaamisesti vieläkin rasittavampaa Aina ei löydy varmaa allokointijärjestystä ei-turvallinen tila ei aina johda lukkiumaa voiko ottaa riskin! - - 8