کالبدشکافی زمانبندی پردازنده: چگونه کامپیوتر شما هزاران کار را همزمان انجام میدهد؟
سیستمعاملها با استفاده از الگوریتمهای پیچیده زمانبندی و تقسیم زمان پردازنده به قطعات میلیثانیهای، توهم اجرای همزمان هزاران برنامه را خلق میکنند.
به قلم ایمان شریعتی
این خبر را به اشتراک بگذارید
- مدافعان عدالت پردازشی
- بر این باورند که هیچ برنامهای نباید پردازنده را در انحصار خود درآورد و منابع باید به صورت ریاضیوار و عادلانه تقسیم شوند.
- طرفداران اولویتبندی مطلق
- معتقدند سیستمعامل باید کنترل دقیقی به توسعهدهنده بدهد تا برنامههای حساس بدون هیچ تاخیری اجرا شوند.
- بهینهسازان مصرف انرژی
- تمرکز آنها بر این است که زمانبند پردازنده برنامهها را به گونهای مدیریت کند که هستهها در سریعترین زمان ممکن به حالت خواب بروند.
دیدگاههایی که این گزارش پوشش نداده
- توسعهدهندگان سختافزار پردازنده
- طراحان سیستمهای نهفته (Embedded Systems)
نکات کلیدی
- پردازندهها در هر لحظه تنها یک دستور را روی یک هسته اجرا میکنند و اجرای همزمان یک توهم نرمافزاری است.
- سیستمعامل با استفاده از برشهای زمانی ۱۰ تا ۱۰۰ میلیثانیهای، برنامهها را به سرعت جابهجا میکند.
- ویندوز از ۳۲ سطح اولویت مطلق برای مدیریت برنامهها استفاده میکند.
- لینوکس با استفاده از زمانبند CFS و ساختار درخت سرخ-سیاه، زمان پردازنده را به صورت عادلانه تقسیم میکند.
- تعویض بافت (Context Switch) هزینهای است که سیستم برای جابهجایی بین برنامهها میپردازد.
وقتی یک مرورگر وب را باز میکنید، همزمان به یک موسیقی گوش میدهید و فایلی در پسزمینه دانلود میشود، شاید تصور کنید پردازنده کامپیوتر شما در حال انجام تمام این کارها به صورت همزمان است. این همان توهمی است که شرکتهای فناوری تحت عنوان «چندوظیفگی» (Multitasking) به ما میفروشند. اما واقعیت این است که در سطح سیلیکون، یک هسته پردازنده در هر لحظه تنها میتواند یک دستورالعمل را اجرا کند. این سیستمعامل و به طور دقیقتر «زمانبند پردازنده» (CPU Scheduler) است که تصمیم میگیرد کدام برنامه، چه زمانی و برای چند میلیثانیه حق استفاده از مغز کامپیوتر را داشته باشد. زمانبند، دیکتاتور مطلق زمان در دنیای دیجیتال است.[3][5]
برای درک این شعبدهبازی، باید به مفهوم «برش زمانی» (Time Slicing) نگاه کنیم. سیستمعامل زمان پردازنده را به قطعات بسیار کوچکی تقسیم میکند که معمولاً بین ۱۰ تا ۱۰۰ میلیثانیه طول میکشند. زمانبند، یکی از این قطعات را به مرورگر شما میدهد، قطعه بعدی را به پخشکننده موسیقی و بعدی را به مدیر دانلود. این جابهجاییها آنقدر سریع اتفاق میافتند که چشم و گوش انسان قادر به تشخیص وقفهها نیست و توهم اجرای همزمان شکل میگیرد.[3]
اما این جابهجایی هزینهای دارد که به آن «تعویض بافت» (Context Switch) میگویند. وقتی زمان یک برنامه تمام میشود، پردازنده باید تمام اطلاعات، متغیرها و وضعیت فعلی آن برنامه را در حافظه ذخیره کند و اطلاعات برنامه بعدی را بارگذاری نماید. این فرآیند که معمولاً چند میکروثانیه زمان میبرد، یک سربار خالص برای سیستم است. اگر زمانبند خیلی سریع برنامهها را جابهجا کند، پردازنده بیشتر وقت خود را صرف تعویض بافت میکند تا اجرای واقعی برنامهها.[3][4]
آبراهام سیلبرشاتز، نویسنده کتاب مرجع مفاهیم سیستمعامل، این چرخه را به خوبی توصیف میکند: «تقریباً تمام برنامهها دارای یک چرخه متناوب از محاسبات سنگین پردازنده و انتظار برای ورود و خروج اطلاعات (I/O) هستند.» به عبارت دیگر، برنامهها همیشه به پردازنده نیاز ندارند. وقتی مرورگر شما منتظر دریافت اطلاعات از اینترنت است، پردازنده بیکار میماند. هنر زمانبند این است که در این لحظات بیکاری، بلافاصله پردازش دیگری را جایگزین کند تا هیچ چرخه پردازشی هدر نرود.[4]
در روزهای ابتدایی محاسبات، الگوریتمها ساده بودند. روش «اولین ورودی، اولین خروجی» (FCFS) دقیقاً مانند صف نانوایی کار میکرد. برنامهای که زودتر میرسید، پردازنده را در اختیار میگرفت تا کارش تمام شود. اما این روش یک مشکل بزرگ داشت: اثر کاروان (Convoy Effect). اگر یک برنامه سنگین و طولانی جلوی صف قرار میگرفت، تمام برنامههای کوچک و سریع پشت سر آن مسدود میشدند و کل سیستم به حالت انجماد درمیآمد.[3]
روش «اولین ورودی، اولین خروجی» (FCFS) دقیقاً مانند صف نانوایی کار میکرد.
برای حل این مشکل، الگوریتم «راند رابین» (Round Robin) معرفی شد. در این روش، به هر برنامه یک سهمیه زمانی ثابت داده میشود. وقتی زمان برنامه تمام شد، حتی اگر کارش به پایان نرسیده باشد، به انتهای صف فرستاده میشود تا نوبت به بقیه برسد. این الگوریتم پایه و اساس سیستمعاملهای مدرن را شکل داد، اما هنوز برای مدیریت پیچیدگیهای امروزی کافی نبود. برنامههای حساس مانند پخش ویدیو به توجه فوری نیاز دارند، در حالی که برنامههای پسزمینه میتوانند منتظر بمانند.[3][4]
مایکروسافت در سیستمعامل ویندوز، رویکرد «صفهای اولویتدار» را در پیش گرفت. بر اساس مستندات رسمی مایکروسافت، ویندوز دارای ۳۲ سطح اولویت است که از ۰ (پایینترین) تا ۳۱ (بالاترین) متغیر است. رشتههای پردازشی بر اساس کلاس اولویت فرآیند خود در این سطوح قرار میگیرند. زمانبند ویندوز همیشه بالاترین اولویت موجود را اجرا میکند و در بین برنامههای همسطح، از روش راند رابین استفاده میکند. اگر یک برنامه با اولویت بالا آماده اجرا شود، ویندوز بیدرنگ برنامه فعلی را متوقف کرده و پردازنده را به برنامه مهمتر میدهد.[1]
در مقابل، لینوکس مسیر کاملاً متفاوتی را انتخاب کرد. در سال ۲۰۰۷ و با انتشار هسته نسخه ۲.۶.۲۳، لینوکس زمانبند جدیدی به نام «زمانبند کاملاً عادلانه» (Completely Fair Scheduler یا CFS) را معرفی کرد. هدف CFS این است که پردازنده را مانند یک منبع ایدهآل و بینهایت تقسیمپذیر بین تمام برنامهها به اشتراک بگذارد. به جای استفاده از صفهای اولویت سنتی، CFS از یک ساختار داده پیشرفته به نام «درخت سرخ-سیاه» (Red-Black Tree) استفاده میکند.[2]
در قلب CFS مفهومی به نام «زمان اجرای مجازی» (vruntime) قرار دارد. هرچه یک برنامه زمان بیشتری از پردازنده استفاده کند، vruntime آن افزایش مییابد. زمانبند لینوکس همیشه برنامهای را برای اجرا انتخاب میکند که کمترین vruntime را داشته باشد (چپترین گره در درخت سرخ-سیاه). این یعنی برنامههایی که در پسزمینه خوابیدهاند، به محض بیدار شدن، vruntime پایینی دارند و بلافاصله به پردازنده دسترسی پیدا میکنند. این معماری، عدالت ریاضیوار را در سطح هسته سیستمعامل تضمین میکند.[2]
با ورود پردازندههای چند هستهای (Multi-core) و معماریهای نامتقارن مانند پردازندههای گوشیهای هوشمند که دارای هستههای قدرتمند و کممصرف هستند، وظیفه زمانبندها پیچیدهتر از همیشه شده است. زمانبند حالا نه تنها باید تصمیم بگیرد «چه زمانی» یک برنامه اجرا شود، بلکه باید تعیین کند «کجا» و روی «کدام هسته» اجرا شود تا هم بالاترین عملکرد به دست آید و هم مصرف باتری به حداقل برسد.[5]
در نهایت، جادوی واقعی زمانبندی پردازنده در نامرئی بودن آن است. میلیاردها بار در روز، سیستمعامل شما تصمیماتی حیاتی میگیرد، برنامهها را متوقف میکند، حافظه را جابهجا میکند و منابع را تخصیص میدهد، بدون اینکه شما حتی متوجه یک لکنت کوچک در پخش موسیقی یا حرکت نشانگر ماوس خود شوید. این ارکستر خاموش، شاهکار مهندسی نرمافزار در نیم قرن گذشته است که دنیای دیجیتال ما را سر پا نگه داشته است.[5]
اصطلاحات کلیدی
- زمانبند پردازنده (CPU Scheduler)
- بخشی از هسته سیستمعامل که تصمیم میگیرد کدام برنامه در چه زمانی و برای چه مدتی از پردازنده استفاده کند.
- برش زمانی (Time Slice / Quantum)
- مدت زمان کوتاهی (معمولاً ۱۰ تا ۱۰۰ میلیثانیه) که سیستمعامل برای اجرای پیوسته یک برنامه به آن اختصاص میدهد.
- تعویض بافت (Context Switch)
- عملیات ذخیرهسازی وضعیت یک پردازش در حال توقف و بارگذاری وضعیت پردازش بعدی برای اجرا روی پردازنده.
- اثر کاروان (Convoy Effect)
- پدیدهای که در آن یک پردازش طولانی و سنگین باعث میشود پردازشهای کوچکتر پشت سر آن در صف منتظر بمانند و سیستم کند شود.
- زمان اجرای مجازی (vruntime)
- معیاری در زمانبند لینوکس (CFS) که نشان میدهد یک برنامه تاکنون چقدر از پردازنده استفاده کرده است تا عدالت در تخصیص زمان رعایت شود.
پرسشهای متداول
آیا پردازنده واقعاً چند کار را همزمان انجام میدهد؟
خیر، یک هسته پردازنده در هر لحظه فقط یک کار انجام میدهد. سیستمعامل با جابهجایی بسیار سریع بین برنامهها (هزاران بار در ثانیه) توهم اجرای همزمان را ایجاد میکند.
تعویض بافت (Context Switch) چیست؟
فرآیندی است که در آن پردازنده وضعیت برنامه فعلی را ذخیره کرده و وضعیت برنامه بعدی را برای اجرا بارگذاری میکند. این کار چند میکروثانیه زمان میبرد.
چرا لینوکس از زمانبند CFS استفاده میکند؟
زمانبند کاملاً عادلانه (CFS) در لینوکس تضمین میکند که هیچ برنامهای از دسترسی به پردازنده محروم نمیشود و زمان پردازش به صورت ریاضیوار بین همه فرآیندها تقسیم میگردد.
چرا مهم است
درک نحوه مدیریت پردازشها نشان میدهد که چرا برخی سیستمها تحت فشار کند میشوند و چگونه انتخاب سیستمعامل مناسب میتواند کارایی سرورها یا مصرف باتری گوشی شما را به شدت تغییر دهد.
منابع
[1]Microsoft Learnطرفداران اولویتبندی مطلقScheduling Priorities - Win32 apps
مطالعه در Microsoft Learn →
[2]Kernel.orgمدافعان عدالت پردازشیCFS Scheduler
مطالعه در Kernel.org →
[3]BaeldungKey Concepts in CPU Scheduling
مطالعه در Baeldung →
[4]University of Illinois ChicagoCPU Scheduling
مطالعه در University of Illinois Chicago →
[5]تیم سردبیری کوهستانبهینهسازان مصرف انرژیتحلیل تیم سردبیری کوهستان
مطالعه در تیم سردبیری کوهستان →
نظرات
بیشتر در فناوری
مشاهده همه →معماری هسته
چگونه هسته لینوکس بررسی کدها را فراتر از یک مرجع واحد گسترش میدهد
8 منبع
Digital Communities
اسنپچت با قابلیت «پلنز» به رقابت با پارتیفول برای برنامهریزی رویدادهای واقعی میرود
4 منبع
رمزنگاری همومورفیک
محدودیت تاخیر: چرا رمزنگاری همومورفیک نمیتواند هوش مصنوعی تعاملی را اجرا کند
3 منبع
اقتصاد ابری
سازوکار هزینههای خروج داده از فضای ابری: چرا «گرانش داده» بار کاری سازمانها را به دام میاندازد؟
6 منبع
هر زاویه. هر روز.
دریافت فناوری اخبار همراه با پوشش کامل منابع و تحلیل دیدگاهها، مستقیم در صندوق ورودی شما.





