dødvande i Operating System: Hvad er, cirkulær ventetid (eksempler)

⚡ Smart opsummering

En dødvande i et operativsystem opstår, når et sæt processer blokeres, fordi hver processer indeholder en ressource og venter på en anden, som en anden proces indeholder. Dette skaber en cirkulær kæde, hvor ingen proces kan fortsætte.

  • 🔒 Definition: En dødvande fastfryser processer, der hver især indeholder en ressource, mens de venter på hinanden.
  • 🧩 Fire betingelser: Gensidig udelukkelse, hold og wait, ingen præemption og cirkulær wait skal alle holde sammen.
  • 🔁 Cirkulær ventetid: Processer danner en lukket kæde, hvor hver processer venter på en ressource, der besiddes af den næste.
  • 🛡️ Forebyggelse: Hvis en af ​​de fire betingelser brydes, forhindres der dannelsen af ​​en fastlåst situation.
  • 🏦 Undgåelse: Bankerens algoritme kontrollerer ressourceanmodninger for at holde systemet i en sikker tilstand.
  • 🤖 AI-vinkel: Maskinlæring registrerer deadlock-mønstre, og Copilot hjælper med at skrive og gennemgå låsekode.

dødvande i Operating System

Hvad er Deadlock?

deadlock er en situation, der opstår i en operativsystem når en proces går i ventetilstand, fordi en anden ventende proces holder den efterspurgte ressource. Deadlock er et almindeligt problem i multiprocessering, hvor flere processer deler en bestemt type gensidigt udelukkende ressource kendt som en soft lock eller software lock.

Når der opstår en fastlåst situation, kan ingen af ​​de involverede processer fortsætte, så det berørte arbejde stopper, indtil operativsystemet griber ind.

Eksempel på dødvande

  • Et eksempel fra den virkelige verden ville være trafik, der kun kører i én retning.
  • Her betragtes en bro som en ressource.
  • Så når der opstår en fastlåst situation, kan den løses, hvis én bil bakker (foregriber ressourcer og ruller tilbage).
  • Flere biler skal muligvis bakkes op, hvis der opstår dødvande.
  • Så sult er mulig.

Eksempel på dødvande

Eksempel på dødvande

Hvad er cirkulær ventetid?

En proces venter på en ressource, der holdes af en anden proces, som også venter på en ressource, der holdes af en tredje proces, og så videre. Dette fortsætter, indtil den sidste proces venter på en ressource, der holdes af den første proces. Dette skaber en cirkulær kæde.

For eksempel tildeles proces A ressource B, mens den anmoder om ressource A. På samme måde tildeles proces B ressource A, mens den anmoder om ressource B. Dette skaber en cirkulær venteløkke.

Eksempel på cirkulær ventetid

For eksempel har en computer tre USB-drev og tre processer. Hver af de tre processer indeholder et af USB-drevene. Så når hver proces anmoder om et andet drev, når de tre processer en fastlåst situation, da hver enkelt venter på, at et USB-drev frigives, mens det stadig er i brug. Dette resulterer i en cirkulær kæde.

Eksempel på cirkulær ventetid

Cirkulær venteeksempel

Deadlock Detection i OS

En fastlåsning kan registreres af ressourceplanlæggeren. En ressourceplanlægger hjælper operativsystemet med at holde track af alle de ressourcer, der er allokeret til forskellige processer. Når en fastlåst situation er registreret, kan den løses ved at forudgå ressourcer, rulle en proces tilbage eller afslutte en eller flere af de fastlåste processer.

Deadlock-forebyggelse i OS

Det er vigtigt at forhindre en fastlåsning, før den kan opstå. Systemet kontrollerer hver transaktion, før den udføres, for at sikre, at den ikke fører til en fastlåsning. Selv en lille operation, der kan forårsage en fastlåsning i fremtiden, må aldrig udføres.

Forebyggelse af dødvande er et sæt af metoder til at sikre, at mindst én af de fire nødvendige betingelser ikke kan være opfyldt.

Ingen undtagelse

En ressource kan kun frigives frivilligt af den proces, der holder den, efter at processen har afsluttet sin opgave.

  • Hvis en proces, der indeholder ressourcer, anmoder om en anden ressource, der ikke umiddelbart kan allokeres til den, frigives alle dens ressourcer.
  • Forudbestemte ressourcer føjes til listen over ressourcer, som processen venter på.
  • Processen genstartes kun, når den kan genvinde sine gamle ressourcer såvel som de nye, den anmoder om.

Gensidig udelukkelse

Mutual Exclusion er den fulde form af Mutex. Det er en særlig type binær kode. semafor der bruges til at kontrollere adgang til en delt ressource. Den inkluderer en prioritetsarvsmekanisme for at undgå langvarige problemer med prioritetsinversion og holder opgaver med højere prioritet blokeret i kortest mulig tid.

Delte ressourcer som skrivebeskyttede filer fører aldrig til fastlåste situationer, men ressourcer som printere og båndstationer kræver eksklusiv adgang via en enkelt proces.

Hold og vent

I denne tilstand skal processer stoppes fra at holde en eller flere ressourcer, mens de samtidig venter på en eller flere andre.

Cirkulær Vent

Denne metode pålægger en samlet rækkefølge af alle ressourcetyper. Forebyggelse af cirkulær ventetid kræver også, at hver proces anmoder om ressourcer i en stigende rækkefølge efter optælling.

Undgåelse af dødvande Algorithms

Det er bedre at undgå en fastlåst situation i stedet for at handle, efter den er opstået. Undgåelse kræver yderligere information, f.eks. hvordan ressourcerne vil blive brugt. Undgåelse af fastlåst situation er en nyttig model, hvor hver proces deklarerer det maksimale antal ressourcer af hver type, som den måtte have brug for.

Undgåelse Algorithms

Algoritmen til undgåelse af deadlock vurderer dynamisk ressourceallokeringstilstanden, så en cirkulær ventesituation aldrig kan opstå.

For en enkelt forekomst af en ressourcetype:

  • Brug en ressourceallokeringsgraf.
  • En cyklus i grafen er nødvendig og tilstrækkelig for en dødvande.

For flere forekomster af en ressourcetype:

  • En cyklus er nødvendig, men ikke tilstrækkelig til en fastlåst situation.
  • Brug Bankmandens algoritme.

Forskellen mellem sult og dødvande

Her er nogle vigtige forskelle mellem dødvande og sult:

deadlock Sult
En dødvandesituation opstår, når en af ​​processerne blokeres. Sult er en situation, hvor alle lavprioriterede processer blokeres, mens højprioriterede processer udføres.
Deadlock er en uendelig proces. Sult er en lang ventetid, men ikke en uendelig proces.
Enhver dødvande har altid sult. Enhver sult har ikke nødvendigvis en fastlåst situation.
Dødlåsning opstår på grund af gensidig udelukkelse, hold og vent, ingen præemption og cirkulær vent, der forekommer samtidig. Det sker på grund af ukontrolleret prioritering og dårlig ressourcestyring.

Fordele ved Deadlock

Her er fordelene ved at bruge metoden til håndtering af fastlåste situationer:

  • Denne situation fungerer godt for processer, der udfører et enkelt aktivitetsudbrud.
  • Der kræves ingen præemption ved fastlåsning.
  • Det er en bekvem metode, når den anvendes på ressourcer, hvis tilstand nemt kan gemmes og gendannes.
  • Det er muligt at håndhæve via kontroller under kompilering.
  • Det kræver ingen runtime-beregning, da problemet løses i systemdesignet.

Ulemper ved Deadlock

Her er ulemperne ved at bruge metoden til håndtering af fastlåste situationer:

  • Det forsinker processens igangsættelse.
  • Processer skal kende deres fremtidige ressourcebehov på forhånd.
  • Den forebygger oftere end nødvendigt.
  • Det tillader ikke inkrementelle ressourceanmodninger.
  • Det har iboende præemptionstab.

Ofte Stillede Spørgsmål

En fastlåsning kræver, at fire Coffman-betingelser gælder samtidig: gensidig udelukkelse, hold og vent, ingen præemption og cirkulær vent. Fjernelse af en enkelt af disse betingelser forhindrer dannelsen af ​​en fastlåsning.

Forebyggelse fjerner en af ​​de fire betingelser på forhånd, så der aldrig kan opstå en fastlåsning. Undgåelse tillader betingelserne, men bruger runtime-kontroller, såsom Bankmandens algoritme, for at holde systemet i en sikker tilstand.

I en fastlåst situation stopper blokerede processer fuldstændigt og ændrer aldrig tilstand. livelock, processer bliver ved med at ændre tilstand og bruge CPU'en, men gør stadig ingen fremskridt. Livelock er et særligt tilfælde af ressourcemangel.

De fleste generelle systemer, herunder Windows og Linux, brug strudsalgoritmen og ignorer simpelthen sjældne fastlåste situationer, fordi forebyggelse er dyrt. Databaser og realtidssystemer kører i stedet aktive detektions- og gendannelsesrutiner.

En ressourceallokeringsgraf kortlægger processer og ressourcer som noder forbundet af anmodnings- og tildelingskanter. En cyklus i grafen signalerer en mulig fastlåsning; med ressourcer med én instans betyder en cyklus altid, at der er en fastlåsning.

Nej. En ægte fastlåsning er permanent, fordi de blokerede processer aldrig frigiver deres ressourcer af sig selv. Operativsystemet skal bryde den ved at forudgå en ressource, rulle tilbage eller afslutte en af ​​processerne.

Maskinlæringsmodeller lærer mønstre for ressourceanmodninger for at forudsige og markere fastlåste situationer, før de opstår. AI-planlæggere kan omarrangere anmodninger eller justere låsepolitikker, hvilket er nyttigt i databaser, cloudplatforme og distribuerede systemer.

Ja. GitHub Copilot kan spotte risikabel låserækkefølge, foreslå ensartet låseregistrering og generere tests, der afslører deadlocks. Behandl outputtet som en første gennemgang og verificer stadig samtidighedslogik med de korrekte analyseværktøjer.

Opsummer dette indlæg med: