Բանկիրի ալգորիթմը (անգլ.՝ Banker's algorithm) ռեսուրսների հատկացման և փակուղուց խուսափելու ալգորիթմ է մշակված Edsger Dijkstra-ի կողմից ։
Ալգորիթմը մշակվել օպերացիոն համակարգերի է նախագծման պրոցեսում.[1] Անունը համանմանություն ունի այն եղանակի հետ որով բանկիրները բացատրություն են տալիս իրացվելիության սահմանափակումների համար։
Բանկիրի ալգորիթմը իրականացվում է օպերացիոն համակարգի կողմից ամեն անգամ երբ պրոցեսը հայցում է ռեսուրսներ։.[2] Ալգորիթմը կանխում փակուղիները հետաձգելով կամ մերժելով հարցումները եթե այն պարզում է որ ընդունելով հարցումը կարող է համակարգը դնել վտանգավոր իրավիճակի։ Երբ նոր պրոցեսը մուտք է գործում համակարգ այն պետք է հայտարարի յուրաքանչյուր ռեսուրսի կողմից մեքենագրվող առնձին դեպքերի մաքսիմալ քանակը որը չպետք է գերազանցի համակարգում առկա ռեսուրսների ընդհանուր քանակը։ Նաև երբ պրոցեսը ստանում է բոլոր իր հայցված ռեսուրսները այն պետք վերադարձնի դրանք սահմանափակ քանակությամբ ժամանակում։
Բանկիրի ալգորիթմին աշխատելու համար կարիք կա իմանալու 3 բան։
Ռեսուրսները կարող են կինել հատկացված պրոցեսին միայն եթե այն բավարարում է հետևյալ պայմաններին։
Բանկիրի ալգորիթմը ստացել է իր անունը այն փաստից որ այս ալգորիթմը կարող է օգտագործվել բանկային համակարգում երաշխավորելու համար որ բանկի ռեսուրսները չեն սպառվում քանի որ բանկը երբեք չի հատկացնի իր փողը այն եղանակով որ այն այլևս չկարողանա բավարարել իր բոլոր հաճախորդների կարիքները։ Օգտագործելով բանկիրի ալգորիթմը բանկը երաշխաորումէ որ երբ հաճախորդները հայցեն փող բանկը երբեք չի լքի ապահով իրավիճակը . Երե հաճախորդների հայցը չի ստիպի բանկին թողնել իր ապահով վիճակը կանխիկ փողը կտրամադրվի հակառակ դեպքում հաճախորդը պետք է սպասի այնքան քանի դեռ ուրիշ հաճախորդները չեն ավանդագրել բավական Հիմնական տվյալների կառուցվածքները որոնք պետք է սահմանվեն իրականացնելու բանկիրի ալգորիթմը։ Թող n լինի համակարգում պրոցեսների քանակը և m-ը լինի ռեսուրսների տիպերի քանակը Այնուհետև մեզ անհրաժեշտ է հետևյալ տվյալների կառուցվածքները։
Նշում։ Need = Max - Allocation.Պահանջ=Մաքսիմում-Հատկացված
Ենթադրենք համակարգը տարբերակում է 4 տիպի ռեսուրսների (A, B, C և D) միջև, Հետևյալը մի օրինակ է թե ինչպես այդ ռեսուրսները կարող են բաշխվել։ . Նկատիր որ այս օրինակը ցույց է տալիս մի ակնթարթ մինչ ռեսուրսների նոր հայցումները կժամանեն։Նաև ռեսուրսների քանակը և տիպը վերացական է։ Իրական համակարգերն օրինակի համար գործ են ունենում յուրաքանչյուր տիպի ռեսուրսի ավելի մեծ քանակի հետ Համակարգում առկա ընդհանուր ռեսուրսները։
A B C D 6 5 7 6
Համակարգի հասանելի ռեսուրսներն են` A B C D 3 1 1 2
պրոցեսները (ներկա պահին հատկացված ռեսուրսները)։ A B C D P1 1 2 2 1 P2 1 0 3 3 P3 1 2 1 0
պրոցեսները (Մաքսիմում ռեսուրսները)։ A B C D P1 3 3 2 2 P2 1 2 3 4 P3 1 3 5 0
Կարիք=Մաքասիմում ռեսուրսներ-ներկա պահին հատկացված ռեսուրսներ
Need= maximum resources - currently allocated resources պրոցեսներ (ռեսուրսների կարիք)։ A B C D P1 2 1 0 1 P2 0 2 0 1 P3 0 1 4 0
Իրավիճակը (ինչպես վերևի օրինակում) համարվում է ապահով եթե դա հնարավոր է բոլոր պրոցեսների համար ավարտել կատարվողը։Քանի որ համակարգը չի կարող իմանալ թե երբ է պրոցեսը ավարտվում կամ որքան ռեսուրսներ այն կհայցի հետո, համակարգը ենթադրում է որ բոլոր պրոցեսները վերջիվերջո կփորձեն ձեռք բերել իրենց կողմից հաստատած մաքսիմում ռեսուրսները և դրանից հետո շուտ կվերջացնեն։Սա խելամիտ ենթադրություն է շատ դեպքերում քանի որ համակարգը առանձնապես մտահոգված չէ թե որքան ժամանակ է յուրաքանչյուր պրոցես իրականացվում։Նաև եթե պրոցեսը ավարտվեց առանց օգտագործելով իր մաքսիմում ռեսուրսները այն միայն հեշտացնում է համակարգի աշխատանքը։ Ապահով իրավիճակը համրվում է որոշում կայացնող եթե այն պատրաստվում է իրագործել պատրասի հերթ։Տալով այդ ենթադրությունը ալգորիթմը պարզում է արդյոք իրավիճակը ապահով է փորձելով գտնել պրոցեսների ենթադրական հայցումների շարանը որը յուրաքանչյուրին թույլ կտա ձեռք բերել իր մաքսիմում ռեսուրսները այնուհետև ավարտել վերադարձնելով այդ ռեսուրսները համակարգին։ Ցանկացած իրավիճակ որտեղ այսպիսի համակցությունը բացակայում է համարվում է վտանգավոր իրավիճակ։
Մենք կարող ենք ցույց տալ որ իրավիճակը նախորդ օրինակում ապահով իրավիճակ է ցույց տալով որ դա հնարավոր է յուրաքանչյուր պրոցեսի համար ձեռք բերել իր մաքսիմում ռեսուրսները և այնուհետև դադարեցնել։
Պետք է նկատել որ այս հայցումները և ձեռքբերումները ենթադրական են։Ալգորիմը ստեղծում է դրանք ստուգելու իրավիճակաի ապահովությունը բայց ոչ մի ռեսուրս չի տրամադրվում և ոչ մի պրոցես չի ավարտվում։Նաև պետք է նկատի ունենալ որ այն հերթականությունը որով այս հայցումները ստեղծվում են եթե մի քանիսը միայն կատարվեն պետք չէ մտահոգվել որովհետև բոլոր ենթադրական հայցումները թույլ են տալիս պրոցեսին ավարտվել դրա շնորհիվ մեծացնելով համակարգի ազատ ռեսուրսները։ Օրինակի համար անապահով իրավիճակ ենթադրենք թե ինչ կպատահի եթե պրոցես 2-ը պահում էր 1-ով ավելի միավոր B սկզբում։
Երբ համակարգը ստանում է հարցում ռեսուրսների համար այն իրականացնում է բանկիրի ալգորիթմը պարզելու համր արդյոք ապահով է թույլատրել հարցումը։Ալգորիթմը .արդարացիորեն հետապնդում է մի բան ապահով և վտանգավոր իրավիճակների միջև տարբերության միջև պատկերացում կազմել։
#Կարող է հարցումը թույլատրվել?
#Ենթադրենք որ հարցումը թույլատրված է։
Եղանակը թե ինչպես է համակարգը մերժում կամ հետաձգում անհանարին կամ վտանգավոր հարցումները մի վճիռ է որը հատուկ է օպերացիոն համակարգին
Սկսենք այն նույն վիճակից ինչպես նախորդ օրինակը սկսվեց ենթադրելով որ պրոցես 3-ը հայցում է 2 միավոր ռեսուրս C.
Մյուս կողմից ենթադրենք պրոցես 3-ը հայցում է 1 միավոր ռեսուրս C.
Համակարգի հասանելի ռեսուրսներն են
A B C D Free 3 1 0 2
պրոցեսներ (ներկա պահին հատկացված ռեսուրսներ)։ A B C D P1 1 2 2 1 P2 1 0 3 3 P3 1 2 2 0
պրոցեսներ (մաքսիմում ռեսուրսներ)։ A B C D P1 3 3 2 2 P2 1 2 3 4 P3 1 3 5 0
Վերջապես այն վիճակից որից մենք սկսեցինք ենթադրեք որ պրոցես 2-ը հայցում է 1 միավոր ռեսուրս B.
Համակարգի հասանելի ռեսուրսներն են։
A B C D Free 3 0 1 2
պրոցեսներ (ներկա պահին հատկացված ռեսուրսներ)։ A B C D P1 1 2 2 1 P2 1 1 3 3 P3 1 2 1 0
պրոցեսներ (մաքսիմում ռեսուրսներ)։
A B C D P1 3 3 2 2 P2 1 2 3 4 P3 1 3 5 0
Նման այլ ալգորիթմներին բանկիրի ալգորիթմը ունի որոշ սահմանափակումներ երբ կարատված է։ Հատկապես այն կարիք ունի իմանալու թե յուրաքանչյուր ռեսուրսից որքան պրոցեսը առավելագույնը կհայցի։ Շատ համակարգերում այս ինֆորմացիան անհասանելի է դարձնելով այն անհնար իրականացնելու բանկիրի ալգորիթմը։ Նաև այն անիրատեսական է ենթադրել թե որ պրոցեսների քանակը ստատիկ է քանի որ ծատ համակարգերում պրոցեսների քանակը փոխվում է դնամիկորեն։ Դեռավելին պահանջը որ պրոցեսը վերջիվերջո ազատ կարձակի բոլոր իր ռեսուրսները (երբ պրոցեսը ավարտվում է) բավականչափ է ալգորիթմի ստույգության համար այնուամենայնիվ այն բավականաչափ չէ պռակտիկալ համակարգի համար։ Սպասելով ժամեր կամ նույնիսկ օրեր ռեսուրսների համար որ ազատվեն սովորաբար ընդունելի չէ։
{{cite book}}
: Check |url=
value (օգնություն)(չաշխատող հղում)