Dödläge in Operating System: Vad är, Circular Wait (exempel)

⚡ Smart sammanfattning

Ett dödläge i ett operativsystem uppstår när en uppsättning processer blockeras eftersom varje processer innehåller en resurs och väntar på en annan som en annan process innehåller, vilket skapar en cirkulär kedja där ingen process kan fortsätta.

  • 🔒 Definition: Ett dödläge fryser processer som var och en innehar en resurs medan de väntar på varandra.
  • 🧩 Fyra villkor: Ömsesidig uteslutning, håll och vänta, ingen förköp och cirkulär väntan måste alla hålla ihop.
  • 🔁 Cirkulär väntan: Processer bildar en sluten kedja, där varje kedja väntar på en resurs som innehas av nästa.
  • 🛡️ Förebyggande: Att bryta mot något av de fyra villkoren förhindrar att ett dödläge uppstår.
  • 🏦 Undvikande: Bankirens algoritm kontrollerar resursförfrågningar för att hålla systemet i ett säkert tillstånd.
  • 🤖 AI-vinkel: Maskininlärning upptäcker dödlägesmönster, och Copilot hjälper till att skriva och granska låskod.

Dödläge in Operating System

Vad är Deadlock?

Dödläge är en situation som uppstår i en operativsystem när en process går in i ett vänteläge eftersom en annan vänteprocess håller den begärda resursen. Dödläge är ett vanligt problem vid multiprocessering, där flera processer delar en specifik typ av ömsesidigt uteslutande resurs som kallas mjuklåsning eller programlåsning.

När ett dödläge uppstår kan ingen av de inblandade processerna fortsätta, så det berörda arbetet avbryts tills operativsystemet ingriper.

Exempel på dödläge

  • Ett verkligt exempel skulle vara trafik som bara går i en riktning.
  • Här betraktas en bro som en resurs.
  • Så när ett dödläge uppstår kan det lösas om en bil backar (föregriper resurser och backar).
  • Flera bilar kan behöva säkerhetskopieras om ett blockerat låsläge uppstår.
  • Så svält är möjlig.

Exempel på dödläge

Exempel på dödläge

Vad är Circular wait?

En process väntar på en resurs som innehas av en andra process, som också väntar på en resurs som innehas av en tredje process, och så vidare. Detta fortsätter tills den sista processen väntar på en resurs som innehas av den första processen. Detta skapar en cirkulär kedja.

Till exempel tilldelas process A resurs B medan den begär resurs A. På samma sätt tilldelas process B resurs A medan den begär resurs B. Detta skapar en cirkulär vänteslinga.

Exempel på cirkulär väntan

Till exempel har en dator tre USB-enheter och tre processer. Var och en av de tre processerna innehåller en av USB-enheterna. Så när varje process begär en annan enhet hamnar de tre processerna i ett dödläge, eftersom var och en väntar på att en USB-enhet ska släppas medan den fortfarande används. Detta resulterar i en cirkulär kedja.

Exempel på cirkulär väntan

Cirkulär vänta exempel

Deadlock Detection i OS

Ett dödläge kan upptäckas av resursschemaläggaren. En resursschemaläggare hjälper operativsystemet att hålla track av alla resurser som är allokerade till olika processer. När ett dödläge upptäcks kan det lösas genom att resurser förbehålls, en process återställs eller en eller flera av de låsta processerna avslutas.

Deadlock Prevention i OS

Det är viktigt att förhindra ett dödläge innan det kan uppstå. Systemet kontrollerar varje transaktion innan den utförs för att säkerställa att den inte leder till ett dödläge. Inte ens en liten operation som skulle kunna orsaka ett dödläge i framtiden tillåts utföras.

Förebyggande av dödlägen är en uppsättning metoder för att säkerställa att minst ett av de fyra nödvändiga villkoren inte kan upprätthållas.

Ingen befrielse

En resurs kan endast frigöras frivilligt av processen som innehar den, efter att processen har slutfört sin uppgift.

  • Om en process som lagrar resurser begär en annan resurs som inte omedelbart kan allokeras till den, frigörs alla dess resurser.
  • Förutbestämda resurser läggs till i listan över resurser som processen väntar på.
  • Processen startas om endast när den kan återfå sina gamla resurser såväl som de nya som den begär.

Ömsesidig uteslutning

Mutual Exclusion är den fullständiga formen av Mutex. Det är en speciell typ av binär semafor som används för att kontrollera åtkomst till en delad resurs. Den inkluderar en prioritetsarvsmekanism för att undvika utdragna problem med prioritetsinvertering och håller uppgifter med högre prioritet blockerade under kortast möjliga tid.

Delade resurser som skrivskyddade filer leder aldrig till dödlägen, men resurser som skrivare och bandenheter behöver exklusiv åtkomst via en enda process.

Håll och vänta

I detta tillstånd måste processer stoppas från att lagra en eller flera resurser samtidigt som de väntar på en eller flera andra.

Cirkulär väntan

Denna metod kräver en total ordning av alla resurstyper. Förebyggande av cirkulär väntetid kräver också att varje process begär resurser i en stigande uppräkningsordning.

Undvikande av dödläge Algorithms

Det är bättre att undvika ett dödläge än att vidta åtgärder efter att det har uppstått. Undvikande kräver ytterligare information, till exempel hur resurser kommer att användas. Undvikande av dödlägen är en användbar modell där varje process deklarerar det maximala antalet resurser av varje typ som den kan behöva.

Undvikande Algorithms

Algoritmen för att undvika dödlägen utvärderar dynamiskt resursallokeringsläget så att en cirkulär väntesituation aldrig kan uppstå.

För en enskild instans av en resurstyp:

  • Använd ett resursallokeringsdiagram.
  • En cykel i grafen är nödvändig och tillräcklig för ett dödläge.

För flera instanser av en resurstyp:

  • En cykel är nödvändig men inte tillräcklig för ett dödläge.
  • Använd Bankirens algoritm.

Skillnaden mellan svält och dödläge

Här är några viktiga skillnader mellan dödläge och svält:

Dödläge Svält
En dödlägessituation uppstår när en av processerna blockeras. Svält är en situation där alla lågprioriterade processer blockeras medan högprioriterade processer körs.
Deadlock är en oändlig process. Svält är en lång väntan, men inte en oändlig process.
Varje dödläge innebär alltid svält. Varje svältsituation har inte nödvändigtvis ett dödläge.
Dödläge uppstår på grund av ömsesidig uteslutning, håll och vänta, ingen förköp och cirkulär väntan som inträffar tillsammans. Det händer på grund av okontrollerad prioritering och dålig resurshantering.

Fördelar med Deadlock

Här är fördelarna med att använda metoden för hantering av dödlägen:

  • Den här situationen fungerar bra för processer som utför en enda aktivitetsutbrott.
  • Ingen förköpsrätt behövs vid dödläge.
  • Det är en bekväm metod när den tillämpas på resurser vars tillstånd enkelt kan sparas och återställas.
  • Det är möjligt att tillämpa detta via kontroller vid kompilering.
  • Det behöver ingen körtidsberäkning, eftersom problemet löses i systemdesignen.

Nackdelar med Deadlock

Här är nackdelarna med att använda metoden för hantering av dödlägen:

  • Det försenar processens initiering.
  • Processer måste känna till sina framtida resursbehov i förväg.
  • Den föregriper oftare än nödvändigt.
  • Det tillåter inte inkrementella resursförfrågningar.
  • Den har inneboende förköpsförluster.

Vanliga frågor

Ett dödläge behöver fyra Coffman-villkor för att uppstå samtidigt: ömsesidig uteslutning, håll och vänta, ingen preemption och cirkulär väntan. Att ta bort ett enda av dessa villkor förhindrar att ett dödläge uppstår.

Förebyggande åtgärder tar bort ett av fyra villkor i förväg så att ett dödläge aldrig kan uppstå. Undvikande tillåter villkoren men använder körtidskontroller, såsom Bankirens algoritm, för att hålla systemet i ett säkert tillstånd.

I ett dödläge stoppas blockerade processer helt och ändrar aldrig tillstånd. livelock, processer fortsätter att ändra tillstånd och använda processorn men gör fortfarande inga framsteg. Livelock är ett specialfall av resursbrist.

De flesta universalsystem, inklusive Windows och Linux, använd strutsalgoritmen och ignorera helt enkelt sällsynta dödlägen eftersom förebyggande är kostsamt. Databaser och realtidssystem kör istället aktiva rutiner för detektering och återställning.

En resursallokeringsgraf mappar processer och resurser som noder som är sammankopplade av förfrågnings- och tilldelningskanter. En cykel i grafen signalerar ett möjligt dödläge; med resurser med en instans betyder en cykel alltid att det finns ett dödläge.

Nej. Ett verkligt dödläge är permanent, eftersom de blockerade processerna aldrig frigör sina resurser av sig själva. Operativsystemet måste bryta det genom att förgripa sig på en resurs, återställa eller avsluta en av processerna.

Maskininlärningsmodeller lär sig mönster för resursförfrågningar för att förutsäga och flagga dödlägen innan de uppstår. AI-schemaläggare kan ändra ordning på förfrågningar eller finjustera låsningspolicyer, vilket är användbart i databaser, molnplattformar och distribuerade system.

Ja. GitHub Copilot kan identifiera riskabel låsordning, föreslå konsekvent låsinsamling och generera tester som avslöjar dödlägen. Behandla dess utdata som ett första steg och verifiera fortfarande samtidighetslogik med lämpliga analysverktyg.

Sammanfatta detta inlägg med: