05 شهریور 1390, 11:52 ب.ظ
06 شهریور 1390, 11:45 ب.ظ
فرض کنید 3 پردازه A B C داریم که اولویت اونها به صورت A>B>C باشه. پردازه C در حال حاضر CPU رو در اختیار داره و همچنین منبع x که بین A و C مشترک هست رو قفل کرده. بنا به دلیلی (تمام شدن مهلت زمانی، وقوع رویداد خاصی) زمان بند سیستم (scheduler) تصمیم میگره CPU رو پردازه A تخصیص بده. پردازه C نیز باید به حالت منتظر wait بره. پردازه A برای اجرا نیاز به منبع x داره که توسط C قفل شده. چون x جزئی از ناحیه بحرانی C هست و تا زمانی که کار C با x تمام نشده نباید اون رو آزاد کنه سیستم عامل (زمانبند) باید A رو به حالت waiting ببره و دوباره C رو اجرا کنه. در واقع اجرای A تا زمانی که کار C در ناحیه بحرانی تمام نشده باشه به تعویق میافته این در حالیه که اولیت A بالاتر از C هست.
تو اکثر کتاب های درسی به این نکته به عنوان اولویت معکوس اشاره شده. اما داستان بالا زمانی بحرانیتر میشه که پردازه B که اولویتی بیشتر از C و کمتر از A داره این وسط توسط زمانبند برای در اختیار گرفتن CPU انتخاب بشه. پردازه B چون نیازی به x که منبع اشتراکی هست نداره می تونه CPU رو در اختیار بگیره. در این حالت A منتظر C هست تا کارش در ناحیه بحرانی تموم بشه و x رو رها کنه و ازون طرف C منتظر B هست که کارش رو تموم کنه. توجه کنید که اولویت B بیشتر از C هست.
تو اکثر کتاب های درسی به این نکته به عنوان اولویت معکوس اشاره شده. اما داستان بالا زمانی بحرانیتر میشه که پردازه B که اولویتی بیشتر از C و کمتر از A داره این وسط توسط زمانبند برای در اختیار گرفتن CPU انتخاب بشه. پردازه B چون نیازی به x که منبع اشتراکی هست نداره می تونه CPU رو در اختیار بگیره. در این حالت A منتظر C هست تا کارش در ناحیه بحرانی تموم بشه و x رو رها کنه و ازون طرف C منتظر B هست که کارش رو تموم کنه. توجه کنید که اولویت B بیشتر از C هست.