Resurssvält

Från Wikipedia
Hoppa till navigering Hoppa till sök

Resurssvält är inom datavetenskap ett problem som uppstår i samtidig programmering (concurrent programming) när en process oavbrutet nekas nödvändiga resurser för att kunna utföra sitt arbete.[1] Svält kan orsakas av ett schemaläggningsfel eller resursläckor, men kan även avsiktligt orsakas med en DOS-attack.

När svält inte kan uppnås in en samtidig algoritm, kallas den starvation-free (svältfri), lockout-freed[2] (baklåsbefriad) eller sägs ha finite bypass[3] (begränsad förbikoppling). Namnet "finite bypass" innebär att en process i algoritmen förbikopplas högst ett begränsat antal gånger innan den får tillgång till den delade resursen.[3]

Schemaläggning[redigera | redigera wikitext]

Svält orsakas vanligtvis av en överdrivet enkel schemaläggningsalgoritm. T.ex. om ett (dåligt utformat) system som utför flera uppgifter alltid växlar mellan de två första uppgifterna och aldrig låter den tredje köras kommer den tredje uppgiften svälta p.g.a. brist på processortid. Schemaläggningsalgoritmen, som är en del av kärnan, förväntas allokera resurser rättvist; d.v.s. att algoritmen bör allokera resurser så att inga processer ständigt saknar nödvändiga resurser.

Många schemaläggare i operativsystem använder konceptet "processprioritet". En process med hög prioritet (A) kommer att köras innan en process med låg prioritet (B). Om processen med hög prioritet (process A) blockerar och aldrig delar med sig resurser kommer processen med låg prioritet (B) (på vissa system) aldrig schemaläggas — den kommer att uppleva svält. Om det finns en process med ännu högre prioritet (X), som är beroende av ett resultat från process B, kommer kanske process X aldrig slutföras, även om det är den viktigaste processen i systemet. Detta tillstånd kallas för prioritetsinversion. Moderna algoritmer för schemaläggning innehåller normalt sett kod som garanterar att alla processer kommer att få en minimal mängd av alla viktiga resurser (mestadels processortid) för att förhindra att en process utsätts för svält.

Svält orsakas vanligtvis av baklås där det får en process att låsa sig. Två eller fler processer hamnar i baklås när båda inte gör någonting medan de väntar på en resurs som är upptagen av ett annat program i samma uppsättning. Däremot svälter en process när den väntar på en resurs som kontinuerligt ges till andra processer.[3]

En möjlig svältlösning är att använda en schemaläggningsalgoritm med prioritetskö som även använder sig av tekniken "aging" (åldrande). "Aging" är en teknik som gradvis ökar prioriteten för processer som väntar på systemet en lång stund.[4]

Referenser[redigera | redigera wikitext]

Den här artikeln är helt eller delvis baserad på material från engelskspråkiga Wikipedia.
  1. ^ Tanenbaum, Andrew (2001). Modern Operating Systems. Prentice Hall. sid. 184–185. ISBN 0-13-092641-8 
  2. ^ Herlihy, Maurice; Shavit, Nir (2012). The Art of Multiprocessor Programming. Elsevier. sid. 24. ISBN 9780123977953 
  3. ^ [a b c] Raynal, Michel (2012). Concurrent Programming: Algorithms, Principles, and Foundations. Springer Science & Business Media. sid. 10–11. ISBN 3642320279 
  4. ^ Galvin, Peter (2010). Operating System Concepts. Wiley India Edition. sid. 193. ISBN 978-81-265-2051-0