موضوع مقاله: زمان‌بندی (رایانش) | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # زمان‌بندی (رایانش) | مقدمه: مولفه زمان‌بندی پردازش‌ها در سیستم‌عامل بخشی از سیستم‌عامل است که تصمیم می‌گیرد که کدام پردازش چه زمانی و به چه مدتی اجرا شود.کتاب Linux Kernel Development، ویرایش سوم، نوشته رابرت لاو، فصل ۴ ایده اصلی زمان‌بندی این است که برای استفاده بهینه از زمان پردازنده، با این فرض که پردازش‌های قابل اجرا وجود دارند، یک پردازش همواره باید در حال اجرا باشد. | ## بخش 1: زمان‌بندی (رایانش) | اگر تعداد پردازش‌ها بیش از تعداد پردازنده‌ها باشد، در هر لحظه برخی از پردازش‌ها در حال اجرا نخواهند بود. تصمیم‌گیری اینکه با داشتن مجموعه‌ای از پردازش‌های قابل اجرا، کدام پردازش در مرحله بعد اجرا شود، تصمیم اصلی است که یک زمان‌بند باید بگیرد. انواع زمان‌بندها سه نوع زمان‌بند در سیستم‌عامل‌ها وجود دارد: زمان‌بندی بلندمدت یا زمان‌بند کار یا زمان‌بند پذیرش - که درجه چند برنامگی را مشخص می‌کند. برای مثال در سیستم‌عامل‌های اشتراک زمانی معمولاً از زمان‌بند بلند مدت استفاده نمی‌شود. زمان‌بند بلندمدت این زمان‌بند تصمیم می‌گیرد که کدام کارها یا فرایندها می‌توانند در صف آماده قرار گیرند. این زمان‌بند کارها را از روی دیسک برداشته و به حافظه اصلی برده و در صف آماده قرار می‌دهد تا پردازنده به آن‌ها اختصاص یابد. وقتی که تلاشی برای اجرای یک برنامه انجام می‌شود، زمان‌بند کار یا آن برنامه را می‌پذیرد و به حافظه اصلی می‌برد یا اجرای آن را به تأخیر می‌اندازد. منظور از درجه چند برنامگی این است که همواره چه تعداد فرایندی در حافظه اصلی وجود داشته باشند تا پردازنده به آن‌ها اختصاص یابد. زمان‌بند میان‌مدت این زمان‌بند، کارها را به‌طور موقت از روی حافظه اصلی برمی‌دارد و در حافظه جانبی (مثل دیسک) قرار می‌دهد (یا برعکس). زمان‌بند میان‌مدت ممکن است تصمیم بگیرد که پروسه‌ای که برای مدتی غیرفعال بوده، یا پروسه‌ای که اولویت پایینی دارد، یا پروسه‌ای که مکرراً نقص صفحه تولید می‌کند، یا پروسه‌ای که مقدار زیادی از حافظه را اشغال کرده را از حافظه اصلی خارج کرده و موقتاً در دیسک قرار دهد. زمان‌بند کوتاه‌مدت زمان‌بند کوتاه‌مدت یا زمان‌بند پردازنده، یکی از پروسه‌هایی که در صف آماده قرار دارد را انتخاب کرده و پردازنده را به آن پروسه اختصاص می‌دهد تا اجرا شود. این زمان‌بند بعد از رخ دادن یک وقفه ساعت، یک وقفه ورودی/خروجی، اجرای یک فراخوان سیستمی، یا دریافت یک سیگنال فعال می‌شود و یکی از پروسه‌های منتظر در صف اجرا را برای پردازش شدن انتخاب می‌کند؛ بنابراین زمان‌بند کوتاه‌مدت نسبت به زمان‌بندهای بلندمدت و میان‌مدت وقت کمتری برای تصمیم‌گیری دارد و ممکن است در ثانیه چند بار اجرا شود. اگر به صورت غیر انحصاری باشد، می‌تواند پردازنده را از یک پروسه در حال اجرا بگیرد و آن را به پروسه دیگری اختصاص دهد. زمان‌بند انحصاری این کار را انجام نمی‌دهد و پروسه خودش باید پردازنده را رها کند. (به این حالت چند برنامگی تعاونی می‌گویند) اعزام‌کننده اعزام‌کننده یا یکی دیگر از مؤلفه‌هایی است که در زمان‌بندی پردازنده درگیر هستند. اعزام‌کننده ماژولی است که کنترل پردازنده را به فرایندی می‌دهد که زمانبند کوتاه‌مدت آن را انتخاب کرده‌است. این کار از سه مرحله تشکیل می‌شود: تعویض زمینه (ذخیره ثبات‌ها و PCB فرایند فعلی و بارگذاری ثباتها و PCB فرایند جدید) تعویض به مد کاربری پرش به مکان مناسب از برنامه کاربر که قرار است پردازش از آنجا ادامه یابد. اعزام‌کننده، مقادیر شمارنده برنامه را بررسی کرده و دستورالعمل‌ها را واکشی می‌کند و داده‌ها را در ثبات‌ها بارگذاری می‌کند. اعزام‌کننده باید بسیار سریع عمل کند؛ زیرا هر بار که قرار است پروسه‌ها تعویض شوند، این برنامه باید فراخوانی شود. در هنگام تعویض زمینه، پردازنده برای کسری از زمان بی‌کار می‌شود؛ بنابراین از تعویض زمینه‌های غیرضروری باید پرهیز کرد. مدت زمانی که طول می‌کشد تا اعزام‌کننده یک فرایند را متوقف کرده و فرایند جدیدی را آغاز کند، تحت عنوان تأخیر اعزام‌کننده شناخته می‌شود. سیستم‌عامل‌های چندوظیفه‌ای سیستم‌عامل چندوظیفه‌ای سیستم‌عاملی است که در آن بیش از یک پردازش بتواند هم‌زمان در حال اجرا باشد. سیستم‌عامل‌های چندوظیفه‌ای به‌طور عمده به دو قسم تقسیم می‌شوند: چندوظیفه‌ای پیشگیرانه (قبضه کردنی یا غیر انحصاری) چندوظیفه‌ای پیشگیرانه : در این سیستم‌عامل‌ها، مؤلفه زمان‌بندی تصمیم می‌گیرد که چه زمانی یک پردازش متوقف و پردازش بعدی شروع به اجرا شود. | ## بخش 2: زمان‌بندی (رایانش) | مدت زمانی که یک پردازش پس از گذر آن متوقف می‌شود معمولاً از پیش تعیین‌شده‌است، و آن را برش‌زمانیtimeslice پردازش می‌نامند. در بسیاری از سیستم‌های عامل مدرن، مقدار برش‌زمانی به صورت پویا و تابعی از رفتار پردازش و سیاست سیستم محاسبه می‌شود. چندوظیفه‌ای مشارکتی (انحصاری) چندوظیفه‌ای مشارکتی : در این سیستم‌ها پردازش تا وقتی که به صورت داوطلبانه اجرا را متوقف نسازد، در حال اجراست و سیستم‌عامل دخالتی نمی‌کند. الگوریتم‌های زمان‌بندی پردازش زمان‌بندی پردازش‌گر با مسئله تصمیم‌گیری انتخاب پردازش بعدی برای اجرا سروکار دارد. در این بخش به شرح برخی از آن‌ها می‌پردازیم.کتاب مفاهیم سیستم عامل، ویرایش هشتم، نوشته آبراهام سیلبرشاتز زمان‌بندی اجرا به ترتیب ورود الگوریتم اجرا به ترتیب ورود ، ساده‌ترین الگوریتم زمان‌بندی و یک الگوریتم انحصاری است. در این روش، پروسه‌ها به ترتیبی که وارد می‌شوند، در صف آماده قرار می‌گیرند و پردازشگر به ترتیب آن‌ها را پردازش می‌کند. هنگامی که پردازشگر آزاد است، آن را به پردازشی که در سر صف قرار دارد تخصیص می‌دهیم، و این پردازش را از صف حذف می‌کنیم. از آنجا که تعویض زمینه تنها در هنگام خاتمه فرایند صورت می‌گیرد، و همچنین نیازی به سازماندهی مجدد صف نیست، سربار زمانبندی اندک است. توان عملیاتی این روش ممکن است پایین باشد، زیرا ممکن است یک فرایند برای یک مدت طولانی پردازنده را در اختیار داشته باشد و آن را رها نکند. از این الگوریتم به ندرت استفاده می‌شود یا به عنوان الگوریتم ثانویه و به همراه دیگر الگوریتم‌ها استفاده می‌شود. زمان‌بندی نخست کوتاه‌ترین کار الگوریتم نخست کوتاه‌ترین کار یک مدل از الگوریتم‌های انحصاری است. هنگامی که پردازش‌گر آماده اجرا است، پردازشی با کوتاه‌ترین طول اجرای بعدی انتخاب می‌شود. طول اجرای پروسه یا باید محاسبه شود (که کاری وقت‌گیر و بیهوده است) یا باید تخمین زده شود. می‌توان اثبات کرد که این الگوریتم بهینه است، و به ازای هر مجموعه از پردازش‌ها کم‌ترین زمان پردازش متوسط را ارائه می‌دهد. به این معنی که اگر به صورت مداوم فرایندهایی به طول اجرای پایین وارد سیستم شوند، ممکن است پروسه‌هایی با طول اجرای طولانی‌تر هرگز اجرا نشوند. زمانبندی کوتاهترین زمان باقی‌مانده الگوریتم کوتاهترین زمان باقی‌مانده مشابه الگوریتم «نخست کوتاه‌ترین کار» و یک الگوریتم غیر انحصاری است که مناسب برای سیستم‌های اشتراک زمانی است. در این الگوریتم، زمانبند سیستم پروسه‌ای را اجرا می‌کند که نیاز به کمترین زمان برای تکمیل شدن دارد. در این الگوریتم هم باید طول زمان باقی‌مانده برای تکمیل پروسه تخمین زده شود یا از قبل مشخص باشد؛ بنابراین این الگوریتم هم قابل پیاده‌سازی نیست. اگر در هنگام اجرای یک پروسه، پروسه کوچکتری وارد سیستم شود، پردازنده به پروسه جدید داده می‌شود و اجرای پروسه بزرگتر به دو بلاک محاسباتی مجزا تقسیم می‌شود. همچنین زمانبند باید هر پروسه جدید را در مکان خاصی از صف آماده قرار دهد که این کار هم یک سربار اضافی دیگر است. چرا که ممکن است به‌طور مداوم پروسه‌های کوتاه وارد سیستم شوند و اجرای پروسه‌های طولانی به تأخیر بیفتد. بالاترین نسبت پاسخ سپس بالاترین نسبت پاسخ یک الگوریتم از نوع انحصاری است و مشابه الگوریتم «نخست کوتاه‌ترین کار» است که مشکل گرسنگی فرایندها را برطرف کرده‌است. در این الگوریتم، اولویت هر فرایند، هم به مدت زمان اجرای آن و هم به مدت زمانی که در صف آماده منتظر دریافت پردازنده بوده، بستگی دارد. | ## بخش 3: زمان‌بندی (رایانش) | هر چه یک فرایند بیشتر در صف آماده منتظر دریافت پردازنده بماند، اولویتش بالاتر خواهد رفت. به این ترتیب این الگوریتم پدیده گرسنگی را برطرف می‌کند و کارهای طولانی مدت هم بالاخره اجرا خواهد شد. در این الگوریتم، اولویت هر فرایند به صورت زیر تعیین می‌شود: زمان‌بندی اولویت الگوریتم زمان‌بندی اولویت , یک مقدار اولویت به هر کدام از فرایندها تخصیص داده می‌شود، و فرایند با اولویت بالاتر برای اجرای بعدی انتخاب می‌شود. یکی از معایب این الگوریتم، گرسنگی فرایندهای با اولویت پایین‌تر است که ممکن است هیچ‌گاه اجرا نشوند. زمان‌بندی نوبت گردشی الگوریتم زمان‌بندی نوبت گردشی یک الگوریتم غیرانحصاری است و می‌توان آن را پیاده‌سازی کرد. در این الگوریتم، زمانبند به هر پروسه یک واحد زمانی ثابت اختصاص می‌دهد و سپس در بین آن‌ها گردش می‌کند. به عبارتی دیگر پردازنده هر فرایند را برای مدت زمان کوتاهی اجرا کرده و سپس به سراغ فرایند بعدی می‌رود. برش زمانی معمولاً بین ۱۰ تا ۱۰۰ میلی‌ثانیه است و پردازنده هر پروسه را به این میزان اجرا می‌کند. صف چندگانه فیدبک صف چندگانه فیدبک وقتی استفاده می‌شود که بتوان پروسه‌ها را به آسانی به گروه‌هایی دسته‌بندی کرد. برای مثال یک روش رایج برای تقسیم کردن این است که پروسه‌های پیش‌زمینه (که تعاملی هستند) در یک گروه و پروسه‌های پس‌زمینه (که دسته‌ای هستند) در گروهی دیگر قرار گیرند. صف‌ها نسبت به هم اولویت دارند؛ مثلاً اولویت اجرای پروسه‌های پیش‌زمینه از پروسه‌های پس زمینه بیشتر است. هر صف می‌تواند الگوریتم زمان‌بندی مخصوص به خود را داشته باشد؛ مثلاً یک صف از زمانبندی نوبت گردشی و صف دیگر از زمانبندی SRT استفاده کند. خلاصه الگوریتم زمان‌بندی پردازنده سربار توان عملیاتی زمان برگشت کار زمان پاسخ‌دهی FCFS پایین پایین بالا بالا نخست کوتاه‌ترین کار متوسط بالا متوسط متوسط کوتاه‌ترین زمان باقی‌مانده متوسط بالا متوسط متوسط بالاترین نسبت پاسخ متوسط بالا متوسط متوسط زمان‌بندی اولویت متوسط پایین بالا بالا زمان‌بندی نوبت گردشی بالا متوسط متوسط بالا صف چندسطحی فیدبک بالا بالا متوسط متوسط دستی پایین متوسط بالا بالا زمان‌بندی در سیستم‌عامل‌های مختلف مایکروسافت داس و ویندوزهای اولیه مایکروسافت داس و ویندوز ابتدایی مایکروسافت قابلیت چند پردازشی نداشتند لذا به زمان‌بندی نیازی نبود. ویندوز ۹۵ یک زمان‌بندی پیشگیرانه ناقص و ابتدایی را ارائه کرد؛ البته به منظور پشتیبانی از پردازش‌های ۱۶ بیتی از همان روش ناپیشگیرانه برای این پردازش‌ها استفاده شد. ویندوز ان‌تی سیستم‌عامل‌های مبتنی بر ویندوز ان‌تی از زمان‌بندی بازخوردی استفاده می‌کنند. سطوح ۰ تا ۱۵ اولویت معمولی و سطوح ۱۶ تا ۳۱ اولویت بی‌درنگ را دارا می‌باشند؛ اولویت ۰ برای سیستم عامل محفوظ است.هسته سیستم‌عامل می‌تواند سطح اولویت یک ریسهthread را بر اساس نیاز آن به ورودی/خروجی و پردازنده یا تعاملی بودن آن تغییر دهد؛ بدین صورت که سطح اولویت ریسمان‌های در تنگنای ورودی/خروجیI/O bound و ریسمان‌های مربوط به پردازش‌های محاوره‌ای را بالا می‌برد تا میزان پاسخگویی آن‌ها افزایش یابد، از طرفی سطح اولویت ریسه‌های در تنگنای پردازشگرCPU-bound را کاهش می‌دهد. ویندوز ویستا همچنین از زمان‌بندی اولویت در صف ورودی/خروجی استفاده می‌کند تا مانع از تداخل پردازش‌های کم اولویتی همچون یکپارچه‌سازی دیسک سخت با پردازش‌های در حال اجرا شود. در این رده، تا زمانی که پردازشی با اولیت بالاتر وجود داشته باشد، سایر پردازش‌ها فرصت اجرا پیدا نمی‌کنند. برای زمان‌بندی پردازش‌های رده SCHED_OTHER از نسخه ۲٫۶٫۲۳ به بعد هسته لینوکس از «زمان‌بند کاملاً عادلانه»Completely Fair Scheduler یا CFS استفاده می‌شود.مستندات لینوکس - سند طراحی CFS پیش از این زمان‌بند، زمان‌بند مورد استفاده در هسته لینوکس نسخه ۲٫۶، زمان‌بند مرتبه ۱ یا زمان‌بند بود.دولوپرورکز آی‌بی‌ام - نگاهی به درون زمان‌بند لینوکس در نسخه‌های هسته لینوکس ۲٫۴ تا قبل از ۲٫۶، الگوریتم زمان‌بندی نسبتاً ساده بود، و زمان‌بند هر یک از پردازش‌ها را بررسی می‌کرد و به آن امتیازی می‌داد، و پردازشی که بیشترین امتیاز را به دست می‌آورد را برای اجرا انتخاب می‌کرد.نگاهی به درون زمان‌بند کاملاً عادلانه لینوکس ۲٫۶ بنابراین پیچیدگی زمانی این الگوریتم از مرتبه بود. با اینکه الگوریتم نسبتاً ساده بود، ولی نسبتاً ناکارامد بود و برای سامانه‌های بی‌درنگ مناسب نبود. فری‌بی‌اس‌دی فری‌بی‌اس‌دی از روش صف چندگانه فیدبک با اولویتهایی بین ۰ تا ۲۵۵ استفاده می‌کند. ۶۴ تا ۱۲۷ برای نیمه بالایی هسته، ۱۲۸ تا ۱۵۹ برای ریسه‌های بی‌درنگ کاربر، ۱۶۰ تا ۲۲۳ برای ریسه‌های اشتراک زمانی کاربر، ۲۲۴ تا ۲۵۵ هم برای ریسه‌های بیکار کاربر رزرو شده‌اند. | ## جمع‌بندی | مشابه لینوکس، فری‌بی‌اس‌دی هم یک صف فعال دارد، اما فری‌بی‌اس‌دی علاوه بر این صف، یک صف بیکار هم دارد.