سیستم عامل: سه قطعه آسان. قسمت 5: برنامه ریزی: صف بازخورد چند سطحی (ترجمه)

مقدمه ای بر سیستم عامل ها

هی هابر! من می خواهم توجه شما را به مجموعه ای از مقالات - ترجمه های یک ادبیات جالب به نظر من - OSTEP جلب کنم. این مطالب عمیقاً کار سیستم‌های عامل یونیکس مانند را مورد بحث قرار می‌دهد، یعنی کار با فرآیندها، زمان‌بندی‌های مختلف، حافظه و سایر اجزای مشابه که یک سیستم‌عامل مدرن را تشکیل می‌دهند. شما می توانید اصل تمام مواد را اینجا ببینید اینجا. لطفا توجه داشته باشید که ترجمه غیرحرفه ای (کاملا آزادانه) انجام شده است، اما امیدوارم معنی کلی را حفظ کرده باشم.

کارهای آزمایشگاهی در مورد این موضوع را می توان در اینجا یافت:

قسمت های دیگر:

شما همچنین می توانید از کانال من دیدن کنید تلگرام =)

برنامه ریزی: صف بازخورد چند سطحی

در این سخنرانی در مورد مشکلات توسعه یکی از مشهورترین رویکردها صحبت خواهیم کرد
برنامه ریزی که نامیده می شود صف بازخورد چند سطحی (MLFQ). زمانبندی MLFQ اولین بار در سال 1962 توسط فرناندو جی کورباتو در سیستمی به نام توصیف شد.
سیستم اشتراک زمان سازگار (CTSS). این آثار (از جمله کارهای بعدی
Multics) متعاقباً نامزد جایزه تورینگ شدند. برنامه ریز بود
متعاقباً بهبود یافت و ظاهری را به دست آورد که قبلاً در آن یافت می شود
برخی از سیستم های مدرن

الگوریتم MLFQ سعی می کند 2 مسئله اساسی همپوشانی را حل کند.
اولا، سعی می کند زمان چرخش را بهینه کند، که همانطور که در سخنرانی قبلی بحث کردیم، با روش شروع از سر صف بهینه سازی می شود.
وظایف کوتاه با این حال، سیستم عامل نمی داند که این یا آن فرآیند تا چه زمانی اجرا می شود، و این
دانش لازم برای عملکرد الگوریتم های SJF، STCF. دومین بار، MLFQ تلاش می کند
سیستم را برای کاربران پاسخگو کنید (به عنوان مثال، برای کسانی که می نشینند و
خیره شدن به صفحه هنگام انتظار برای تکمیل کار) و در نتیجه زمان را به حداقل برسانید
واکنش. متأسفانه الگوریتم هایی مانند RR زمان پاسخگویی را کاهش می دهند، اما
تاثیر بدی بر متریک زمان چرخش دارند. از این رو مشکل ما: چگونه طراحی کنیم
برنامه‌ریزی که نیازهای ما را بدون اطلاع از چیزی برآورده می‌کند
ماهیت فرآیند، به طور کلی؟ چگونه زمان‌بند می‌تواند ویژگی‌های وظایف را بیاموزد،
که راه اندازی می کند و بنابراین تصمیمات زمان بندی بهتری می گیرد؟

ماهیت مشکل: چگونه بدون دانش کامل برای تنظیم وظایف برنامه ریزی کنیم؟
چگونه یک زمانبندی طراحی کنیم که به طور همزمان زمان پاسخگویی را به حداقل برساند
برای کارهای تعاملی و در عین حال زمان چرخش را بدون اطلاع به حداقل می رساند
آگاهی از زمان اجرای کار؟

توجه: ما از رویدادهای قبلی درس می گیریم

صف MLFQ یک نمونه عالی از سیستمی است که روی آن آموزش داده شده است
رویدادهای گذشته برای پیش بینی آینده چنین رویکردهایی اغلب هستند
موجود در سیستم عامل (و بسیاری از شاخه های دیگر در علوم کامپیوتر، از جمله شاخه ها
پیش بینی های سخت افزاری و الگوریتم های کش). سفرهای مشابه
زمانی شروع می شود که وظایف دارای مراحل رفتاری بوده و بنابراین قابل پیش بینی هستند.
با این حال، باید مراقب این تکنیک بود، زیرا پیش بینی ها بسیار آسان هستند.
ممکن است اشتباه باشد و سیستم را به سمت تصمیم گیری بدتر از آن سوق دهد
اصلاً بدون دانش خواهد بود.

MLFQ: قوانین اساسی

قوانین اساسی الگوریتم MLFQ را در نظر بگیرید. و اگرچه پیاده سازی های این الگوریتم
چندین وجود دارد، رویکردهای اساسی مشابه هستند.
در پیاده سازی که در نظر خواهیم گرفت، MLFQ چندین خواهد داشت
صف های جداگانه که هر کدام دارای اولویت متفاوتی خواهند بود. هر زمان،
وظیفه آماده برای اجرا در همان صف است. MLFQ از اولویت ها استفاده می کند،
تصمیم بگیرید که کدام وظیفه برای اجرا اجرا شود، یعنی. وظیفه با بالاتر
اولویت (وظیفه از صف با بالاترین اولویت) ابتدا راه اندازی می شود
صف
البته ممکن است بیش از یک کار در یک صف خاص وجود داشته باشد، بنابراین
بنابراین آنها همان اولویت را خواهند داشت. در این صورت از مکانیزم استفاده خواهد شد
RR برای برنامه ریزی راه اندازی در میان این وظایف.
بنابراین ما به دو قانون اساسی برای MLFQ می رسیم:

  • قانون 1: اگر اولویت (A) > اولویت (B)، وظیفه A اجرا می شود (B اجرا نمی شود)
  • قانون 2: اگر اولویت (A) = اولویت (B)، A&B با استفاده از RR شروع می شود

بر اساس موارد فوق، عناصر کلیدی برای برنامه ریزی یک MLFQ هستند
اولویت هستند. به جای دادن اولویت ثابت به هر کدام
وظیفه، MLFQ اولویت خود را بسته به رفتار مشاهده شده تغییر می دهد.
به عنوان مثال، اگر یک کار به طور مداوم از CPU خارج شود در حالی که منتظر ورودی صفحه کلید است،
MLFQ اولویت فرآیند را بالا نگه می‌دارد زیرا اینگونه است
فرآیند تعاملی باید کار کند. در صورتی که برعکس، تکلیف دائما و
برای یک دوره طولانی CPU فشرده است، MLFQ آن را کاهش می دهد
یک اولویت. بنابراین، MLFQ رفتار فرآیندها را در زمان اجرای آنها مطالعه خواهد کرد.
و از رفتارها استفاده کنید.
بیایید مثالی از اینکه صف ها ممکن است در یک نقطه به نظر برسند
زمان و سپس چیزی شبیه به این دریافت می کنید:
سیستم عامل: سه قطعه آسان. قسمت 5: برنامه ریزی: صف بازخورد چند سطحی (ترجمه)

در این طرح، 2 فرآیند A و B با بالاترین اولویت در صف قرار دارند. روند
C جایی در وسط است و پردازش D در انتهای صف قرار دارد. با توجه به موارد فوق
با توصیف الگوریتم MLFQ، زمان‌بند تنها وظایفی را با بالاترین موارد اجرا می‌کند
اولویت با توجه به RR، و وظایف C، D بیکار خواهند بود.
به طور طبیعی، یک عکس فوری استاتیک تصویر کاملی از نحوه عملکرد MLFQ ارائه نمی دهد.
درک اینکه دقیقاً چگونه تصویر در طول زمان تغییر می کند بسیار مهم است.

تلاش 1: نحوه تغییر اولویت

در این مرحله، شما باید تصمیم بگیرید که چگونه MLFQ سطح اولویت را تغییر می دهد
وظیفه (و در نتیجه موقعیت وظیفه در صف) در طول چرخه عمر آن. برای
در این مورد، باید گردش کار را در نظر داشته باشید: مقدار مشخصی
وظایف تعاملی با زمان اجرای کوتاه (و در نتیجه انتشار مکرر
CPU) و چندین کار طولانی که از CPU تمام زمان کار خود استفاده می کنند، در حالی که
زمان پاسخگویی برای چنین کارهایی مهم نیست. و بنابراین شما می توانید اولین تلاش را انجام دهید
الگوریتم MLFQ را با قوانین زیر پیاده سازی کنید:

  • قانون 3: هنگامی که یک وظیفه وارد سیستم می شود، در صف با بالاترین قرار می گیرد
  • اولویت.
  • Rule4a: اگر یک کار از کل پنجره زمانی اختصاص داده شده به آن استفاده می کند، آن وقت است
  • اولویت کاهش یافته است
  • Rule4b: اگر یک Task CPU را قبل از انقضای پنجره زمانی خود آزاد کند، پس آن را انجام می دهد
  • با همان اولویت باقی می ماند.

مثال 1: تک کار طولانی مدت

همانطور که در این مثال می بینید، وظیفه در پذیرش با بالاترین تعیین می شود
اولویت. پس از یک پنجره زمانی 10 میلی‌ثانیه، فرآیند در اولویت قرار می‌گیرد
زمان بندی پس از پنجره زمانی بعدی، کار در نهایت به کاهش می یابد
کمترین اولویت در سیستم، جایی که باقی می ماند.
سیستم عامل: سه قطعه آسان. قسمت 5: برنامه ریزی: صف بازخورد چند سطحی (ترجمه)

مثال 2: یک کار کوتاه ارائه کرد

حال بیایید نمونه ای از چگونگی تلاش MLFQ برای نزدیک شدن به SJF ببینیم. در آن
به عنوان مثال، دو وظیفه: A، که یک کار طولانی مدت است که دائماً انجام می شود
اشغال CPU و B که یک کار تعاملی کوتاه است. فرض کنید
که A قبلاً برای مدتی در حال اجرا بود تا زمانی که وظیفه B رسید.
سیستم عامل: سه قطعه آسان. قسمت 5: برنامه ریزی: صف بازخورد چند سطحی (ترجمه)

این نمودار نتایج سناریو را نشان می دهد. وظیفه A، مانند هر کار،
استفاده از CPU در پایین ترین نقطه قرار داشت. وظیفه B در زمان T=100 خواهد رسید و خواهد رسید
در صف با بالاترین اولویت قرار می گیرد. از آنجایی که زمان اجرا کوتاه است،
قبل از رسیدن به آخرین صف کامل می شود.

از این مثال، شما باید هدف اصلی الگوریتم را درک کنید: زیرا الگوریتم اینطور نیست
یک کار طولانی یا کوتاه می داند، سپس اول از همه آن کار را فرض می کند
کوتاه است و به آن بیشترین اولویت را می دهد. اگر واقعاً کار کوتاهی است، پس
به سرعت اجرا می شود، در غیر این صورت اگر کار طولانی باشد به آرامی حرکت می کند
در اولویت قرار دارد و به زودی ثابت خواهد کرد که او واقعاً یک کار طولانی است که انجام نمی دهد
نیاز به پاسخ دارد.

مثال 3: در مورد I/O چطور؟

حالا بیایید به یک مثال I/O نگاه کنیم. همانطور که در قانون 4b بیان شد،
اگر فرآیندی بدون استفاده کامل از زمان پردازنده، پردازنده را آزاد کند،
سپس در همان سطح اولویت باقی می ماند. هدف این قانون بسیار ساده است.
- اگر کار تعاملی مقدار زیادی ورودی/خروجی را انجام دهد، برای مثال، منتظر است
از طریق فشار دادن کلید کاربر یا ماوس، چنین کاری پردازنده را آزاد می کند
قبل از پنجره اختصاص داده شده ما نمی خواهیم چنین وظیفه اولویت دار را حذف کنیم،
و بنابراین در همان سطح باقی خواهد ماند.
سیستم عامل: سه قطعه آسان. قسمت 5: برنامه ریزی: صف بازخورد چند سطحی (ترجمه)

این مثال نشان می دهد که چگونه الگوریتم با چنین فرآیندهایی کار می کند - وظیفه تعاملی B، که قبل از اجرا فقط به CPU برای 1 میلی ثانیه نیاز دارد.
فرآیند I/O و یک کار طولانی A، که همیشه از CPU استفاده می کند.
MLFQ فرآیند B را در بالاترین اولویت نگه می دارد زیرا ادامه دارد
CPU را آزاد کنید اگر B یک کار تعاملی است، پس الگوریتم در این مورد رسیده است
هدف شما اجرای سریع وظایف تعاملی است.

مشکلات با الگوریتم فعلی MLFQ

در مثال‌های قبلی یک نسخه پایه از MLFQ ساختیم. و به نظر می رسد که او
کار خود را به خوبی و منصفانه انجام می دهد و زمان CPU را به طور عادلانه بین آنها توزیع می کند
کارهای طولانی و اجازه دادن به کارهای کوتاه یا کارهایی که به شدت قابل دسترسی هستند
به I/O برای پردازش سریع. متأسفانه این رویکرد شامل چندین مورد است
مشکلات جدی
اولا، مشکل گرسنگی: اگر سیستم تعاملی زیادی داشته باشد
وظایف، آنها تمام زمان CPU را مصرف می کنند و بنابراین یک زمان طولانی را مصرف نمی کنند
این کار فرصتی برای اجرا نخواهد داشت (آنها از گرسنگی می میرند).

دومین بار، کاربران هوشمند می توانستند برنامه های خود را بنویسند تا
برنامه ریز را گول بزن فریب در انجام کاری برای زورگویی نهفته است
زمانبندی برای دادن زمان بیشتری به CPU به فرآیند. الگوریتمی که
توضیح داده شده در بالا کاملاً در برابر چنین حملاتی آسیب پذیر است: قبل از اینکه پنجره زمانی عملاً باشد
در پایان، شما باید یک عملیات I/O را انجام دهید (برای برخی، مهم نیست کدام فایل)
و در نتیجه CPU را آزاد کنید. چنین رفتاری به شما این امکان را می دهد که در همان حالت باقی بمانید
خود صف و دوباره درصد بیشتری از زمان CPU را دریافت کنید. اگر انجام دهید
این درست است (به عنوان مثال، 99٪ از زمان پنجره را قبل از انتشار CPU اجرا کنید)،
چنین کاری به سادگی می تواند پردازنده را در انحصار خود درآورد.

در نهایت، یک برنامه می تواند رفتار خود را در طول زمان تغییر دهد. آن وظایف
که از CPU استفاده می کند می تواند تعاملی شود. در مثال ما، مشابه
وظایف، مانند سایرین، از زمان‌بندی‌کننده درمان مناسبی دریافت نمی‌کنند
وظایف تعاملی (اصلی).

سوال از مخاطب: در دنیای مدرن چه حملاتی می‌توان به زمان‌بند انجام داد؟

تلاش 2: افزایش اولویت

بیایید سعی کنیم قوانین را تغییر دهیم و ببینیم آیا می توانیم از مشکلات جلوگیری کنیم
گرسنگی چه کاری می توانیم انجام دهیم تا اطمینان حاصل کنیم که مرتبط است
وظایف CPU زمان خود را خواهند گرفت (حتی اگر طولانی نباشد).
به عنوان یک راه حل ساده برای مشکل، می توانید به صورت دوره ای پیشنهاد دهید
اولویت همه این وظایف را در سیستم افزایش دهید. راه های زیادی وجود دارد
برای رسیدن به این هدف، بیایید سعی کنیم چیزی ساده را به عنوان مثال پیاده سازی کنیم: ترجمه
همه وظایف به طور همزمان به بالاترین اولویت، از این رو قانون جدید:

  • قانون 5: پس از مدتی S، تمام وظایف موجود در سیستم را به بالاترین صف انتقال دهید.

قانون جدید ما دو مشکل را همزمان حل می کند. اول، فرآیندها
تضمین می شود که گرسنگی نکشند: وظایفی که در بالاترین اولویت قرار دارند تقسیم می شوند
زمان پردازشگر طبق الگوریتم RR و در نتیجه تمام فرآیندها دریافت خواهند کرد
زمان پردازنده دوم، اگر برخی از فرآیندهایی که قبلا استفاده می شد
فقط پردازنده تعاملی می شود، در صف با بالاترین باقی می ماند
اولویت پس از دریافت یک بار افزایش به بالاترین اولویت.
بیایید به یک مثال نگاه کنیم. در این سناریو، یک فرآیند را با استفاده از آن در نظر بگیرید
سیستم عامل: سه قطعه آسان. قسمت 5: برنامه ریزی: صف بازخورد چند سطحی (ترجمه)

CPU و دو پردازش کوتاه و تعاملی. در سمت چپ در شکل، شکل رفتار را بدون تقویت اولویت نشان می دهد، و بنابراین پس از رسیدن دو کار تعاملی به سیستم، کار طولانی مدت شروع به گرسنگی می کند. در شکل سمت راست، هر 50 میلی‌ثانیه یک افزایش اولویت انجام می‌شود و به این ترتیب تمامی فرآیندها تضمین زمان دریافت پردازنده را دارند و به صورت دوره‌ای شروع خواهند شد. 50 میلی‌ثانیه در این مورد به عنوان مثال در نظر گرفته می‌شود؛ در واقع این عدد کمی بیشتر است.
بدیهی است که افزودن زمان افزایش تناوبی S منجر به
سوال منطقی: چه مقدار باید تعیین شود؟ یکی از شایسته ها
مهندسان سیستم John Ousterhout به مقادیر مشابه در سیستم ها به عنوان voo-doo اشاره کردند
ثابت است، زیرا آنها به نوعی به جادوی سیاه برای درست نیاز داشتند
قرار گرفتن در معرض بیماری. و متاسفانه S چنین بویی دارد. اگر مقدار را هم تنظیم کنید
کارهای بزرگ - طولانی گرسنه خواهند ماند. و اگر آن را خیلی پایین تنظیم کنید،
وظایف تعاملی زمان مناسب CPU را دریافت نمی کنند.

تلاش 3: حسابداری بهتر

اکنون یک مشکل دیگر داریم که باید حل کنیم: چگونه نتوانیم
اجازه می دهیم برنامه ریز ما فریب بخورد؟ مردم مقصر این احتمال هستند
قوانین 4a, 4b که به یک کار اجازه می دهد با آزاد کردن پردازنده اولویت خود را حفظ کند
قبل از انقضای زمان تعیین شده باید باهاش ​​چکار کنم؟
راه حل در این مورد می تواند محاسبه بهتر زمان CPU در هر کدام در نظر گرفته شود
سطح MLFQ به جای فراموش کردن زمان استفاده از برنامه
پردازنده برای بازه اختصاص داده شده، باید آن را در نظر بگیرید و ذخیره کنید. بعد از
این فرآیند زمان اختصاص داده شده خود را مصرف کرده است، باید به مرحله بعدی تنزل داده شود
سطح اولویت اکنون مهم نیست که فرآیند چگونه از زمان خود استفاده کند - چگونه
در حال محاسبه مداوم بر روی پردازنده یا به صورت تعدادی تماس. بدین ترتیب،
قانون 4 باید به صورت زیر بازنویسی شود:

  • قانون 4: بعد از اینکه یک کار زمان تخصیص داده شده خود را در صف فعلی مصرف کرد (مهم نیست چند بار CPU را آزاد کرد)، اولویت آن کار کاهش می یابد (در صف به پایین حرکت می کند).

بیایید به یک مثال نگاه کنیم:
سیستم عامل: سه قطعه آسان. قسمت 5: برنامه ریزی: صف بازخورد چند سطحی (ترجمه)»

شکل نشان می‌دهد که اگر بخواهید برنامه‌ریز را فریب دهید چه اتفاقی می‌افتد
اگر با قوانین قبلی 4a، 4b بود، نتیجه سمت چپ بدست می آمد. جدید مبارک
قانون این است که نتیجه در سمت راست است. قبل از محافظت، هر فرآیندی می‌تواند قبل از تکمیل، I/O را فراخوانی کند
بنابراین، پس از فعال کردن حفاظت، بدون توجه به رفتار، بر CPU تسلط داشته باشید
I/O، او همچنان در صف پایین می‌آید و بنابراین نمی‌تواند ناصادقانه عمل کند
منابع CPU را در اختیار بگیرید.

بهبود MLFQ و مسائل دیگر

با پیشرفت های فوق، مشکلات جدیدی به وجود می آید: یکی از اصلی ترین
سوالات - چگونه می توان چنین زمانبندی را پارامتر کرد؟ آن ها چقدر باید باشد
صف ها؟ اندازه پنجره برنامه در صف چقدر باید باشد؟ چگونه
برای جلوگیری از گرسنگی و گرسنگی برنامه اغلب باید اولویت بندی شود
تغییر در رفتار برنامه را در نظر بگیرید؟ برای این سوالات، هیچ چیز ساده ای وجود ندارد
پاسخ و فقط آزمایش با بارها و پیکربندی بعدی
برنامه ریز ممکن است به تعادل رضایت بخشی منجر شود.

به عنوان مثال، اکثر پیاده سازی های MLFQ به شما اجازه می دهند تا موارد مختلفی را اختصاص دهید
شکاف های زمانی برای صف های مختلف معمولاً صف های با اولویت بالا هستند
فواصل کوتاه این صف ها شامل وظایف تعاملی هستند،
جابجایی بین که بسیار حساس است و باید 10 یا کمتر طول بکشد
ام‌اس. در مقابل، صف‌های با اولویت پایین شامل وظایف طولانی مدتی هستند که استفاده می‌کنند
CPU. و در این مورد، فواصل زمانی طولانی بسیار مناسب است (100 میلی ثانیه).
سیستم عامل: سه قطعه آسان. قسمت 5: برنامه ریزی: صف بازخورد چند سطحی (ترجمه)

در این مثال، 2 کار وجود دارد که در صف 20 با اولویت بالا کار کرده اند
ms به ویندوزهای 10ms تقسیم می شود. 40 میلی‌ثانیه در صف میانی (پنجره 20 میلی‌ثانیه) و در صف با اولویت پایین
پنجره زمان صف 40 میلی‌ثانیه شد، جایی که وظایف کار خود را تکمیل کردند.

پیاده سازی MLFQ در سیستم عامل Solaris یک کلاس از زمانبندی های اشتراک زمانی است.
زمان‌بند مجموعه‌ای از جداول را ارائه می‌کند که دقیقاً چگونه باید تعریف شود
اولویت فرآیند را در طول عمر آن تغییر دهید، اندازه آن چقدر باید باشد
پنجره اختصاص داده شده و اینکه هر چند وقت یکبار باید اولویت های کار را افزایش دهید. مدیر
سیستم ها می توانند با این جدول تعامل داشته باشند و باعث رفتار زمانبندی شوند
متفاوت این جدول به طور پیش فرض دارای 60 صف با افزایش تدریجی است
اندازه پنجره از 20 میلی‌ثانیه (اولویت بالا) تا چند صد میلی‌ثانیه (اولویت پایین) و
همچنین با تقویت تمام وظایف یک بار در ثانیه.

سایر زمانبندی های MLFQ از جدول یا جدول خاصی استفاده نمی کنند
قوانینی که در این فصل توضیح داده شده است، برعکس، با استفاده از اولویت ها را محاسبه می کنند
فرمول های ریاضی برای مثال، زمانبندی FreeBSD از فرمولی برای
اولویت فعلی یک کار را بر اساس مدت زمان انجام فرآیند محاسبه کنید
از CPU استفاده کرد علاوه بر این، استفاده از CPU در طول زمان پوسیده می شود و بنابراین
بنابراین، افزایش اولویت تا حدودی متفاوت از آنچه در بالا توضیح داده شد رخ می دهد. درست است
به نام الگوریتم های فروپاشی از نسخه 7.1، FreeBSD از زمانبندی ULE استفاده کرده است.

در نهایت، بسیاری از برنامه ریزان ویژگی های دیگری نیز دارند. مثلا بعضی ها
زمانبندها سطوح بالاتری را برای عملکرد سیستم عامل رزرو می کنند و بنابراین
بنابراین، هیچ فرآیند کاربری نمی تواند بالاترین اولویت را داشته باشد
سیستم. برخی از سیستم ها به شما اجازه می دهند برای کمک به شما مشاوره بدهید
برنامه ریز می تواند اولویت ها را به درستی تعیین کند. به عنوان مثال با استفاده از دستور خوب
می توانید اولویت یک کار را کم یا زیاد کنید و در نتیجه کم یا زیاد کنید
شانس برنامه برای زمان CPU را کاهش دهید.

MLFQ: خلاصه

ما یک رویکرد برنامه ریزی به نام MLFQ را شرح داده ایم. نام او
نتیجه گیری در اصل عملیات - دارای چندین صف است و از بازخورد استفاده می کند
برای اولویت بندی یک کار
شکل نهایی قوانین به شرح زیر خواهد بود:

  • قانون 1: اگر اولویت (A) > اولویت (B)، وظیفه A اجرا می شود (B اجرا نمی شود)
  • قانون 2: اگر اولویت (A) = اولویت (B)، A&B با استفاده از RR شروع می شود
  • قانون 3: زمانی که وظیفه ای وارد سیستم می شود در صف با اولویت بالاتر قرار می گیرد.
  • قانون 4: بعد از اینکه یک کار زمان تخصیص داده شده خود را در صف فعلی مصرف کرد (مهم نیست چند بار CPU را آزاد کرد)، اولویت آن کار کاهش می یابد (در صف به پایین حرکت می کند).
  • قانون 5: پس از مدتی S، تمام وظایف موجود در سیستم را به بالاترین صف انتقال دهید.

MLFQ به دلیل زیر جالب است - به جای نیاز به دانش در مورد
ماهیت کار از قبل، الگوریتم رفتار گذشته کار را یاد می گیرد و مجموعه می دهد
بر این اساس اولویت ها بنابراین، او سعی می کند همزمان روی دو صندلی بنشیند - برای دستیابی به عملکرد برای کارهای کوچک (SJF، STCF) و صادقانه کارهای طولانی را اجرا کند.
کارهای بارگیری CPU بنابراین، بسیاری از سیستم ها، از جمله BSD و مشتقات آنها،
سولاریس، ویندوز، مک از نوعی الگوریتم به عنوان زمان‌بندی استفاده می‌کنند
MLFQ به عنوان یک خط پایه.

مواد اضافی:

  1. manpages.debian.org/stretch/manpages/sched.7.en.html
  2. en.wikipedia.org/wiki/Scheduling_(محاسبات)
  3. pages.lip6.fr/Julia.Lawall/atc18-bouron.pdf
  4. www.usenix.org/legacy/event/bsdcon03/tech/full_papers/roberson/roberson.pdf
  5. chebykin.org/freebsd-process-scheduling

منبع: www.habr.com

اضافه کردن نظر