Livelock: Mikä on esimerkki, ero umpikujaan

Mikä on Livelock?

A livelock on tilanne, jossa eksklusiivisen lukon pyyntö evätään toistuvasti, koska monet päällekkäiset jaetut lukot häiritsevät jatkuvasti toisiaan. Prosessit muuttavat jatkuvasti tilaansa, mikä edelleen estää niitä suorittamasta tehtävää. Tämä estää edelleen heitä suorittamasta tehtävää.

Esimerkkejä Livelockista

Esimerkki 1:

Helpoin esimerkki Livelockista olisi kaksi henkilöä, jotka kohtaavat kasvokkain käytävällä, ja molemmat siirtyvät sivuun päästääkseen toisen ohi. Ne päätyvät liikkumaan puolelta toiselle edistymättä, koska ne liikkuvat samalla tavalla sillä hetkellä. Täällä he eivät koskaan ristiä toisiaan.

Esimerkki 2:

Esimerkkejä Livelockista

Yllä olevasta kuvasta näet, että kumpikin kahdesta annetusta prosessista tarvitsee kaksi resurssia, ja ne käyttävät primitiivistä kyselyä enter-rekisteriin yrittääkseen hankkia niille tarvittavat lukot. Jos yritys epäonnistuu, menetelmä toimii uudelleen.

  1. Käsittele A, pidä Y resurssi
  2. Prosessi B sisältää resurssin X
  3. Prosessi A vaatii X-resurssin
  4. Prosessi B vaatii Y-resurssia

Olettaen, että prosessi A suoritetaan ensin ja hankkii tietoresurssin X ja sitten prosessi B suorittaa ja hankkii resurssin Y riippumatta siitä, mikä prosessi suoritetaan ensin, mikään niistä ei edisty.

Kumpaakaan prosessista ei kuitenkaan ole estetty. Ne kuluttavat suorittimen resursseja toistuvasti ilman mitään edistystä, mutta myös pysäyttävät kaikki käsittelylohkot.

Siksi tämä tilanne ei ole a umpikuja koska ei ole ainuttakaan estettyä prosessia, vaan kohtaamme tilanteen jotain, joka vastaa umpikujaa, joka on LIVELOCK.

Mikä johtaa Livelockiin?

Livelock tapahtuu, kun tietyn järjestelmän sallittujen prosessien kokonaismäärä määritetään prosessitaulukon merkintöjen kokonaismäärällä. Siksi prosessitaulukon paikkoja tulisi kutsua rajallisiksi resursseiksi.

Mikä on umpikuja?

Lukitus on tilanne, joka tapahtuu käyttöjärjestelmässä, kun mikä tahansa prosessi siirtyy odotustilaan, koska toinen odotusprosessi pitää sisällään vaaditun resurssin. Lukitus on yleinen ongelma monikäsittelyssä, jossa useat prosessit jakavat tietyn tyyppisen toisensa poissulkevan resurssin, joka tunnetaan pehmeänä lukituksena tai ohjelmistona.

Esimerkki umpikujasta

  • Tosimaailman esimerkki olisi liikenne, joka kulkee vain yhteen suuntaan.
  • Tässä siltaa pidetään resurssina.
  • Joten, kun lukkiutumista tapahtuu, se voidaan helposti ratkaista, jos yksi auto peruuttaa (Ennalta resurssit ja palautus).
  • Useita autoja voidaan joutua peruuttamaan, jos lukkiutumista tapahtuu.
  • Nälkä on siis mahdollista.
Esimerkki umpikujasta
Esimerkki umpikujasta

Mitä on nälkä?

Nälkä on tilanne, jossa kaikki matalan prioriteetin prosessit tukkeutuivat ja korkean prioriteetin prosessit etenevät. Missä tahansa järjestelmässä korkean/matalan prioriteetin resurssien pyynnöt jatkuvat dynaamisesti. Tästä syystä tietyt käytännöt edellyttävät sen päättämiseksi, kuka saa tukea milloin.

Joitakin algoritmeja käytettäessä jotkin prosessit eivät välttämättä saa haluttua huoltoa, vaikka ne eivät ole umpikujassa. Nälkä tapahtuu, kun jotkin säikeet tekevät jaetut resurssit poissa käytöstä pitkäksi aikaa.

Esimerkki nälkään

Esimerkiksi objekti tarjoaa synkronoidun menetelmän, jonka palauttaminen kestää todennäköisesti kauan. Jos yksi säie käyttää tätä menetelmää usein, muut säikeet, jotka myös tarvitsevat usein synkronoitua pääsyä samaan objektiin, estetään usein.

Ero Deadlockin, Starvationin ja Livelockin välillä

  • Lukitus on tilanne, joka tapahtuu käyttöjärjestelmässä, kun mikä tahansa prosessi siirtyy odotustilaan, koska vaadittu resurssi on toisen odotusprosessin hallussa.
  • Livelock sen sijaan on melkein samanlainen kuin umpikuja, paitsi että livelockiin liittyvien prosessien tilat muuttuvat aina toisikseen, mikään ei edisty.
  • Joten Livelock on ainutlaatuinen tapaus resurssien nälkään.

Yhteenveto

  • Määritelmä: Livelock on tilanne, jossa yksinomaisen lukon pyyntö evätään toistuvasti, koska monet päällekkäiset jaetut lukot häiritsevät jatkuvasti toisiaan.
  • Livelock tapahtuu, kun tietyn järjestelmän sallittujen prosessien kokonaismäärä määritetään prosessitaulukon merkintöjen kokonaismäärällä
  • Lukitus on tilanne, joka tapahtuu käyttöjärjestelmässä, kun mikä tahansa prosessi siirtyy odotustilaan, koska toinen odotusprosessi pitää sisällään vaaditun resurssin.
  • Tosimaailman esimerkki olisi liikenne, joka kulkee vain yhteen suuntaan.
  • Esimerkki Livelockista olisi kaksi ihmistä, jotka kohtaavat kasvokkain käytävällä, ja molemmat siirtyvät sivuun päästääkseen toisen ohi.
  • Nälkä on tilanne, jossa kaikki matalan prioriteetin prosessit tukkeutuivat ja korkean prioriteetin prosessit etenevät.