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.

  • 🔁 Määratlus: Otsetuvastus tekib siis, kui protsessid muudavad pidevalt üksteise olekut, et üksteisega kohaneda, kuid ei edene kunagi, erinevalt ummikseisus olevatest külmutatud protsessidest.
  • 🚶 Näide: Kaks inimest astuvadping Koridoris küljelt küljele liikumine, et üksteist läbi lasta, illustreerib pidevalt liikuvat elustikku, mis ei ületa kunagi teineteisest.
  • 🧮 Põhjus: Lõplike protsessitabeli pesadega piiratud lukkude korduv küsitlemine ja uuesti proovimine viib protsessid reaalajas lukustusse ilma, et ükski neist blokeeruks.
  • 🇧🇷 Võrdlus: Pattiseis külmutab protsessid, nälg keelab ressurssidel lõputult ligipääsu ja reaalajas lukustus hoiab protsessid tegevuses ilma edasiliikumiseta.
  • 🛡️ ennetamine: Juhuslik taganemisrežiim, uuesti proovimise piirangud ja prioriteetide järjestamine katkestavad sümmeetrilised uuesti proovimised, mis loovad reaalajas lukustuse.
  • 🤖 Tehisintellekti nurk: Masinõpe märgistab protsessori edenemismustreid ja Copilot aitab kirjutada tagasilükkamis- ja lukustusjärjestamiskoodi, mis väldib reaalajas lukustumist.

Livelock sisse Operating System

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:

Näited Livelockist Operating System

Ülaltoodud pildil vajab kumbki protsess kahte ressurssi ja nad kasutavad vajalike lukkude hankimiseks primitiivset küsitlust. Kui katse ebaõnnestub, proovib meetod uuesti.

  1. Protsess A hoiab ressurssi Y
  2. Protsess B sisaldab ressurssi X
  3. Protsess A vajab ressurssi X
  4. 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.

Näide ummikseisust Operating System

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.

KKK

Otsese lukustuse vähendamine toimub uuesti proovimisele juhuslikkuse või järjestamise lisamise teel. Meetodid hõlmavad randomiseeritud või eksponentsiaalset tagasilükkamist enne uuesti proovimist, piiramistping uuesti proovimise katsete arv ja fikseeritud lukustuse hankimise järjekorra jõustamine, et protsessid ei peegeldaks üksteise käike.

Ei. Aktiivselt lukustatud protsesse ei blokeerita kunagi – need töötavad edasi ja kulutavad protsessori tsükleid pidevate uuestikatsete kaudu, ilma et nad edeneksid. Ummikus seisaku korral protsessid peatuvad ja ootavad, seega nad ei kasuta protsessorit.

Tihti jah. Ummikus olevad protsessid on hangunud, mida on lihtne märgata, samas kui reaalajas lukustatud protsessid jäävad aktiivseks ja muudavad pidevalt olekut. Tuvastamine otsib tavaliselt suurt protsessori kasutust koos nulli edasiliikumisega aja jooksul.

Võidujooksutingimus on vale või ettearvamatu tulemus, mille põhjustab sünkroonimata juurdepääs jagatud andmetele. Livelock seevastu hõlmab protsesse, mis jäävad aktiivseks ja muudavad pidevalt olekut üksteisele reageerides, ilma et nad oma tööd kunagi lõpetaksid.

Jah. Lõimed, mis korduvalt üksteisele reageerivad – näiteks nii lukustuse vabastamine kui ka uuesti taotlemine samal hetkel – saavad reaalajas lukustuda ilma kunagi blokeerimata. See ilmneb sageli uuesti proovimise ja tagasilükkamise loogikas, milles puudub juhuslikkus.

Masinõppe mudelid uurivad protsessori, ajastamise ja ressursikasutuse mustreid, et märgistada protsesse, mis põletavad tsükleid edasi liikumata. See aitab operaatoritel tuvastada reaalajas takistusi varem kui fikseeritud lävendite saavutamisel, eriti suurte pilve- ja andmekeskuste töökoormuste puhul, kus on palju omavahel suhtlevaid protsesse.

Jah. GitHub Copilot saab soovitada juhuslikke taganemis-, ajalõpu- ja järjepidevaid lukustusjärjekorra mustreid, mis vähendavad nii reaalajas lukustuse kui ka ummikseisu riski. Arendajad peaksid siiski loodud samaaegsuse loogikat hoolikalt üle vaatama, kuna peeneid ajastusvigu on lihtne märkamata jätta.

Mõnikord. Kui ajastus nihkub – näiteks juhuslike uuesti proovimise intervallide tõttu – võivad protsessid mustri katkestada ja jätkata. Ilma selliste muudatusteta võib reaalajas lukustus püsida lõputult, raiskades protsessorit, samal ajal kui ükski protsess oma ülesannet ei lõpeta.

Võta see postitus kokku järgmiselt: