موضوع مقاله: معکوس کردن اولویت | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # معکوس کردن اولویت | مقدمه: در علوم کامپیوتر وارونگی اولویت سناریویی در زمان‌بندی است که در آن، یک کار با اولویت پایین‌تر، به‌طور غیر مستقیم موجب توقف اجرای یک کار با اولویت بالاتر می‌شود، که عملاً موجب برعکس شدن اولویت دو عمل در مقایسه با یکدیگر می‌شود. | ## بخش 1: معکوس کردن اولویت | این وضعیت در واقع مخدوش کننده مدل اولویت است که در آن اجرای یک کار با اولویت بالا را فقط می‌توان توسط کارهایی با اولویت بالاتر یا به صورت خیلی کوتاه توسط کارهایی با اولویت پایین که به سرعت از منبع مشترک استفاده می‌کنند به وقفه انداخت. مثال دو کار H و L رو در نظر بگیرید، که به ترتیب دارای ارجحیت بالا و پایین هستند. هر کدام از این دو کار می‌تواند استفاده انحصاری از یک منبع مشترک به نام R را به دست آورد. اگر بعد از این که L منبع را به دست آورد، H تلاش کند تا منبع را به دست گیرد، آنگاه H تا زمانی که L منبع را رها نکرده‌است، مسدود می‌شود. به اشتراک گذاشتن یک منبع با استفاده انحصاری (در این مورد R) در یک سیستم که به خوبی طراحی شده‌است، معمولاً مستلزم این هست که L بلافاصله R را رها کند تا H، که یک کار با ارجحیت بالاتر است، برای مدت طولانی در وضعیت انسداد باقی نماند. با وجود این طراحی خوب، این امکان وجود دارد که یک کار سوم به نام M که دارای ارجحیت متوسط است، در زمانی که L از منبع R استفاده می‌کند، اجرا شود. در این لحظه، M که دارای ارجحیت بالاتر از L هست، اجرای L را متوقف می‌کند (زیرا M وابسته به R نیست) و باعث می‌شود تا L نتواند فوراً R را رها کند و در عوض، موجب می‌شود H که پروسه‌ای با بیشترین ارجحیت است، نتواند اجرا شود. در واقع H دچار یک انسداد غیرقابل پیش‌بینی می‌شود که به‌طور غیر مستقیم توسط یک کار با ارجحیت پایین‌تر نظیر M ایجاد شده‌است. عواقب در برخی موارد وارونگی ارجحیت می‌تواند بدون ایجاد آسیب فوری رخ دهد، در این حالت کسی متوجه نمی‌شود که کار با ارجحیت بالاتر با تأخیر انجام شده‌است و سرانجام کاری که ارجحیت پایین‌تر دارد، منبع مشترک را آزاد می‌کند. | ## بخش 2: معکوس کردن اولویت | با این وجود، موقعیت‌های بسیاری وجود دارد که در آن وارونگی ارجحیت می‌تواند باعث مشکلات جدی شود. کارهایی که دارای ارجحیت پایین‌تری هستند، از این جهت ارجحیت پایین‌تری دارند که برای آنها مهم نیست که فوراً تمام شوند (یک کار دسته ای یا یک فعالیت تعاملی، مثال‌هایی از این دسته هستند). به‌طور مشابه، یک کار با ارجحیت بالا به این دلیل ارجحیت بالاتری دارد که با احتمال بیشتری دارای محدودیت‌های زمانی سفت و سخت است، مثلاً ممکن است این کار برای یک کاربر مشارکتی، داده فراهم کند یا تضمین کنندهٔ پاسخ بی درنگ باشد. از آنجایی که وارونگی ارجحیت موجب می‌شود اجرای یک کار با وضعیت پایین، باعث انسداد یک کار با ارجحیت بالاتر شود، فلذا می‌توانند باعث کاهش پاسخ دهی سیستم یا حتی مخدوش شدن تضمین‌های زمان پاسخ شود. با این وجود، راه حل‌های مختلفی وجود دارند که از بین آنها شایع ترین‌ها به شرح زیر هستند: غیرفعال کردن تمام وقفه‌ها برای محافظت از نواحی بحرانی زمانی که از غیرفعال کردن وقفه‌ها برای پیشگیری از وارونگی ارجحیت استفاده می‌شود، فقط دو ارجحیت وجود دارد: قابلیت بازداشته شدن و وقفه‌های غیرفعال شده. از آنجایی که فقط یک قطعه دادهٔ قفل وجود دارد (بیت فعال کننده وقفه)، فلذا، قفل کردن نامنظم غیرممکن است و بنابراین بن‌بست هرگز رخ نمی‌دهد. از آنجایی که نواحی بحرانی همیشه باید تا کامل شدن اجرا شوند، بنابراین تعلیق نیز رخ نمی‌دهد. اگر فقط وقفهٔ وسیلهٔ سخت‌افزاری خاصی غیرفعال شده باشد، وارونگی ارجحیت مجدداً توسط اولویت بندی وقفه‌ها توسط سخت‌افزار مورد نظر ایجاد می‌شود. با انتخاب مناسب بالاترین اولویت هر وقفه ای که تاکنون وارد ناحیه بحرانی شده‌است، می‌توان مشکل وارونگی ارجحیت را بدون قفل کردن تمام وقفه‌ها برطرف کرد. | ## بخش 3: معکوس کردن اولویت | انتساب سقف‌ها، بترتیب نرخ-یکنواخت است، یعنی ابزارهای کندتر دارای ارجحیت‌های پایین‌تر هستند. در سیستم‌های دارای چندین واحد پردازش مرکزی، یک مدل ساده به نام قفل کردن فلگ منفرد مشترک استفاده می‌شود. در این روش یک فلگ منفرد در حافظه مشترک فراهم می‌شود که توسط تمام واحدهای پردازش مرکزی استفاده می‌شود تا تمام نواحی بحرانی بین پروسه‌ای را با یک انتظار فعال قفل کند. این روش‌ها همچنین، نیازمند برنامه‌نویسی دقیق برای کوتاه کردن زمان نواحی بحرانی هستند. بسیاری از مهندسین نرم‌افزار این روش‌ها را در کامپیوترهای دارای استفاده عمومی غیر عملی می‌دانند. پروتکل سقف ارجحیت در پروتکل سقف ارجحیت، پروسه میوتکس مشترک (که کد سیستم عامل را اجرا می‌کند)، دارای یک ارجحیت مشخصهٔ بالا برای خودش است که به عملی که میوتکس را قفل می‌کند اختصاص داده شده‌است. این روش به خوبی کار می‌کند، به شرط اینکه عمل/اعمال دیگری که سعی می‌کند که به میوتکس دسترسی پیدا کند، دارای ارجحیتی بالاتر از ارجحیت سقف نباشد. زمانی که منبع آزاد شد، عمل دارای ارجحیت پایین، با همان ارجحیت اولیهٔ خود ادامه می‌یابد. تقویت تصادفی اعمال آماده که قفل‌ها را در اختیار دارند، به‌طور تصادفی از نظر ارجحیت تقویت می‌شوند، تا زمانی که از منطقه بحرانی خارج شوند. | ## جمع‌بندی | این راه حل در ویندوزهای مایکروسافت استفاده می‌شود.Priority Inversion on MSDN اجتناب از مسدود کردن از آنجایی که وارونگی ارجحیت، در واقع، زمانی رخ می‌دهد که یک عمل با ارجحیت پایین یک عمل با ارجحیت بالا را مسدود می‌کند، لذا یک راه حل برای پیشگیری از وارونگی ارجحیت این است که از مسدود شدن اجتناب کنیم، برای مثال، با استفاده از همگام سازی غیر مسدودکننده یا روش آماده- کپی-به‌روز رسانی.