Livelock: mis on, näide, erinevus ummikseisust
⚡ Nutikas kokkuvõte
Livelock on samaaegsuse olukord, kus protsessid muudavad pidevalt oma olekut üksteisele reageerides, kuid ei tee reaalset edasiminekut, jäädes aktiivseks ja kulutades protsessori tsükleid ilma oma ülesandeid lõpetamata või blokeerumata.

Mis on Livelock?
A livelock on olukord, kus eksklusiivse lukustuse taotlus lükatakse korduvalt tagasi, kuna paljud kattuvadping Jagatud lukud segavad pidevalt üksteist. Protsessid muudavad pidevalt oma olekut, mis takistab neil ülesande täitmist.
Livelocki näited
Näide 1:
Lihtsaim näide Livelockist on kaks inimest, kes kohtuvad koridoris näost näkku ja mõlemad liiguvad kõrvale, et teine mööduks. Nad liiguvad pidevalt küljelt küljele ilma edasi liikumata, sest nad liiguvad samal ajal samas suunas. Siin ei ristu nad kunagi teineteist.
Näide 2:
Ülaltoodud pildil vajab kumbki protsess kahte ressurssi ja nad kasutavad vajalike lukkude hankimiseks primitiivset küsitlust. Kui katse ebaõnnestub, proovib meetod uuesti.
- Protsess A hoiab ressurssi Y
- Protsess B sisaldab ressurssi X
- Protsess A vajab ressurssi X
- Protsess B vajab ressurssi Y
Eeldame, et protsess A käivitub esimesena ja hangib ressursi X ning seejärel protsess B käivitub ja hangib ressursi Y. Olenemata sellest, milline protsess esimesena käivitub, kumbki neist edasi ei liigu.
Kuid kumbki neist kahest protsessist pole blokeeritud. Nad kasutavad protsessori ressursse korduvalt ilma edasiminekut tegemata, kuid ei peatu kunagi töötlemisbloki jaoks.
Seega ei ole see olukord ummikseis, sest mitte ükski protsess pole blokeeritud; selle asemel seisame silmitsi ummikseisuga samaväärse olukorraga, mida nimetatakse LIVELOCKiks.
Mis viib Livelockini?
Ressursside lukk (livelock) on seotud süsteemi lubatud protsesside arvuga, mis on määratletud protsessitabeli kirjete koguarvuga. Seetõttu käsitletakse neid protsessitabeli pesasid piiratud ressurssidena. Kui protsessid proovivad korduvalt neid piiratud ressursse uuesti kasutada, andes samal ajal üksteisele järele, siis ükski neist ei edene ja süsteem siseneb ressursi lukku (livelock).
Mis on tupik?
A ummikseis on olukord, mis tekib operatsioonisüsteemis, kui protsess läheb ooteolekusse, kuna teine ooteprotsess hoiab nõutud ressurssi. Pattiseisund on levinud probleem mitmeprotsessiliste protsesside puhul, kus mitu protsessi jagavad teatud tüüpi üksteist välistavat ressurssi, mida nimetatakse pehmeks lukuks või tarkvaraks.
Ummikseisu näide
- Reaalse maailma näide oleks liiklus, mis liigub ainult ühes suunas.
- Siin peetakse silda ressursiks.
- Pattiseisu tekkimisel saab selle hõlpsalt lahendada, kui üks auto tagurdab (ressursside ennetamine ja tagasikerimine).
- Ummikseisu korral võib tekkida vajadus varundada mitut autot.
- Seetõttu on nälgimine võimalik.
Ummikseisu näide
Mis on nälgimine?
Nälgimine on olukord, kus madala prioriteediga protsessid blokeeritakse, samal ajal kui kõrge prioriteediga protsessid jätkavad tööd. Igas süsteemis esitatakse dünaamiliselt nii kõrge kui ka madala prioriteediga ressurssidele päringuid. Seetõttu on vaja poliitikat, et otsustada, kellele ja millal päringuid tehakse.
Mõne algoritmi puhul ei pruugi teatud protsessid soovitud teenust saada isegi siis, kui nad pole ummikseisus. Nälg tekib siis, kui mõned lõimed muudavad jagatud ressursid pikaks ajaks kättesaamatuks.
Näide nälgimisest
Näiteks pakub objekt sünkroniseeritud meetodit, mille tagastamine võtab tõenäoliselt kaua aega. Kui üks lõim seda meetodit sageli kasutab, blokeeritakse sageli ka teised lõimed, mis vajavad samale objektile sagedast sünkroniseeritud juurdepääsu.
Erinevus ummikseisu, nälgimise ja livelocki vahel
- Pattiseis on olukord, mis tekib operatsioonisüsteemis, kui protsess läheb ooteolekusse, kuna nõutud ressurssi hoiab teine ooteprotsess.
- Otselukk on seevastu peaaegu sarnane ummikseisuga, välja arvatud see, et otselukus osalevate protsesside olekud muutuvad pidevalt üksteisele reageerides ja ükski ei edene.
- Seega on livelock ainulaadne ressursipuuduse juhtum.


