Livelock: Wat is, voorbeeld, verschil met deadlock

โšก Slimme samenvatting

Livelock is een situatie van gelijktijdigheid waarbij processen voortdurend van status veranderen als reactie op elkaar, maar geen echte vooruitgang boeken. Ze blijven actief en verbruiken CPU-cycli zonder ooit hun taken te voltooien of geblokkeerd te raken.

  • ๐Ÿ” Definitie: Een livelock treedt op wanneer processen constant van toestand veranderen om elkaar tegemoet te komen, maar nooit vooruitgang boeken, in tegenstelling tot de bevroren processen bij een deadlock.
  • ๐Ÿšถ Voorbeeld: Twee mensen stappenping Zijwaarts bewegen in een gang om elkaar te laten passeren illustreert een vergrendeling, waarbij men continu in beweging is maar elkaar nooit kruist.
  • ๐Ÿงฎ Oorzaak: Het herhaaldelijk opvragen en opnieuw proberen van vergrendelingen, beperkt door het eindige aantal beschikbare plaatsen in de procestabel, drijft processen in een livelock zonder dat een van hen blokkeert.
  • โ€‹ Vergelijking: Een deadlock bevriest processen, starvation onthoudt processen onbeperkt toegang tot resources, en een livelock houdt processen bezig zonder dat er vooruitgang wordt geboekt.
  • ๐Ÿ›ก๏ธ preventie: Willekeurige backoff, herhalingslimieten en prioriteitsvolgorde doorbreken de symmetrische herhalingspogingen die een livelock veroorzaken.
  • ๐Ÿค– AI-hoek: Machine learning signaleert CPU-patronen zonder voortgang, en Copilot helpt bij het schrijven van backoff- en lock-ordering-code die livelock voorkomt.

Livelock in Operating-systeem

Wat is Livelock?

A livelock Dit is een situatie waarbij een verzoek om een โ€‹โ€‹exclusieve vergrendeling herhaaldelijk wordt afgewezen, omdat veel verzoeken elkaar overlappen.ping Gedeelde vergrendelingen blijven elkaar in de weg zitten. De processen veranderen voortdurend van status, waardoor ze de taak niet kunnen voltooien.

Voorbeelden van Livelock

Voorbeeld 1:

Het eenvoudigste voorbeeld van Livelock is twee mensen die elkaar in een gang tegenkomen en allebei opzij gaan om de ander te laten passeren. Ze blijven heen en weer bewegen zonder vooruitgang te boeken, omdat ze steeds dezelfde kant op bewegen. In dit geval kruisen ze elkaar nooit.

Voorbeeld 2:

Voorbeelden van Livelock in Operating-systeem

In de bovenstaande afbeelding heeft elk van de twee processen twee resources nodig en gebruiken ze primitieve polling om te proberen de benodigde vergrendelingen te verkrijgen. Als een poging mislukt, probeert de methode het opnieuw.

  1. Proces A bevat hulpbron Y
  2. Proces B bevat bron X
  3. Proces A vereist hulpbron X
  4. Proces B vereist hulpbron Y.

Stel dat proces A eerst wordt uitgevoerd en grondstof X verkrijgt, en vervolgens proces B wordt uitgevoerd en grondstof Y verkrijgt. Ongeacht welk proces eerst wordt uitgevoerd, geen van beide boekt verdere vooruitgang.

Geen van beide processen wordt echter geblokkeerd. Ze verbruiken herhaaldelijk CPU-bronnen zonder enige vooruitgang te boeken, maar ze stoppen nooit voor een verwerkingsblok.

Daarom is deze situatie geen impasseOmdat er geen enkel proces geblokkeerd is, hebben we te maken met een situatie die gelijkwaardig is aan een deadlock, ook wel LIVELOCK genoemd.

Wat leidt tot Livelock?

Livelock is gekoppeld aan het aantal processen dat een systeem toestaat, wat wordt bepaald door het totale aantal vermeldingen in de procestabel. Deze procestabelplaatsen worden daarom beschouwd als eindige resources. Wanneer processen herhaaldelijk proberen deze beperkte resources te bemachtigen en elkaar daarbij voortdurend de toegang ontzeggen, boekt geen enkel proces vooruitgang en raakt het systeem in een livelock.

Wat is Deadlock?

A impasse Een deadlock is een situatie die zich voordoet in een besturingssysteem wanneer een proces in een wachttoestand terechtkomt omdat een ander wachtend proces de gevraagde bron in bezit heeft. Deadlock is een veelvoorkomend probleem in multiprocessing, waar meerdere processen een specifiek type wederzijds exclusieve bron delen, bekend als een soft lock of software lock.

Voorbeeld van een deadlock

  • Een voorbeeld uit de praktijk is verkeer dat slechts in รฉรฉn richting rijdt.
  • Hier wordt een brug als een hulpbron beschouwd.
  • Als er een impasse optreedt, kan deze eenvoudig worden opgelost als รฉรฉn auto achteruitrijdt (resources preempt) en terugdraait.
  • Als er een file ontstaat, moeten er mogelijk meerdere auto's achteruitrijden.
  • Daarom is hongersnood mogelijk.

Voorbeeld van een impasse in Operating-systeem

Voorbeeld van een deadlock

Wat is honger?

Uithongering is een situatie waarbij processen met een lage prioriteit worden geblokkeerd terwijl processen met een hoge prioriteit wel doorgaan. In elk systeem vinden er continu dynamisch aanvragen voor resources met hoge en lage prioriteit plaats. Daarom is een beleid nodig om te bepalen wie wanneer wordt geholpen.

Bij sommige algoritmen krijgen bepaalde processen mogelijk niet de gewenste service, zelfs als er geen sprake is van een deadlock. Starvation treedt op wanneer sommige threads gedeelde resources gedurende een lange periode ontoegankelijk maken.

Voorbeeld van hongersnood

Een object biedt bijvoorbeeld een gesynchroniseerde methode aan die waarschijnlijk lang duurt om terug te keren. Als รฉรฉn thread deze methode frequent gebruikt, worden andere threads die ook frequent gesynchroniseerde toegang tot hetzelfde object nodig hebben, vaak geblokkeerd.

Verschil tussen deadlock, honger en livelock

  • Een deadlock is een situatie die zich voordoet in een besturingssysteem wanneer een proces in een wachttoestand terechtkomt omdat de gevraagde bron in bezit is van een ander wachtend proces.
  • Een livelock is daarentegen vrijwel gelijk aan een deadlock, met als verschil dat de toestanden van de processen die bij een livelock betrokken zijn, voortdurend veranderen als reactie op elkaar, zonder dat er vooruitgang wordt geboekt.
  • Livelock is dus een uniek geval van resource-uitputting.

Veelgestelde vragen

Livelock wordt verminderd door willekeurigheid of een bepaalde volgorde toe te voegen aan herhaalpogingen. Technieken hiervoor zijn onder andere gerandomiseerde of exponentiรซle backoff vรณรณr een herhaalpoging, capping het aantal herhaalpogingen en het afdwingen van een vaste volgorde voor het verkrijgen van vergrendelingen, zodat processen elkaars bewegingen niet langer kopiรซren.

Nee. Processen die in een livelock verwikkeld zijn, worden nooit geblokkeerd; ze blijven draaien en verbruiken CPU-cycli door voortdurende herhaalpogingen zonder vooruitgang te boeken. Bij een deadlock stoppen de betrokken processen en wachten, waardoor ze de CPU niet gebruiken.

Vaak wel. Vastgelopen processen blijven bevroren, wat gemakkelijk te herkennen is, terwijl vastgelopen processen actief blijven en hun status voortdurend wijzigen. Detectie vindt meestal plaats door te kijken naar een hoog CPU-gebruik in combinatie met geen enkele voortgang in de loop van de tijd.

Een raceconditie is een onjuist of onvoorspelbaar resultaat dat wordt veroorzaakt door niet-gesynchroniseerde toegang tot gedeelde gegevens. Livelock daarentegen betreft processen die actief blijven en voortdurend van status veranderen als reactie op elkaar, zonder ooit hun werk te voltooien.

Ja. Threads die herhaaldelijk op elkaar reageren โ€” bijvoorbeeld door tegelijkertijd een vergrendeling vrij te geven en opnieuw aan te vragen โ€” kunnen vastlopen zonder ooit te blokkeren. Dit komt vaak voor in herhalings- en terugvalmechanismen die geen willekeurigheid bevatten.

Machine learning-modellen analyseren CPU-, plannings- en resourcegebruikspatronen om processen te signaleren die veel processorkracht verbruiken zonder vooruitgang te boeken. Dit helpt beheerders om vastlopende processen eerder te detecteren dan met vaste drempelwaarden, met name in grote cloud- en datacenteromgevingen met veel onderling verbonden processen.

Ja. GitHub Copilot kan suggesties doen voor willekeurige backoff-tijden, time-outs en consistente lock-ordering-patronen die het risico op livelocks en deadlocks verlagen. Ontwikkelaars moeten de gegenereerde concurrency-logica echter nog steeds zorgvuldig controleren, omdat subtiele timingfouten gemakkelijk over het hoofd gezien kunnen worden.

Soms. Als de timing verandert โ€” bijvoorbeeld door willekeurige herhalingsintervallen โ€” kunnen processen het patroon doorbreken en doorgaan. Zonder dergelijke veranderingen kan een livelock oneindig blijven bestaan, waardoor CPU-kracht wordt verspild terwijl geen enkel proces zijn taak voltooit.

Vat dit bericht samen met: