برای تأییدپذیری کامل این مقاله به منابع بیشتری نیاز است. (فوریه ۲۰۱۳) |
الگوریتم بانکدار یک الگوریتم تخصیص منابع و اجتناب از بنبست است که توسط ادسخر دیسترا توسعه یافته که امنیت آن به وسیله شبیهسازی تخصیص بیشترین مقدار ممکن از تمام منابع آزمایش شده به طوری که یک s-state ایجاد میکند تا برای همه فرایندهای در حال انتظار تمام شرایط بنبست را قبل از تصمیمگیری و اجازه تخصیص منبع بررسی کند.
این الگوریتم در طراحی فرایند در سیستم عامل THE توسعه یافته و در اصل (به هلندی) در EWD108 شرح داده شده.[۱]
الگوریتم بانکدار هر زمان که یک فرایند درخواست منبع کند توسط سیستم عامل اجرا میشود.[۲] الگوریتم به وسیله انکار یا تعویق درخواست از بنبست جلوگیری میکند. این در صورتی است که اگر تعیین شود که پذیرش درخواست میتواند سیستم را به حالت نا امن ببرد. (حالتی که بنبست میتواند رخ دهد). هنگامی که یک فرایند جدید وارد یک سیستم میشود باید حداکثر تعداد درخواستی از هر یک از منابع را اعلام کند که «نباید از تعداد کل منابع در سیستم تجاوز کند». همچنین هنگامی که یک فرایند همه منابع درخواستی را تحویل میگیرد باید آنها را پس از اتمام عملیاتش، بازگرداند.
الگوریتم بانکدار برای انجام کار نیاز به دانستن سه چیز دارد:
منابع تنها در صورتی ممکن است اختصاص یابند که شرایط زیر وجود داشته باشد:
برخی از منابعی که در سیستمهای واقعی دنبال میشوند حافظه، سمافورها و رابط دسترسی هستند. نام الگوریتم بانکدار برگرفته از این حقیقت است که این الگوریتم میتواند در سیستم بانکی مورد استفاده قرار گیرد تا تضمین کند که بانک همه منابع خورد را از دست نمیدهد. چون بانک هیچگاه پول را به نحوی تخصیص نمیدهد که نتواند نیازهای بقیه مشتریها را برطرف نکند. با الگوریتم بانکدار بانک تضمین میکند که زمانی که مشتریها پول درخواست میکنند بانک هیچگاه به حالت ناامن نمیرود. اگر درخواست مشتری باعث نشود که بانک حالت امن را ترک کند، مبلغ اختصاص میابد در غیر اینصورت مشتری باید صبر کند تا زمانی که مشتریهای دیگر سپرده کافی قرار دهند.
ساختمان دادههای اولیه برای پیادهسازی الگوریتم بانکدار:
n را شماره فرایند و m را شماره منابع موجود قرار دهید. حال به این ساختمان دادهها نیاز است:
توجه: Need = Claim- Allocation
با فرض اینکه سیستم دارای چهار نوع منبع A,B،C,D باشد. این مثال نشان میدهد منابع چگونه اختصاص مییابند. توجه که این مثال مشان میدهد سیستم یک لحظه قبل از درخواست جدید در چه حالتی است.
تعداد کل منابع در سیستم(Resource):
R1 R2 R3 ۶ ۳ ۹
بردار موجودی(Available):
(تعداد به کاررفتن هر منبع در کل فرایندها - تعداد کل آن منبع = موجودی آن منبع)
R1 R2 R3 ۱ ۱ ۰
ماتریس منابع تخصیص یافته (Allocation) :
R1 R2 R3 P1 1 0 0 P2 6 1 2 P3 2 1 1 P4 0 0 2
ماتریس کل درخواست ها(Claim) :
R1 R2 R3 P1 3 2 2 P2 6 1 3 P3 3 1 4 P4 4 2 2
ماتریس منابع مورد نیاز فرایندها برای اتمام (Need):
(کل درخواست - تخصیص یافته =نیاز)
R1 R2 R3 P1 2 2 2 P2 0 0 1 P3 1 0 3 P4 4 2 0
طبیعی است که حالتی که امن نباشد، حالت ناامن است.
میتوانیم با نشان دادن اینکه هر فرایند حداکثر منابع مورد نیاز را دریافت و به پایان میرسد حالت امن را در مثال قبل نشان دهیم.
R1 R2 R3 P1 3 2 2 P2 0 0 0 P3 3 1 4 P4 4 2 2
R1 R2 R3 P1 0 0 0 P2 0 0 0 P3 3 1 4 P4 4 2 2
R1 R2 R3 P1 0 0 0 P2 0 0 0 P3 0 0 0 P4 4 2 2
R1 R2 R3 P1 0 0 0 P2 0 0 0 P3 0 0 0 P4 0 0 0
در مثال قبل فرض کنید مقادیر تخصیص یافته فرایند p2 از <۲ ۱ ۶> به <۱ ۱ ۵> و فرایند p1 از <۰ ۰ ۱> به <۱ ۰ ۲> تغییر حالت دهند. با این تغییر ماتریس نیازها هم تغییر خواهد کرد. یعنی:
ماتریس تخصیص یافتهها :
R1 R2 R3 P1 2 0 1 P2 5 1 1 P3 2 1 1 P4 0 0 2
ماتریس نیازها :
R1 R2 R3 P1 1 2 1 P2 1 0 1 P3 1 0 3 P4 4 2 0
بردار موجودی :
R1 R2 R3 ۱ ۱ ۰