تالار گفتمان مانشت
سوال هفتم از فصل دوم - نسخه‌ی قابل چاپ

سوال هفتم از فصل دوم - hatami - 05 شهریور ۱۳۹۰ ۱۱:۵۲ ب.ظ

چه زمانی اولویت معکوس رخ میدهد و دلیل اصلی اولویت معکوس چیست ؟

سوال هفتم از فصل دوم - _Milad_ - 06 شهریور ۱۳۹۰ ۱۱:۴۵ ب.ظ

فرض کنید ۳ پردازه 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 هست.