Zablokování - Deadlock - Wikipedia


v souběžné výpočty, a zablokování je stav, ve kterém každý člen skupiny čeká na jiného člena, včetně sebe, aby provedl akci, jako je odeslání zprávy nebo běžnější uvolnění zámek.[1] Zablokování je běžný problém v multiprocesing systémy, paralelní výpočty, a distribuované systémy, kde se softwarové a hardwarové zámky používají k rozhodování o sdílených zdrojích a jejich implementaci synchronizace procesu.[2]
V operační systém, zablokování nastane, když a proces nebo vlákno vstoupí do čekání Stát protože požadováno systémový zdroj je zadržen jiným čekajícím procesem, který zase čeká na jiný zdroj zadržený jiným čekajícím procesem. Pokud proces není schopen donekonečna měnit svůj stav, protože zdroje, které požaduje, používá jiný čekající proces, pak se říká, že je systém v mrtvém bodě.[3]
V komunikační systém, zablokování dochází hlavně kvůli ztraceným nebo poškozeným signálům, spíše než kvůli sporu o zdroje.[4]

- Prochází jediný proces.
- Pozdější proces musí počkat.
- K zablokování dochází, když první proces uzamkne první prostředek současně s tím, jak druhý proces uzamkne druhý prostředek.
- Zablokování lze vyřešit zrušením a restartováním prvního procesu.
Nezbytné podmínky
Situace zablokování zdroje může nastat tehdy a jen tehdy, pokud všechny následující podmínky platí současně v systému:[5]
- Vzájemné vyloučení: Alespoň jeden prostředek musí být uchováván v režimu, který nelze sdílet. Jinak by procesům nebylo zabráněno v použití zdroje, pokud je to nutné. Pouze jeden proces může použít prostředek v daném okamžiku.[6]
- Počkejte a počkejte nebo držení zdrojů: proces aktuálně drží alespoň jeden zdroj a požaduje další zdroje, které jsou zadržovány jinými procesy.
- Ne preempce: zdroj může být uvolněn pouze dobrovolně procesem, který jej drží.
- Kruhové čekání: každý proces musí čekat na zdroj, který je držen jiným procesem, který zase čeká, až první proces uvolní zdroj. Obecně platí, že soubor čekajících procesů, P = {P1, P2, …, PN}, takhle P1 čeká na zdroj v držení P2, P2 čeká na zdroj v držení P3 a tak dále, dokud PN čeká na zdroj v držení P1.[3][7]
Tyto čtyři podmínky jsou známé jako Coffmanovy podmínky z jejich prvního popisu v článku z roku 1971 Edward G. Coffman, Jr.[7]
I když tyto podmínky jsou dostatečné k vytvoření zablokování v systémech prostředků s jednou instancí, naznačují pouze možnost zablokování v systémech, které mají více instancí prostředků.[8]
Zablokování
Většina současných operačních systémů nemůže zabránit zablokování.[9] Když dojde k zablokování, různé operační systémy na ně reagují různými nestandardními způsoby. Většina přístupů funguje tak, že brání výskytu jedné ze čtyř Coffmanových podmínek, zejména čtvrté.[10] Hlavní přístupy jsou následující.
Ignorování zablokování
V tomto přístupu se předpokládá, že k zablokování nikdy nedojde. Toto je také aplikace Pštrosí algoritmus.[10][11] Tento přístup původně používal MINIX a UNIX.[7] Používá se, když jsou časové intervaly mezi výskyty zablokování velké a ztráta dat vzniklá pokaždé je tolerovatelná.
Ignorování zablokování lze bezpečně provést, pokud zablokování existuje formálně prokázáno nikdy nenastane. Příkladem je rámec RTIC.[12]
Detekce
Pod detekcí zablokování může dojít k zablokování. Poté se prozkoumá stav systému, aby se zjistilo, že došlo k zablokování, a následně se opraví. Je použit algoritmus, který sleduje alokaci prostředků a stavy procesů, vrací se zpět a restartuje jeden nebo více procesů, aby odstranil detekované zablokování. Detekce zablokování, ke kterému již došlo, je snadno možná, protože prostředky, které každý proces uzamkl nebo aktuálně požaduje, jsou známy plánovači prostředků operačního systému.[11]
Po zjištění zablokování je možné jej opravit pomocí jedné z následujících metod:[Citace je zapotřebí ]
- Ukončení procesu: jeden nebo více procesů zapojených do zablokování může být přerušeno. Dalo by se rozhodnout přerušit všechny soutěžící procesy zapojený do slepé uličky. Tím je zajištěno, že zablokování bude vyřešeno s jistotou a rychlostí.[Citace je zapotřebí ] Ale výdaje jsou vysoké, protože částečné výpočty budou ztraceny. Nebo by se dalo zvolit přerušení jednoho procesu po druhém, dokud nebude zablokování vyřešeno. Tento přístup má vysokou režii, protože po každém přerušení musí algoritmus určit, zda je systém stále v mrtvém bodě.[Citace je zapotřebí ] Při výběru kandidáta na ukončení je třeba vzít v úvahu několik faktorů, jako je priorita a věk procesu.[Citace je zapotřebí ]
- Předpoklad zdroje: zdroje přidělené různým procesům mohou být postupně preempovány a přidělovány jiným procesům, dokud nedojde k narušení zablokování.[13]
Prevence

Prevence zablokování funguje tak, že brání jedné ze čtyř Coffmanových podmínek.
- Demontáž vzájemné vyloučení podmínka znamená, že žádný proces nebude mít výhradní přístup ke zdroji. To se ukazuje jako nemožné pro zdroje, které nemohou být zařazen. Ale i při zařazení zdrojů mohlo dojít k zablokování. Algoritmy, které se vyhýbají vzájemnému vyloučení, se nazývají neblokující synchronizace algoritmy.
- The vydrž a počkej nebo držení zdrojů podmínky lze odstranit požadavkem, aby procesy vyžadovaly všechny zdroje, které budou potřebovat před spuštěním (nebo před zahájením konkrétní sady operací). Tyto pokročilé znalosti je často obtížné uspokojit a v každém případě jde o neefektivní využívání zdrojů. Dalším způsobem je vyžadovat, aby procesy požadovaly prostředky, pouze pokud žádné nemají; Nejprve musí uvolnit všechny své aktuálně držené zdroje, než si od začátku vyžádají všechny zdroje, které budou potřebovat. I to je často nepraktické. Je to tak proto, že zdroje mohou být přiděleny a po dlouhou dobu zůstanou nevyužité. Proces vyžadující populární zdroj může také muset čekat neomezeně dlouho, protože takový prostředek může být vždy přidělen nějakému procesu, což má za následek hladovění zdrojů.[14] (Tyto algoritmy, jako např serializační tokeny, jsou známé jako algoritmy typu „vše nebo nikdo“.)
- The Ne preempce podmínce může být také obtížné nebo nemožné se vyhnout, protože proces musí být schopen mít zdroj po určitou dobu, nebo může být výsledek zpracování nekonzistentní nebo mlácení může nastat. Neschopnost prosadit preempci však může narušit a přednost algoritmus. Předpoklad „uzamčeného“ zdroje obecně znamená a vrácení zpět a je třeba se mu vyhnout, protože je to velmi nákladné z režie. Algoritmy, které umožňují preempci, zahrnují algoritmy bez zámku a bez čekání a optimistické řízení souběžnosti. Pokud proces obsahující některé zdroje a požaduje jiné zdroje, které k němu nelze okamžitě přidělit, může být podmínka odstraněna uvolněním všech aktuálně zadržovaných prostředků daného procesu.
- Konečnou podmínkou je kruhové čekání stav. Přístupy, které zabraňují kruhovému čekání, zahrnují deaktivaci přerušení během kritických sekcí a použití hierarchie k určení částečné objednání zdrojů. Pokud neexistuje žádná zřejmá hierarchie, byla k určení řazení použita i adresa paměti prostředků a prostředky jsou požadovány v rostoucím pořadí výčtu.[3] Dijkstraovo řešení lze také použít.
Livelock
A živý zámek je podobný zablokování, kromě toho, že stavy procesů zapojených do zablokování se navzájem neustále mění, žádný nepostupuje.
Termín vytvořil Edward A. Ashcroft v článku z roku 1975[15] v souvislosti s přezkoumáním rezervačních systémů leteckých společností.[16] Livelock je speciální případ hladovění zdrojů; obecná definice pouze uvádí, že určitý proces neprobíhá.[17]
Livelock je pro některé riziko algoritmy které detekují a zotavují se z zablokování. Pokud přijme opatření více než jeden proces, algoritmus detekce zablokování lze opakovaně spustit. Tomu se lze vyhnout zajištěním toho, že pouze jeden proces (zvolený libovolně nebo podle priority) provede akci.[18]
Distribuované zablokování
Distribuované zablokování může nastat v distribuované systémy když distribuované transakce nebo řízení souběžnosti se používá.
Distribuované zablokování lze zjistit buď vytvořením globálního čekat na graf z místních grafů čekání na zablokování detektoru nebo a distribuovaný algoritmus jako pronásledování hran.
Fantomové zablokování jsou zablokování, která jsou v distribuovaném systému falešně detekována kvůli interním zpožděním systému, ale ve skutečnosti neexistují.
Například pokud proces uvolní prostředek R1 a vydá žádost o R2a první zpráva je ztracena nebo zpožděna, mohl by koordinátor (detektor zablokování) falešně uzavřít zablokování (pokud je žádost o R2 zatímco má R1 způsobí zablokování).
Viz také
- Aporia
- Bankéřův algoritmus
- Catch-22 (logika)
- Kruhový odkaz
- Problém jídelních filozofů
- Zamykání souborů
- Gridlock (v automobilové dopravě)
- Hang (výpočet)
- Impasse
- Nekonečná smyčka
- Linearizovatelnost
- Kontrola modelu lze použít k formálnímu ověření, že systém nikdy neuvidí zablokování
- Pštrosí algoritmus
- Prioritní inverze
- Stav závodu
- Zámek čtečky a zapisovače
- Problém spícího holiče
- Patová situace
- Synchronizace (informatika)
- Otočit omezení směrování
Reference
- ^ Coulouris, George (2012). Koncepty a design distribuovaných systémů. Pearson. p. 716. ISBN 978-0-273-76059-7.
- ^ Padova, David (2011). Encyclopedia of Parallel Computing. Springer. p. 524. ISBN 9780387097657. Citováno 28. ledna 2012.
- ^ A b C Silberschatz, Abraham (2006). Principy operačního systému (7. vydání). Wiley-Indie. p. 237. ISBN 9788126509621. Citováno 29. ledna 2012.
- ^ Schneider, G. Michael (2009). Pozvánka na informatiku. Cengage Learning. p. 271. ISBN 978-0324788594. Citováno 28. ledna 2012.
- ^ Silberschatz, Abraham (2006). Principy operačního systému (7 ed.). Wiley-Indie. p. 239. ISBN 9788126509621. Citováno 29. ledna 2012.
- ^ „ECS 150 jaro 1999: čtyři nezbytné a dostatečné podmínky pro zablokování“. nob.cs.ucdavis.edu. Archivováno z původního dne 29. dubna 2018. Citováno 29. dubna 2018.
- ^ A b C Shibu, K. (2009). Úvod do vestavěných systémů (1. vyd.). Tata McGraw-Hill Education. p. 446. ISBN 9780070145894. Citováno 28. ledna 2012.
- ^ „Operační systémy: zablokování“. www.cs.uic.edu. Citováno 25. dubna 2020.
Pokud kategorie prostředků obsahuje více než jednu instanci, pak přítomnost cyklu v grafu přidělení prostředků naznačuje možnost zablokování, ale nezaručuje ji. Zvažte například obrázky 7.3 a 7.4 níže:
- ^ Silberschatz, Abraham (2006). Principy operačního systému (7 ed.). Wiley-Indie. p. 237. ISBN 9788126509621. Citováno 29. ledna 2012.
- ^ A b Stuart, Brian L. (2008). Principy operačních systémů (1. vyd.). Cengage Learning. p. 446. ISBN 9781418837693. Citováno 28. ledna 2012.
- ^ A b Tanenbaum, Andrew S. (1995). Distribuované operační systémy (1. vyd.). Pearson Education. p. 117. ISBN 9788177581799. Citováno 28. ledna 2012.
- ^ https://rtic.rs/0.5/book/en/
- ^ „IBM Knowledge Center“. www.ibm.com. Archivováno z původního dne 19. března 2017. Citováno 29. dubna 2018.
- ^ Silberschatz, Abraham (2006). Principy operačního systému (7 ed.). Wiley-Indie. p. 244. ISBN 9788126509621. Citováno 29. ledna 2012.
- ^ Ashcroft, E.A. (1975). Msgstr "Prokazování tvrzení o paralelních programech". Journal of Computer and System Sciences. 10: 110–135. doi:10.1016 / S0022-0000 (75) 80018-3.
- ^ Kwong, Y. S. (1979). "O absenci živých zámků v paralelních programech". Sémantika souběžného výpočtu. Přednášky z informatiky. 70. 172–190. doi:10.1007 / BFb0022469. ISBN 3-540-09511-X.
- ^ Anderson, James H .; Yong-jik Kim (2001). „Vzájemné vyloučení sdílené paměti: hlavní trendy výzkumu od roku 1986“. Archivováno z původního dne 25. května 2006.
- ^ Zöbel, Dieter (říjen 1983). "Problém zablokování: klasifikační bibliografie". Recenze operačních systémů ACM SIGOPS. 17 (4): 6–15. doi:10.1145/850752.850753. ISSN 0163-5980. S2CID 38901737.
Další čtení
- Kaveh, Nima; Emmerich, Wolfgang. „Detekce zablokování v systémech distribuovaných objektů“ (PDF). London: University College London. Citovat deník vyžaduje
| deník =
(Pomoc) - Bensalem, Saddek; Fernandez, Jean-Claude; Havelund, Klaus; Mounier, Laurent (2006). Potvrzení potenciálu zablokování zjištěného analýzou za běhu. Sborník seminářů z roku 2006 o paralelních a distribuovaných systémech: testování a ladění. ACM. 41–50. CiteSeerX 10.1.1.431.3757. doi:10.1145/1147403.1147412. ISBN 978-1595934147. S2CID 2544690.
- Coffman, Edward G., Jr.; Elphick, Michael J .; Shoshani, Arie (1971). „Zablokování systému“ (PDF). ACM Computing Surveys. 3 (2): 67–78. doi:10.1145/356586.356588. S2CID 15975305.
- Mogul, Jeffrey C .; Ramakrishnan, K. K. (1997). "Odstranění živého zámku příjmu v jádře řízeném přerušením". Transakce ACM v počítačových systémech. 15 (3): 217–252. CiteSeerX 10.1.1.156.667. doi:10.1145/263326.263335. ISSN 0734-2071. S2CID 215749380.
- Havender, James W. (1968). „Zabránění zablokování v systémech multitaskingu“. IBM Systems Journal. 7 (2): 74. doi:10,1147 / sj.72.0074.
- Holliday, JoAnne L .; El Abbadi, Amr. „Distribuovaná detekce zablokování“. Encyclopedia of Distributed Computing. Archivovány od originál dne 2. listopadu 2015. Citováno 29. prosince 2004.
- Knapp, Edgar (1987). Msgstr "Detekce zablokování v distribuovaných databázích". ACM Computing Surveys. 19 (4): 303–328. CiteSeerX 10.1.1.137.6874. doi:10.1145/45075.46163. ISSN 0360-0300. S2CID 2353246.
- Ling, Yibei; Chen, Shigang; Chiang, Jason (2006). "Optimální plánování detekce zablokování". Transakce IEEE na počítačích. 55 (9): 1178–1187. CiteSeerX 10.1.1.259.4311. doi:10.1109 / tc.2006.151. S2CID 7813284.
externí odkazy
- "Pokročilá synchronizace v podprocesech Java „Scott Oaks a Henry Wong
- Agenti pro detekci zablokování
- DeadLock v Portlandském úložišti vzorů
- Etymologie „zablokování“