Livelock: Wat is, voorbeeld, verschil met deadlock

Wat is Livelock?

A livelock is een situatie waarin een verzoek om een ​​exclusieve vergrendeling herhaaldelijk wordt afgewezen, omdat veel overlappende gedeelde vergrendelingen elkaar blijven hinderen. De processen blijven hun status veranderen, waardoor ze de taak verder niet kunnen voltooien. Dit verhindert verder dat ze de taak voltooien.

Voorbeelden van Livelock

Voorbeeld 1:

Een eenvoudig voorbeeld van Livelock is dat twee mensen elkaar persoonlijk ontmoeten in een gang, en beiden opzij gaan om de ander te laten passeren. Uiteindelijk bewegen ze heen en weer zonder enige vooruitgang te boeken, aangezien ze op dat moment dezelfde kant op bewegen. Hier kruisen ze elkaar nooit.

Voorbeeld 2:

Voorbeelden van Livelock

Je kunt in de bovenstaande afbeelding zien dat elk van de twee gegeven processen twee bronnen nodig heeft, en ze gebruiken het primitieve polling-invoerregister om te proberen de vergrendelingen te verkrijgen die daarvoor nodig zijn. Als de poging mislukt, werkt de methode opnieuw.

  1. Verwerk een vastgehouden Y-bron
  2. Proces B bevat bron X
  3. Proces A vereist X resource
  4. Proces B vereist Y-resource

Ervan uitgaande dat proces A eerst wordt uitgevoerd en gegevensbron X verwerft, en vervolgens proces B wordt uitgevoerd en bron Y verwerft, ongeacht welk proces het eerst wordt uitgevoerd, gaat geen van hen verder.

Geen van beide processen wordt echter geblokkeerd. Ze verbruiken herhaaldelijk CPU-bronnen zonder dat er enige vooruitgang wordt geboekt, maar stoppen ook elk verwerkingsblok.

Deze situatie is dus niet die van a impasse omdat er geen enkel proces geblokkeerd is, maar we worden geconfronteerd met een situatie die vergelijkbaar is met een deadlock, namelijk LIVELOCK.

Wat leidt tot Livelock?

Livelock treedt op wanneer het totale aantal toegestane processen in een specifiek systeem moet worden gedefinieerd door het totale aantal vermeldingen in de procestabel. Daarom moeten procestabelslots eindige hulpbronnen worden genoemd.

Wat is Deadlock?

Een deadlock is een situatie die zich voordoet in OS wanneer een proces een wachtstatus ingaat omdat een ander wachtend proces de gevraagde resource vasthoudt. Deadlock is een veelvoorkomend probleem bij multi-processing waarbij meerdere processen een specifiek type wederzijds exclusieve resource delen, bekend als een soft lock of software.

Voorbeeld van een deadlock

  • Een voorbeeld uit de praktijk is het verkeer, dat slechts in één richting gaat.
  • Hier wordt een brug als een hulpbron beschouwd.
  • Wanneer er een deadlock optreedt, kan dit eenvoudig worden opgelost door een auto achteruit te laten rijden (voorkom hulpbronnen en rol terug).
  • Als er een file ontstaat, moeten er mogelijk meerdere auto's achteruitrijden.
  • Honger is dus mogelijk.
Voorbeeld van een deadlock
Voorbeeld van een deadlock

Wat is honger?

Uithongering is een situatie waarin alle processen met lage prioriteit worden geblokkeerd en processen met hoge prioriteit doorgaan. In elk systeem blijven verzoeken om bronnen met hoge/lage prioriteit dynamisch plaatsvinden. Daarom is er beleid nodig om te bepalen wie wanneer steun krijgt.

Met behulp van sommige algoritmen kunnen sommige processen niet de gewenste service krijgen, ook al zijn ze niet vastgelopen. Starvation treedt op wanneer sommige threads gedeelde resources voor een lange periode onbeschikbaar maken.

Voorbeeld van hongersnood

Bijvoorbeeld, een object biedt een gesynchroniseerde methode die waarschijnlijk lang duurt om terug te keren. Als één thread deze methode vaak gebruikt, worden andere threads die ook frequente gesynchroniseerde toegang tot hetzelfde object nodig hebben, vaak geblokkeerd.

Verschil tussen deadlock, honger en livelock

  • Een deadlock is een situatie die zich in een besturingssysteem voordoet wanneer een proces in een wachtstatus terechtkomt, omdat de gevraagde resource door een ander wachtend proces wordt vastgehouden.
  • Een livelock is daarentegen vrijwel gelijk aan een deadlock, behalve dat de statussen van de processen die bij een livelock betrokken zijn, voortdurend in elkaar overgaan en geen van beide processen vordert.
  • Livelock is dus een uniek geval van uithongering van hulpbronnen.

Samenvatting

  • Definitie: Een Livelock is een situatie waarin een verzoek om een ​​exclusieve vergrendeling herhaaldelijk wordt afgewezen, omdat veel overlappende gedeelde vergrendelingen elkaar blijven hinderen.
  • Livelock treedt op wanneer het totale aantal toegestane processen in een specifiek systeem moet worden gedefinieerd door het totale aantal vermeldingen in de procestabel
  • Een deadlock is een situatie die zich in een besturingssysteem voordoet wanneer een proces in een wachtstatus terechtkomt omdat een ander wachtend proces de gevraagde resource vasthoudt.
  • Een voorbeeld uit de praktijk is het verkeer, dat slechts in één richting gaat.
  • Een voorbeeld van Livelock zijn twee mensen die elkaar persoonlijk ontmoeten in een gang, en beiden opzij gaan om de ander te laten passeren.
  • Uithongering is een situatie waarin alle processen met lage prioriteit worden geblokkeerd en processen met hoge prioriteit doorgaan.