Doodlopende weg Operating-systeem: wat is, circulair wachten (voorbeelden)

โšก Slimme samenvatting

Een deadlock in een besturingssysteem treedt op wanneer een reeks processen geblokkeerd raakt doordat elk proces een resource bezet houdt en wacht op een andere resource die door een ander proces wordt bezet. Dit creรซert een vicieuze cirkel waarin geen enkel proces verder kan.

  • ๐Ÿ”’ Definitie: Een deadlock bevriest processen die elk een resource vasthouden terwijl ze op elkaar wachten.
  • ๐Ÿงฉ Vier voorwaarden: Wederzijdse uitsluiting, vasthouden en wachten, geen voorrang en circulair wachten moeten allemaal tegelijkertijd gelden.
  • ๐Ÿ” Cirkelvormig wachten: Processen vormen een gesloten keten, waarbij elk proces wacht op een hulpbron die door het volgende proces wordt beheerd.
  • ๐Ÿ›ก๏ธ preventie: Het schenden van een van de vier voorwaarden voorkomt dat er een patstelling ontstaat.
  • ๐Ÿฆ vermijden: Het algoritme van de bankier controleert resourceaanvragen om het systeem in een veilige staat te houden.
  • ๐Ÿค– AI-hoek: Machine learning detecteert deadlockpatronen en Copilot helpt bij het schrijven en controleren van vergrendelingscode.

Doodlopende weg Operating-systeem

Wat is Deadlock?

impasse is een situatie die zich voordoet in een besturingssysteem Een deadlock treedt op 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, waarbij meerdere processen een specifiek type wederzijds exclusieve bron delen, bekend als een soft lock of software lock.

Wanneer er een deadlock optreedt, kan geen van de betrokken processen verdergaan, waardoor de betreffende werkzaamheden stoppen totdat het besturingssysteem ingrijpt.

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.
  • Dus, wanneer er een impasse optreedt, kan deze worden opgelost als รฉรฉn auto achteruitrijdt (resources reserveert en terugdraait).
  • Als er een file ontstaat, moeten er mogelijk meerdere auto's achteruitrijden.
  • Hongersnood is dus mogelijk.

Voorbeeld van een deadlock

Voorbeeld van een deadlock

Wat is Circulair wachten?

Een proces wacht op een resource die in bezit is van een tweede proces, dat op zijn beurt wacht op een resource die in bezit is van een derde proces, enzovoort. Dit gaat door totdat het laatste proces wacht op een resource die in bezit is van het eerste proces. Dit creรซert een circulaire keten.

Een voorbeeld hiervan is dat proces A resource B toegewezen krijgt terwijl het resource A aanvraagt. Op dezelfde manier krijgt proces B resource A toegewezen terwijl het resource B aanvraagt. Dit creรซert een circulaire wachtlus.

Voorbeeld van circulair wachten

Een computer heeft bijvoorbeeld drie USB-drives en drie processen. Elk van de drie processen gebruikt รฉรฉn van de USB-drives. Wanneer een proces een andere drive aanvraagt, ontstaat er een impasse, omdat elk proces wacht tot een USB-drive wordt vrijgegeven terwijl deze nog in gebruik is. Dit resulteert in een vicieuze cirkel.

Voorbeeld van circulair wachten

Voorbeeld circulair wachten

Deadlockdetectie in besturingssysteem

Een deadlock kan worden gedetecteerd door de resourceplanner. Een resourceplanner helpt het besturingssysteem om een โ€‹โ€‹deadlock te voorkomen. track van alle resources die aan verschillende processen zijn toegewezen. Zodra een deadlock wordt gedetecteerd, kan deze worden opgelost door resources te onderbreken, een proces terug te draaien of een of meer van de vastgelopen processen te beรซindigen.

Deadlockpreventie in besturingssystemen

Het is belangrijk om een โ€‹โ€‹deadlock te voorkomen voordat deze zich kan voordoen. Het systeem controleert elke transactie voordat deze wordt uitgevoerd om er zeker van te zijn dat deze niet tot een deadlock leidt. Zelfs een kleine bewerking die in de toekomst een deadlock zou kunnen veroorzaken, wordt nooit toegestaan โ€‹โ€‹om te worden uitgevoerd.

Het voorkomen van een impasse is een reeks methoden om ervoor te zorgen dat ten minste รฉรฉn van de vier noodzakelijke voorwaarden niet kan worden vervuld.

Geen voorkoop

Een resource kan alleen vrijwillig worden vrijgegeven door het proces dat deze vasthoudt, nadat dat proces zijn taak heeft voltooid.

  • Als een proces dat resources bezet houdt, een andere resource aanvraagt โ€‹โ€‹die niet direct kan worden toegewezen, worden al zijn resources vrijgegeven.
  • Gepreรซmpteerde resources worden toegevoegd aan de lijst met resources waarop het proces wacht.
  • Het proces wordt pas opnieuw gestart wanneer het zowel de oude als de nieuwe resources die het aanvraagt, weer tot zijn beschikking heeft.

Wederzijdse uitsluiting

Mutual Exclusion is de volledige naam van Mutex. Het is een speciaal type binair systeem. seinpaal Dit wordt gebruikt om de toegang tot een gedeelde bron te beheren. Het omvat een mechanisme voor prioriteitsovererving om problemen met langdurige prioriteitsinversie te voorkomen en zorgt ervoor dat taken met een hogere prioriteit zo kort mogelijk geblokkeerd blijven.

Gedeelde resources zoals alleen-lezen bestanden leiden nooit tot deadlocks, maar resources zoals printers en tapedrives vereisen exclusieve toegang door รฉรฉn enkel proces.

Vasthouden en wachten

In deze situatie moeten processen worden gestopt die รฉรฉn of meer resources in beslag nemen terwijl ze tegelijkertijd wachten op รฉรฉn of meer andere resources.

Circulair wachten

Deze methode legt een totale ordening op van alle resourcetypen. Om circulaire wachttijden te voorkomen, moet elk proces resources aanvragen in een oplopende volgorde van nummering.

Impasse vermijden Algorithms

Het is beter om een โ€‹โ€‹impasse te voorkomen dan actie te ondernemen nadat deze zich heeft voorgedaan. Voorkomen vereist aanvullende informatie, zoals hoe de resources zullen worden gebruikt. Het voorkomen van impasses is een nuttig model waarbij elk proces het maximale aantal resources van elk type declareert dat het mogelijk nodig heeft.

Vermijding Algorithms

Het algoritme ter voorkoming van deadlocks beoordeelt dynamisch de status van de resource-allocatie, zodat een situatie met een oneindige wachtlus nooit kan ontstaan.

Voor รฉรฉn instantie van een resourcetype:

  • Gebruik een resource-allocatiegrafiek.
  • Een cyclus in de grafiek is noodzakelijk en voldoende voor een deadlock.

Voor meerdere instanties van een bepaald resourcetype:

  • Een cyclus is noodzakelijk, maar niet voldoende voor een impasse.
  • Gebruik de Bankiersalgoritme.

Verschil tussen hongersnood en impasse

Hieronder volgen enkele belangrijke verschillen tussen een impasse en uithongering:

impasse uithongering
Een impasse treedt op wanneer een van de processen vastloopt. Uithongering is een situatie waarbij alle processen met lage prioriteit worden geblokkeerd terwijl de processen met hoge prioriteit worden uitgevoerd.
Deadlock is een oneindig proces. Hongersnood is een lange wachttijd, maar geen oneindig proces.
Bij elke impasse is er sprake van uithongering. Niet elke hongersnood leidt noodzakelijkerwijs tot een impasse.
Een impasse ontstaat doordat wederzijdse uitsluiting, vasthouden en wachten, geen voorrang en een circulaire wachttoestand tegelijkertijd optreden. Dit komt door ongecontroleerde prioriteiten en slecht resourcebeheer.

Voordelen van Deadlock

Hieronder volgen de voordelen van het gebruik van de deadlock-afhandelingsmethode:

  • Deze situatie werkt goed voor processen die eenmalig een korte, intense activiteit uitvoeren.
  • Voor een deadlock is geen preรซmptie nodig.
  • Het is een handige methode wanneer deze wordt toegepast op resources waarvan de status eenvoudig kan worden opgeslagen en hersteld.
  • Het is mogelijk om dit af te dwingen via controles tijdens het compileren.
  • Er is geen berekening tijdens de uitvoering nodig, aangezien het probleem al in het systeemontwerp is opgelost.

Nadelen van Deadlock

Hieronder volgen de nadelen van het gebruik van de deadlock-afhandelingsmethode:

  • Het vertraagt โ€‹โ€‹de start van het proces.
  • Processen moeten hun toekomstige resourcebehoeften van tevoren kennen.
  • Het voorkomt vaker problemen dan nodig is.
  • Het staat geen incrementele resourceaanvragen toe.
  • Het kent inherente verliezen als gevolg van voorkooprecht.

Veelgestelde vragen

Een deadlock vereist dat vier Coffman-voorwaarden tegelijkertijd gelden: wederzijdse uitsluiting, vasthouden en wachten, geen voorrang en circulair wachten. Het wegnemen van รฉรฉn van deze voorwaarden voorkomt dat er een deadlock ontstaat.

Preventie verwijdert รฉรฉn van de vier voorwaarden vooraf, zodat er nooit een deadlock kan ontstaan. Vermijding staat de voorwaarden toe, maar maakt gebruik van runtime-controles, zoals de Bankiersalgoritmeom het systeem in een veilige staat te houden.

Bij een deadlock stoppen geblokkeerde processen volledig en veranderen ze nooit meer van status. livelockProcessen blijven van status veranderen en de CPU gebruiken, maar boeken geen vooruitgang. Livelock is een speciaal geval van resource-starvation (uitputting van resources).

De meeste universele systemen, waaronder Windows Linux gebruikt het struisvogelalgoritme en negeert zeldzame deadlocks, omdat preventie kostbaar is. Databases en realtime-systemen daarentegen voeren actieve detectie- en herstelprocedures uit.

Een resourceallocatiegrafiek brengt processen en resources in kaart als knooppunten die met elkaar verbonden zijn door aanvraag- en toewijzingsranden. Een cyclus in de grafiek duidt op een mogelijke deadlock; bij resources die slechts รฉรฉn instantie hebben, betekent een cyclus altijd dat er een deadlock bestaat.

Nee. Een echte deadlock is permanent, omdat de geblokkeerde processen hun resources nooit zelf vrijgeven. Het besturingssysteem moet de deadlock verbreken door een resource te reserveren, een bewerking terug te draaien of een van de processen te beรซindigen.

Machine learning-modellen leren patronen in resourceaanvragen om deadlocks te voorspellen en te signaleren voordat ze zich voordoen. AI-planners kunnen aanvragen herordenen of vergrendelingsbeleid aanpassen, wat nuttig is in databases, cloudplatforms en gedistribueerde systemen.

Ja. GitHub Copilot kan risicovolle volgordes van vergrendelingen detecteren, consistente vergrendelingsverwerving voorstellen en tests genereren die deadlocks aan het licht brengen. Beschouw de output als een eerste controle en verifieer de gelijktijdigheidslogica nog steeds met geschikte analysetools.

Vat dit bericht samen met: