دو رویکرد اصلی زمان‌بندی که امروز تعیین‌کننده‌اند

در سیستم‌عامل‌ها دو فلسفهٔ زمان‌بندی رایج وجود دارد: مدل پیش‌گیرانه مبتنی بر اولویت که در خانوادهٔ Windows NT ریشه دارد و مدل عدالت‌محور پویا که یکی از مشهورترین پیاده‌سازی‌های آن در لینوکس با Completely Fair Scheduler (CFS) دیده می‌شود. در ادامه مکانیک‌های کلیدی هر رویکرد، تفاوت‌های عملی و سناریوهایی که هر کدام مزیت دارند، تشریح شده است.

پیش‌زمینهٔ تاریخی کوتاه

نسخ اولیهٔ یونیکس و سیستم‌هایی مانند VAX/VMS از اسلایس‌های زمانی ثابت و صف‌های چندگانهٔ اولویت استفاده می‌کردند: هر وظیفه یک بازهٔ زمانی مشخص می‌گرفت و پس از اتمام اسلایس، زمان‌بند به فرایند بعدی می‌رفت. ویندوز همچنان روی صف‌های اولویت و تقویت‌های دینامیک (priority boosting) برای حفظ پاسخ‌پذیری کار می‌کند. لینوکس از معماری O(1) به سمت مدل‌های مبتنی بر vruntime حرکت کرد و با معرفی CFS در هستهٔ 2.6.23، سیاست عدالت‌محور را به‌عنوان کلاس پیش‌فرض برای کارهای عادی پذیرفت.

واژگان کلیدی

  • قابل‌اجرا در مقابل مسدود: قابل‌اجرا (runnable) آمادهٔ استفاده از CPU است؛ مسدود (blocked) منتظر I/O یا قفل است.
  • وابسته به پردازنده در مقابل وابسته به I/O: برنامه‌های پردازش‌محور بیشتر زمان را روی CPU مصرف می‌کنند؛ برنامه‌های تعاملی معمولاً I/O-محورند.
  • رشته‌ها در مقابل فرایندها: در لینوکس زمان‌بندی در سطح رشته انجام می‌شود؛ هر رشته می‌تواند مستقل زمان‌بندی شود.

CFS لینوکس: عدالت مبتنی بر vruntime

مکانیزم‌های کلیدی

CFS برای پیگیری سهم هر رشته از CPU از مقدار عددی vruntime استفاده می‌کند: هرچه vruntime یک رشته کمتر باشد، آن رشته زمان CPU کمتری دریافت کرده و اولویت اجرای بعدی‌اش بیشتر می‌شود. وظایف قابل‌اجرا در یک درخت قرمز-سیاه نگهداری می‌شوند و Scheduler گرهِ با کمترین vruntime را انتخاب می‌کند.

به جای تخصیص اسلایس ثابت، CFS یک target latency تعریف می‌کند (حدود 20 میلی‌ثانیه به‌صورت پیش‌فرض) و اسلایس مؤثر هر کار را به‌صورت target_latency / N محاسبه می‌کند که N تعداد کارهای قابل‌اجراست. با افزایش رقابت، اسلایس‌ها کوچک‌تر و با کاهش رقابت بزرگ‌تر می‌شوند که تجربهٔ چندوظیفگی منصفانه‌تری فراهم می‌آورد.

نمایشی از درخت vruntime در CFS و انتخاب گره چپ‌ترین

مزایا

  • توزیع منصفانهٔ زمان CPU بین نخ‌ها
  • قابلیت وزن‌دهی بر اساس اولویت نسبی برای کنترل سهم منابع
  • پیش‌بینی بهتر در بارهای متشکل از چندین کار هم‌زمان

محدودیت‌ها و نکات عملی

  • برای تحقق تأخیر سخت یا بلادرنگ طراحی نشده؛ در این موارد باید از کلاس‌های بلادرنگ مانند SCHED_FIFO و SCHED_RR یا مکانیزم‌های خاص استفاده شود.
  • در بارهای بسیار تعامل‌محور بدون تنظیم مناسب I/O و سیاست‌های تعاملی ممکن است پاسخ‌پذیری مطلوب حاصل نشود.

زمان‌بند ویندوز: اولویت و حفظ پاسخ‌پذیری

مکانیزم‌های کلیدی

زمان‌بند ویندوز بر پایهٔ صف‌های اولویت طراحی شده و از تقویت دینامیک اولویت برای حفظ پاسخ‌پذیری استفاده می‌کند. هر رشته یک سطح اولویت دارد و سیستم می‌تواند به‌طور پویا اولویت را افزایش دهد، مثلاً زمانی که رشته‌ای پس از یک انتظار کوتاه برای I/O دوباره قابل‌اجرا می‌شود.

صف‌های اولویت و مکانیزم افزایش اولویت در زمان‌بند ویندوز

مزایا

  • پاسخ‌پذیری بالاتر در محیط‌های دسکتاپ و تعاملی
  • خروجی حسی بهتر در تعامل‌های کاربری (تأخیر کمتر محسوس)
  • مکانیزم‌های بهینه‌شده برای تقویت اولویت فرآیندهای UI

محدودیت‌ها

  • در تلاش برای حفظ پاسخ‌پذیری ممکن است سهم پردازنده از وظایف سنگین کاسته شود.
  • در سیستم‌های با بار سنگین تنوع اولویت‌ها می‌تواند مدیریت را پیچیده و رفتار را تا حدی غیرقابل‌پیش‌بینی کند.

مقایسهٔ عملی: چه زمانی کدام بهتر است؟

  • سرورهای محاسباتی و دسته‌ای: CFS (یا پالیسی‌هایی مثل SCHED_BATCH) برای توزیع مناسب و افزایش کلیِ throughput مناسب‌تر است.
  • دسکتاپ و تعامل با کاربر: سیاست‌های مبتنی بر اولویت ویندوز برای حفظ پاسخ‌پذیری لحظه‌ای برتری دارند؛ لینوکس با تنظیم I/O و سیاست‌های تعاملی می‌تواند به نزدیک شدن کمک کند.
  • سیستم‌های بلادرنگ: هر دو پلتفرم کلاس‌ها یا سیاست‌های ویژه برای کاربردهای بلادرنگ دارند و انتخاب باید بر اساس الزامات تأخیر و تضمین زمان‌بندی انجام شود.

راهنمای عملی برای توسعه‌دهندگان و اپراتورها

توصیه‌ها:

  • برای برنامه‌نویسان لینوکس: درک vruntime و اثر I/O بر نوبت‌دهی کمک می‌کند تا برنامه‌های تعاملی و محاسباتی را بهتر بهینه کنید؛ در صورت نیاز از کلاس‌های بلادرنگ یا تغییر وزن‌ها استفاده کنید.
  • برای مدیران سیستم: انتخاب بین لینوکس و ویندوز باید براساس نوع بار کاری صورت گیرد؛ اگر کنترل دقیق سهم CPU و عدالت مهم است، لینوکس با CFS گزینهٔ قدرتمندی است؛ اگر اولویت اصلی تأخیر کاربر نهایی است، سیاست‌های ویندوز مناسب‌ترند.
  • هرگز تنظیم‌های پیش‌فرض را بدون آزمایش روی بار واقعی به‌شکل عمومی اعمال نکنید؛ پروفایل‌گیری و telemetry می‌تواند تصمیم‌گیری را دقیق‌تر کند.

نگاه رو به جلو

با افزایش هم‌زمانی بارها، هسته‌های چندپردازشی و شتاب‌دهنده‌های اختصاصی، نیاز به زمان‌بندی‌های ترکیبی که عدالت و پاسخ‌پذیری را هم‌زمان تأمین کنند، بیشتر می‌شود. آینده احتمالاً ترکیبی از سیاست‌ها، تنظیمات دقیق‌تر اولویت‌ها و استفادهٔ هوشمند از داده‌های telemetry برای تخصیص منابع خواهد بود.