Алгоритм банкіра — алгоритм, винайдений Едсгером Дейкстрою, який призначений для уникнення взаємних блокувань під час розподілу ресурсів. Він досліджує можливий розвиток подій шляхом відтворення розподілу заздалегідь визначеної кількості ресурсів, і тоді робить перевірку на безпечність стану з метою дослідження на можливі умови взаємних блокувань для всіх інших очікуючих активностей, перед прийняттям рішення чи можна дозволити подальший розподіл.
Алгоритм було винайдено під час розробки операційної системи THE і спершу описано в EWD108. Назва подібна до того, як банкіри звітують про обмеження ліквідності.
Алгоритм
Алгоритм банкіра виконується операційною системою щоразу, коли процес запитує ресурси.
Алгоритм запобігає взаємним блокуванням шляхом відмови або відкладання запитів, якщо він визначає, що виконання цих запитів переведе систему до небезпечного стану (у якому можливе взаємне блокування).
Коли в системі з'являється новий процес, він має заявити максимально потрібну кількість ресурсів кожного типу, але не більше, ніж загальна кількість ресурсів у системі. Також, коли процес отримує в своє розпорядження ресурси, він має повернути їх системі за скінченний проміжок часу.
Ресурси
Для роботи алгоритму банкіра потрібно знати три речі:
- Скільки кожного ресурсу може запитати процес
- Скільки кожного ресурсу кожний процес утримує на поточний момент
- Скільки кожного ресурсу доступно в системі на поточний момент
Ресурси можуть бути виділені процесу тільки якщо виконуються такі умови:
- запит ≤ заявка (максимум), інакше встановлюється помилка через запит процесом ресурсів більше попередньо заявленої ним кількості.
- запит ≤ доступно, інакше процес очікує доки ресурси звільняться.
Приклади ресурсів, що відстежуються у справжніх системах це пам'ять, семафори та інтерфейси доступу.
Приклад
Розглянемо систему, що розрізняє чотири типи ресурсів (A, B, C і D). Наступний приклад показує як можуть бути розподілені ресурси. Зауважте, що цей приклад показує систему в момент перед тим, як надходить новий запит на ресурси. Типи та кількість ресурсів абстрактні. Справжні системи матимуть справу зі значно більшою кількістю ресурсів.
Доступні ресурси в системі: A B C D 3 1 1 2
Процеси (наразі розподілені ресурси): A B C D P1 1 2 2 1 P2 1 0 3 3 P3 1 1 1 0
Процеси (заявки на ресурси): A B C D P1 3 3 2 2 P2 1 2 3 4 P3 1 1 5 0
Безпечні та небезпечні стани
Стан у попередньому прикладі вважається безпечним, якщо можливо для всіх процесів завершити свою роботу. Через те, що система не може знати, коли процеси завершать свою роботу і скільки саме ресурсів буде ними запитано, система вважає, що всі процеси колись запитають максимальну заявлену ними кількість ресурсів і завершаться невдовзі потому. Це розумне припущення в більшості випадків, бо система не надто опікується як довго кожний процес виконується (у будь-якому випадку не з погляду уникнення взаємних блокувань). Якщо процес завершується так і не запитавши заявленої кількості ресурсів, це тільки полегшує роботу системи.
При цьому припущенні алгоритм визначає стан як безпечний шляхом пошуку можливого набору запитів процесів, який дозволить кожному процесу отримати заявлену кількість ресурсів і тоді завершитись (із поверненням ресурсів системі). Будь-який стан, в якому такого набору не існує, є небезпечним.
Псевдокод
function bankers_algorithm(set of processes P, currently available resources A) { while (P not empty) { boolean found = false for each (process p in P) { Cp = current_resource_allocation_for_process(p) Mp = maximum_resource_requirement_for_process(p) if (Mp − Cp ≤ A) { // p може отримати все, що йому потрібно. // Припустимо він зробив це, завершився і вивільнив ресурси назад в систему. A = A + Cp remove_element_from_set(p, P) found = true } } } if (not found) { return UNSAFE } return SAFE }
Приклад
Ми можемо показати, що стан поданий у попередньому прикладі є безпечним шляхом перевірки можливості отримати заявлену кількість ресурсів кожному процесу і тоді завершитись.
- P1 отримує 2 A, 1 B і 1 D додаткових, досягнув своєї заявки
- Тепер система має 1 A, жодного B, 1 C і 1 D доступних ресурсів
- P1 завершується, повернув 3 A, 3 B, 2 C і 2 D ресурсів в систему
- Тепер система має 4 A, 3 B, 3 C і 3 D доступних ресурсів
- P2 отримує 2 B і 1 D додаткових ресурсів, тоді завершується, повернувши ресурси
- Тепер система має 5 A, 3 B, 6 C і 6 D ресурсів
- P3 отримує 4 C і завершується
- Тепер система має всі свої ресурси: 6 A, 4 B, 7 C і 6 D
- Через те, що всі процеси мали змогу завершитись, цей стан був безпечним
Зауважте, що ці запити на отримання є гіпотетичними. Алгоритм генерує їх для перевірки безпечності стану, але ресурси не буде надано процесам і процеси ще не завершено. Також зауважте, що порядок, в якому ці запити згенеровано – якщо кожний може бути здійсненим – не має значення тому, що всі гіпотетичні запити дозволяють процесу завершитись, у такий спосіб збільшуючи кількість вільних ресурсів в системі.
Для прикладу небезпечного стану, уявіть що станеться якщо процес 2 на початку утримує на 1 ресурс B більше.
Запити
Коли система отримує запит на виділення ресурсу, вона запускає алгоритм банкіра для визначення чи безпечно виконати цей запит.
- Чи може бути запит виконано?
- Якщо ні, запит неможливий і відповіддю буде відмова або переміщення запиту до списку очікування
- Припустимо можливість виконати запит є
- Чи безпечний новий стан?
- Якщо так, тоді виконуємо запит
- Якщо ні, або відмовляємо, або переміщуємо до списку очікування
Рішення про відмову або переміщення до списку очікування неможливих або небезпечних запитів покладається на певну операційну систему.
Приклад
Продовжимо попередній приклад, припустимо процес 3 запитав 2 одиниці ресурсу C.
- Доступного ресурсу C недостатньо для виконання запиту
- Відмовлено
З іншого боку, уявімо, що процес 3 запросив 1 одиницю ресурсу C.
- В такому випадку достатньо ресурсів для задоволення цього запиту
- Припустимо запит задоволено
- Новий стан системи:
Доступні системні ресурси A B C D Вільно 3 1 0 2
Процеси (наразі розподілені ресурси): A B C D P1 1 2 2 1 P2 1 0 3 3 P3 1 1 2 0
Процеси (заявки на ресурси): A B C D P1 3 3 2 2 P2 1 2 3 4 P3 1 1 5 0
- Визначення безпечність цього стану
- P1 може отримати 2 A, 1 B і 1 D і завершитись
- Тоді, P2 може отримати 2 B і 1 D і завершитись
- Насамкінець, P3 може отримати 3 C і завершитись
- Таким чином, новий стан безпечний
- Через це задовольняємо запит
Наостанок, припустимо що процес 2 запитав 1 одиницю ресурсу B.
- Маємо достатньо ресурсів
- Припустимо, що ми задовольнили запит, новий стан буде:
Доступні системні ресурси A B C D Вільно 3 0 1 2
Процеси (наразі розподілені ресурси): A B C D P1 1 2 2 1 P2 1 1 3 3 P3 1 1 1 0 Процеси (заявки на ресурси): A B C D P1 3 3 2 2 P2 1 2 3 4 P3 1 1 5 0
- Чи безпечний це стан?
- P1 не може отримати достатньо ресурсу B
- P2 не може отримати достатньо ресурсу B
- P3 не може отримати достатньо ресурсу C
- Жоден процес не може отримати достатньо ресурсів і завершитись, тобто цей стан небезпечний, відмова в запиті
Зауважте, що в цьому прикладі жоден процес не зміг завершитись. Можливий стан коли частина процесів можуть завершитись, а частина ні, це все ще небезпечний стан.
Обмеження
Подібно до інших алгоритмів, алгоритм банкіра має деякі обмеження в реалізації. Особливістю є те, що він має знати як багато кожного ресурсу може запитати процес. У більшості систем ця інформація недоступна, що унеможливлює використання цього алгоритму. Також нереалістично вважати постійним число процесів у системі. Далі більше, вимога повернення процесом ресурсів після завершення достатня для правильності алгоритму, однак не підходить для практичних систем. Очікування годинами або й днями вивільнення ресурсів здебільшого неприйнятне.
Примітки
- E. W. Dijkstra "EWD108: Een algorithme ter voorkoming van de dodelijke omarming [ 14 травня 2011 у Wayback Machine.]" (данською; Алгоритм для запобігання смертельних обіймів)
- Bic, Lubomir F.; Shaw, Alan C. (2003). Operating System Principles. Prentice Hall. ISBN .[недоступне посилання]
- (PDF). Архів оригіналу (PDF) за 6 січня 2014. Процитовано 22 вересня 2010.
Подальше читання
- "" by Silberschatz, Galvin, and Gagne (pages 259-261 of the 7th edition)
- "EWD623: The mathematics behind the Banker’s Algorithm [ 8 червня 2011 у Wayback Machine.]" (1977) by E. W. Dijkstra, published as pages 308–312 of Edsger W. Dijkstra, Selected Writings on Computing: A Personal Perspective, Springer-Verlag, 1982.
Посилання
- Deadlock Recovery, Avoidance and Prevention [ 31 серпня 2010 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Algoritm bankira algoritm vinajdenij Edsgerom Dejkstroyu yakij priznachenij dlya uniknennya vzayemnih blokuvan pid chas rozpodilu resursiv Vin doslidzhuye mozhlivij rozvitok podij shlyahom vidtvorennya rozpodilu zazdalegid viznachenoyi kilkosti resursiv i todi robit perevirku na bezpechnist stanu z metoyu doslidzhennya na mozhlivi umovi vzayemnih blokuvan dlya vsih inshih ochikuyuchih aktivnostej pered prijnyattyam rishennya chi mozhna dozvoliti podalshij rozpodil Algoritm bulo vinajdeno pid chas rozrobki operacijnoyi sistemi THE i spershu opisano v EWD108 Nazva podibna do togo yak bankiri zvituyut pro obmezhennya likvidnosti AlgoritmAlgoritm bankira vikonuyetsya operacijnoyu sistemoyu shorazu koli proces zapituye resursi Algoritm zapobigaye vzayemnim blokuvannyam shlyahom vidmovi abo vidkladannya zapitiv yaksho vin viznachaye sho vikonannya cih zapitiv perevede sistemu do nebezpechnogo stanu u yakomu mozhlive vzayemne blokuvannya Koli v sistemi z yavlyayetsya novij proces vin maye zayaviti maksimalno potribnu kilkist resursiv kozhnogo tipu ale ne bilshe nizh zagalna kilkist resursiv u sistemi Takozh koli proces otrimuye v svoye rozporyadzhennya resursi vin maye povernuti yih sistemi za skinchennij promizhok chasu Resursi Dlya roboti algoritmu bankira potribno znati tri rechi Skilki kozhnogo resursu mozhe zapitati proces Skilki kozhnogo resursu kozhnij proces utrimuye na potochnij moment Skilki kozhnogo resursu dostupno v sistemi na potochnij moment Resursi mozhut buti vidileni procesu tilki yaksho vikonuyutsya taki umovi zapit zayavka maksimum inakshe vstanovlyuyetsya pomilka cherez zapit procesom resursiv bilshe poperedno zayavlenoyi nim kilkosti zapit dostupno inakshe proces ochikuye doki resursi zvilnyatsya Prikladi resursiv sho vidstezhuyutsya u spravzhnih sistemah ce pam yat semafori ta interfejsi dostupu Priklad Rozglyanemo sistemu sho rozriznyaye chotiri tipi resursiv A B C i D Nastupnij priklad pokazuye yak mozhut buti rozpodileni resursi Zauvazhte sho cej priklad pokazuye sistemu v moment pered tim yak nadhodit novij zapit na resursi Tipi ta kilkist resursiv abstraktni Spravzhni sistemi matimut spravu zi znachno bilshoyu kilkistyu resursiv Dostupni resursi v sistemi A B C D 3 1 1 2 Procesi narazi rozpodileni resursi A B C D P1 1 2 2 1 P2 1 0 3 3 P3 1 1 1 0 Procesi zayavki na resursi A B C D P1 3 3 2 2 P2 1 2 3 4 P3 1 1 5 0 Bezpechni ta nebezpechni stani Stan u poperednomu prikladi vvazhayetsya bezpechnim yaksho mozhlivo dlya vsih procesiv zavershiti svoyu robotu Cherez te sho sistema ne mozhe znati koli procesi zavershat svoyu robotu i skilki same resursiv bude nimi zapitano sistema vvazhaye sho vsi procesi kolis zapitayut maksimalnu zayavlenu nimi kilkist resursiv i zavershatsya nevdovzi potomu Ce rozumne pripushennya v bilshosti vipadkiv bo sistema ne nadto opikuyetsya yak dovgo kozhnij proces vikonuyetsya u bud yakomu vipadku ne z poglyadu uniknennya vzayemnih blokuvan Yaksho proces zavershuyetsya tak i ne zapitavshi zayavlenoyi kilkosti resursiv ce tilki polegshuye robotu sistemi Pri comu pripushenni algoritm viznachaye stan yak bezpechnij shlyahom poshuku mozhlivogo naboru zapitiv procesiv yakij dozvolit kozhnomu procesu otrimati zayavlenu kilkist resursiv i todi zavershitis iz povernennyam resursiv sistemi Bud yakij stan v yakomu takogo naboru ne isnuye ye nebezpechnim Psevdokod function bankers algorithm set of processes P currently available resources A while P not empty boolean found false for each process p in P Cp current resource allocation for process p Mp maximum resource requirement for process p if Mp Cp A p mozhe otrimati vse sho jomu potribno Pripustimo vin zrobiv ce zavershivsya i vivilniv resursi nazad v sistemu A A Cp remove element from set p P found true if not found return UNSAFE return SAFE Priklad Mi mozhemo pokazati sho stan podanij u poperednomu prikladi ye bezpechnim shlyahom perevirki mozhlivosti otrimati zayavlenu kilkist resursiv kozhnomu procesu i todi zavershitis P1 otrimuye 2 A 1 B i 1 D dodatkovih dosyagnuv svoyeyi zayavki Teper sistema maye 1 A zhodnogo B 1 C i 1 D dostupnih resursiv P1 zavershuyetsya povernuv 3 A 3 B 2 C i 2 D resursiv v sistemu Teper sistema maye 4 A 3 B 3 C i 3 D dostupnih resursiv P2 otrimuye 2 B i 1 D dodatkovih resursiv todi zavershuyetsya povernuvshi resursi Teper sistema maye 5 A 3 B 6 C i 6 D resursiv P3 otrimuye 4 C i zavershuyetsya Teper sistema maye vsi svoyi resursi 6 A 4 B 7 C i 6 D Cherez te sho vsi procesi mali zmogu zavershitis cej stan buv bezpechnim Zauvazhte sho ci zapiti na otrimannya ye gipotetichnimi Algoritm generuye yih dlya perevirki bezpechnosti stanu ale resursi ne bude nadano procesam i procesi she ne zaversheno Takozh zauvazhte sho poryadok v yakomu ci zapiti zgenerovano yaksho kozhnij mozhe buti zdijsnenim ne maye znachennya tomu sho vsi gipotetichni zapiti dozvolyayut procesu zavershitis u takij sposib zbilshuyuchi kilkist vilnih resursiv v sistemi Dlya prikladu nebezpechnogo stanu uyavit sho stanetsya yaksho proces 2 na pochatku utrimuye na 1 resurs B bilshe Zapiti Koli sistema otrimuye zapit na vidilennya resursu vona zapuskaye algoritm bankira dlya viznachennya chi bezpechno vikonati cej zapit Chi mozhe buti zapit vikonano Yaksho ni zapit nemozhlivij i vidpoviddyu bude vidmova abo peremishennya zapitu do spisku ochikuvannya Pripustimo mozhlivist vikonati zapit ye Chi bezpechnij novij stan Yaksho tak todi vikonuyemo zapit Yaksho ni abo vidmovlyayemo abo peremishuyemo do spisku ochikuvannya Rishennya pro vidmovu abo peremishennya do spisku ochikuvannya nemozhlivih abo nebezpechnih zapitiv pokladayetsya na pevnu operacijnu sistemu Priklad Prodovzhimo poperednij priklad pripustimo proces 3 zapitav 2 odinici resursu C Dostupnogo resursu C nedostatno dlya vikonannya zapitu Vidmovleno Z inshogo boku uyavimo sho proces 3 zaprosiv 1 odinicyu resursu C V takomu vipadku dostatno resursiv dlya zadovolennya cogo zapitu Pripustimo zapit zadovoleno Novij stan sistemi Dostupni sistemni resursi A B C D Vilno 3 1 0 2 Procesi narazi rozpodileni resursi A B C D P1 1 2 2 1 P2 1 0 3 3 P3 1 1 2 0 Procesi zayavki na resursi A B C D P1 3 3 2 2 P2 1 2 3 4 P3 1 1 5 0 Viznachennya bezpechnist cogo stanu P1 mozhe otrimati 2 A 1 B i 1 D i zavershitis Todi P2 mozhe otrimati 2 B i 1 D i zavershitis Nasamkinec P3 mozhe otrimati 3 C i zavershitis Takim chinom novij stan bezpechnij Cherez ce zadovolnyayemo zapit Naostanok pripustimo sho proces 2 zapitav 1 odinicyu resursu B Mayemo dostatno resursiv Pripustimo sho mi zadovolnili zapit novij stan bude Dostupni sistemni resursi A B C D Vilno 3 0 1 2 Procesi narazi rozpodileni resursi A B C D P1 1 2 2 1 P2 1 1 3 3 P3 1 1 1 0 Procesi zayavki na resursi A B C D P1 3 3 2 2 P2 1 2 3 4 P3 1 1 5 0 Chi bezpechnij ce stan P1 ne mozhe otrimati dostatno resursu B P2 ne mozhe otrimati dostatno resursu B P3 ne mozhe otrimati dostatno resursu C Zhoden proces ne mozhe otrimati dostatno resursiv i zavershitis tobto cej stan nebezpechnij vidmova v zapiti Zauvazhte sho v comu prikladi zhoden proces ne zmig zavershitis Mozhlivij stan koli chastina procesiv mozhut zavershitis a chastina ni ce vse she nebezpechnij stan ObmezhennyaPodibno do inshih algoritmiv algoritm bankira maye deyaki obmezhennya v realizaciyi Osoblivistyu ye te sho vin maye znati yak bagato kozhnogo resursu mozhe zapitati proces U bilshosti sistem cya informaciya nedostupna sho unemozhlivlyuye vikoristannya cogo algoritmu Takozh nerealistichno vvazhati postijnim chislo procesiv u sistemi Dali bilshe vimoga povernennya procesom resursiv pislya zavershennya dostatnya dlya pravilnosti algoritmu odnak ne pidhodit dlya praktichnih sistem Ochikuvannya godinami abo j dnyami vivilnennya resursiv zdebilshogo neprijnyatne PrimitkiE W Dijkstra EWD108 Een algorithme ter voorkoming van de dodelijke omarming 14 travnya 2011 u Wayback Machine danskoyu Algoritm dlya zapobigannya smertelnih obijmiv Bic Lubomir F Shaw Alan C 2003 Operating System Principles Prentice Hall ISBN 0 13 026611 6 nedostupne posilannya PDF Arhiv originalu PDF za 6 sichnya 2014 Procitovano 22 veresnya 2010 Podalshe chitannya by Silberschatz Galvin and Gagne pages 259 261 of the 7th edition EWD623 The mathematics behind the Banker s Algorithm 8 chervnya 2011 u Wayback Machine 1977 by E W Dijkstra published as pages 308 312 of Edsger W Dijkstra Selected Writings on Computing A Personal Perspective Springer Verlag 1982 ISBN 0 387 90652 5PosilannyaDeadlock Recovery Avoidance and Prevention 31 serpnya 2010 u Wayback Machine