**زمان‌بندی** (به انگلیسی: scheduling) در رایانش، روش انتساب کار به منابعی است که کار را انجام می‌دهند. در اینجا «کار» می‌تواند عناصر رایانشی مشهود باشد، مثل ریسه، فرایند، یا جریان‌داده باشد که به نوبه خود به منابع سخت‌افزاری مثل پردازنده، اتصال شبکه، یا کارت توسعه زمان‌بندی می‌گردد.

مولفه **زمان‌بندی** پردازش‌ها (به انگلیسی: Process Scheduler) در سیستم‌عامل بخشی از سیستم‌عامل است که تصمیم می‌گیرد که کدام پردازش چه زمانی و به چه مدتی اجرا شود.

ایده اصلی زمان‌بندی این است که برای استفاده بهینه از زمان پردازنده، با این فرض که پردازش‌های قابل اجرا وجود دارند، یک پردازش همواره باید در حال اجرا باشد. اگر تعداد پردازش‌ها بیش از تعداد پردازنده‌ها باشد، در هر لحظه برخی از پردازش‌ها در حال اجرا نخواهند بود. این پردازش‌ها منتظر اجرا هستند. تصمیم‌گیری اینکه با داشتن مجموعه‌ای از پردازش‌های قابل اجرا، کدام پردازش در مرحله بعد اجرا شود، تصمیم اصلی است که یک زمان‌بند باید بگیرد.

انواع زمان‌بندها
----------------

سه نوع زمان‌بند در سیستم‌عامل‌ها وجود دارد:

* زمان‌بندی بلندمدت یا زمان‌بند کار یا زمان‌بند پذیرش - که درجه چند برنامگی را مشخص می‌کند.
* زمان‌بند میان‌مدت - که پروسه‌ها را بین دیسک و حافظه مبادله می‌کند.
* زمان‌بند کوتاه‌مدت - که پردازنده را به فرایندها اختصاص می‌دهد.

بسته به نوع سیستم‌عامل، ممکن است از همه این زمان‌بندها استفاده نشود. برای مثال در سیستم‌عامل‌های اشتراک زمانی معمولاً از زمان‌بند بلند مدت استفاده نمی‌شود.

### زمان‌بند بلندمدت

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

### زمان‌بند میان‌مدت

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

### زمان‌بند کوتاه‌مدت

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

### اعزام‌کننده

اعزام‌کننده یا (به انگلیسی: Dispatcher) یکی دیگر از مؤلفه‌هایی است که در زمان‌بندی پردازنده درگیر هستند. اعزام‌کننده ماژولی است که کنترل پردازنده را به فرایندی می‌دهد که زمانبند کوتاه‌مدت آن را انتخاب کرده‌است. این کار از سه مرحله تشکیل می‌شود:

* تعویض زمینه (ذخیره ثبات‌ها و PCB فرایند فعلی و بارگذاری ثباتها و PCB فرایند جدید)
* تعویض به مد کاربری
* پرش به مکان مناسب از برنامه کاربر که قرار است پردازش از آنجا ادامه یابد.

اعزام‌کننده، مقادیر شمارنده برنامه را بررسی کرده و دستورالعمل‌ها را واکشی می‌کند و داده‌ها را در ثبات‌ها بارگذاری می‌کند. اعزام‌کننده باید بسیار سریع عمل کند؛ زیرا هر بار که قرار است پروسه‌ها تعویض شوند، این برنامه باید فراخوانی شود. در هنگام تعویض زمینه، پردازنده برای کسری از زمان بی‌کار می‌شود؛ بنابراین از تعویض زمینه‌های غیرضروری باید پرهیز کرد. مدت زمانی که طول می‌کشد تا اعزام‌کننده یک فرایند را متوقف کرده و فرایند جدیدی را آغاز کند، تحت عنوان **تأخیر اعزام‌کننده** شناخته می‌شود.

سیستم‌عامل‌های چندوظیفه‌ای
--------------------------

**سیستم‌عامل چندوظیفه‌ای** سیستم‌عاملی است که در آن بیش از یک پردازش بتواند هم‌زمان در حال اجرا باشد.

سیستم‌عامل‌های چندوظیفه‌ای به‌طور عمده به دو قسم تقسیم می‌شوند:

### چندوظیفه‌ای پیشگیرانه (قبضه کردنی یا غیر انحصاری)

**چندوظیفه‌ای پیشگیرانه** (به انگلیسی: preemptive multitasking): در این سیستم‌عامل‌ها، مؤلفه زمان‌بندی تصمیم می‌گیرد که چه زمانی یک پردازش متوقف و پردازش بعدی شروع به اجرا شود. مدت زمانی که یک پردازش پس از گذر آن متوقف می‌شود معمولاً از پیش تعیین‌شده‌است، و آن را برش‌زمانی پردازش می‌نامند. در بسیاری از سیستم‌های عامل مدرن، مقدار برش‌زمانی به صورت پویا و تابعی از رفتار پردازش و سیاست سیستم محاسبه می‌شود.

### چندوظیفه‌ای مشارکتی (انحصاری)

**چندوظیفه‌ای مشارکتی** (به انگلیسی: cooperative multitasking): در این سیستم‌ها پردازش تا وقتی که به صورت داوطلبانه اجرا را متوقف نسازد، در حال اجراست و سیستم‌عامل دخالتی نمی‌کند. دو نمونه از این سیستم‌عامل‌ها، ویندوز ۳٫۱ و مک اواس ۹ است.

الگوریتم‌های زمان‌بندی پردازش
-----------------------------

زمان‌بندی پردازش‌گر با مسئله تصمیم‌گیری انتخاب پردازش بعدی برای اجرا سروکار دارد. برای این کار الگوریتم‌های مختلفی وجود دارد. در این بخش به شرح برخی از آن‌ها می‌پردازیم.

### زمان‌بندی اجرا به ترتیب ورود

**الگوریتم اجرا به ترتیب ورود** (به انگلیسی: **F**irst **C**ome **F**irst **S**erved)، ساده‌ترین الگوریتم زمان‌بندی و یک الگوریتم انحصاری است. در این روش، پروسه‌ها به ترتیبی که وارد می‌شوند، در صف آماده قرار می‌گیرند و پردازشگر به ترتیب آن‌ها را پردازش می‌کند. پیاده‌سازی این الگوریتم به آسانی توسط یک صف قابل انجام است. هنگامی که پردازشگر آزاد است، آن را به پردازشی که در سر صف قرار دارد تخصیص می‌دهیم، و این پردازش را از صف حذف می‌کنیم.

* از آنجا که تعویض زمینه تنها در هنگام خاتمه فرایند صورت می‌گیرد، و همچنین نیازی به سازماندهی مجدد صف نیست، سربار زمانبندی اندک است.
* توان عملیاتی این روش ممکن است پایین باشد، زیرا ممکن است یک فرایند برای یک مدت طولانی پردازنده را در اختیار داشته باشد و آن را رها نکند.
* زمان برگشت، زمان انتظار و زمان پاسخ هم می‌تواند بالا باشد. (بنا به دلیل بالا)
* هیچ گونه اولویت‌بندی وجود ندارد.
* این روش مبتنی بر صف است.

از این الگوریتم به ندرت استفاده می‌شود یا به عنوان الگوریتم ثانویه و به همراه دیگر الگوریتم‌ها استفاده می‌شود.

### زمان‌بندی نخست کوتاه‌ترین کار

الگوریتم **نخست کوتاه‌ترین کار** (به انگلیسی: **S**hortest **J**ob **F**irst) یک مدل از الگوریتم‌های انحصاری است. پردازنده به پروسه‌ای اختصاص می‌یابد که طول اجرای آن از همه کمتر است. هنگامی که پردازش‌گر آماده اجرا است، پردازشی با کوتاه‌ترین طول اجرای بعدی انتخاب می‌شود. این الگوریتم قابل پیاده‌سازی نیست. چرا که باید طول اجرای هر پروسه را محاسبه کرد که در عمل این کار امکان‌پذیر نیست. طول اجرای پروسه یا باید محاسبه شود (که کاری وقت‌گیر و بیهوده است) یا باید تخمین زده شود. به همین دلیل در مواقعی استفاده می‌شود که طول اجرای پروسه از قبل مشخص باشد. می‌توان اثبات کرد که این الگوریتم بهینه است، و به ازای هر مجموعه از پردازش‌ها کم‌ترین زمان پردازش متوسط را ارائه می‌دهد. این الگوریتم دارای مشکل گرسنگی است. به این معنی که اگر به صورت مداوم فرایندهایی به طول اجرای پایین وارد سیستم شوند، ممکن است پروسه‌هایی با طول اجرای طولانی‌تر هرگز اجرا نشوند. مشکل اساسی این الگوریتم سخت بودن طول اجرای بعدی هر کدام از پردازش‌ها است.

### زمانبندی کوتاهترین زمان باقی‌مانده

الگوریتم کوتاهترین زمان باقی‌مانده (به انگلیسی: **S**hortest **R**emaining **T**ime) مشابه الگوریتم «نخست کوتاه‌ترین کار» و یک الگوریتم غیر انحصاری است که مناسب برای سیستم‌های اشتراک زمانی است. در این الگوریتم، زمانبند سیستم پروسه‌ای را اجرا می‌کند که نیاز به کمترین زمان برای تکمیل شدن دارد. در این الگوریتم هم باید طول زمان باقی‌مانده برای تکمیل پروسه تخمین زده شود یا از قبل مشخص باشد؛ بنابراین این الگوریتم هم قابل پیاده‌سازی نیست.

* اگر در هنگام اجرای یک پروسه، پروسه کوچکتری وارد سیستم شود، پردازنده به پروسه جدید داده می‌شود و اجرای پروسه بزرگتر به دو بلاک محاسباتی مجزا تقسیم می‌شود. این کار باعث ایجاد سربار اضافی از طریف تعویض زمینه می‌شوند. همچنین زمانبند باید هر پروسه جدید را در مکان خاصی از صف آماده قرار دهد که این کار هم یک سربار اضافی دیگر است. چرا که حذف و اضافه کردن در صف کار سریعی نیست.
* از این روش دیگر استفاده نمی‌شود.
* برای استفاده از این روش ما حداقل به دو پروسه با اولویت‌های مختلف نیاز داریم.
* این الگوریتم دارای مشکل گرسنگی است. چرا که ممکن است به‌طور مداوم پروسه‌های کوتاه وارد سیستم شوند و اجرای پروسه‌های طولانی به تأخیر بیفتد.

### بالاترین نسبت پاسخ

**سپس بالاترین نسبت پاسخ** (به انگلیسی: **H**ighest **R**esponse **R**atio **N**ext) یک الگوریتم از نوع انحصاری است و مشابه الگوریتم «نخست کوتاه‌ترین کار» است که مشکل گرسنگی فرایندها را برطرف کرده‌است. در این الگوریتم، اولویت هر فرایند، هم به مدت زمان اجرای آن و هم به مدت زمانی که در صف آماده منتظر دریافت پردازنده بوده، بستگی دارد. هر چه یک فرایند بیشتر در صف آماده منتظر دریافت پردازنده بماند، اولویتش بالاتر خواهد رفت. به این ترتیب این الگوریتم پدیده گرسنگی را برطرف می‌کند و کارهای طولانی مدت هم بالاخره اجرا خواهد شد. در این الگوریتم، اولویت هر فرایند به صورت زیر تعیین می‌شود:

{\displaystyle Priority={\frac {waiting\ time+estimated\ run\ time}{estimated\ run\ time}}=1+{\frac {waiting\ time}{estimated\ run\ time}}}

### زمان‌بندی اولویت

الگوریتم **زمان‌بندی اولویت** (به انگلیسی: Priority scheduling), یک مقدار اولویت به هر کدام از فرایندها تخصیص داده می‌شود، و فرایند با اولویت بالاتر برای اجرای بعدی انتخاب می‌شود. فرایندهای با اولویت یکسان به صورت اجرا به ترتیب ورود زمان‌بندی می‌شوند.

یکی از معایب این الگوریتم، گرسنگی فرایندهای با اولویت پایین‌تر است که ممکن است هیچ‌گاه اجرا نشوند.

### زمان‌بندی نوبت گردشی

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

* این الگوریتم سربار اضافه به سیستم تحمیل می‌کند. مخصوصاً اگر برش رمانی کوتاه باشد.
* گرسنگی اتفاق نمی‌افتد، زیرا هیچ اولویتی بین پروسه‌ها وجود ندارد.
* زمان پاسخگویی متوسط است، زمان انتظار به تعداد پروسه‌ها بستگی دارد.
* به خاطر زمان انتظار بالا، بن‌بست معمولاً اتفاق نمی‌افتد.

از این الگوریتم در سیستم‌های اشتراک زمانی هم استفاده می‌شود.

### صف چندگانه فیدبک

صف چندگانه فیدبک (به انگلیسی: Multilevel queue scheduling) وقتی استفاده می‌شود که بتوان پروسه‌ها را به آسانی به گروه‌هایی دسته‌بندی کرد. برای مثال یک روش رایج برای تقسیم کردن این است که پروسه‌های پیش‌زمینه (به انگلیسی: foreground) (که تعاملی هستند) در یک گروه و پروسه‌های پس‌زمینه (به انگلیسی: background) (که دسته‌ای هستند) در گروهی دیگر قرار گیرند. این دو گروه، احتیاج به زمان پاسخ‌دهی متفاوتی دارند. هر پروسه وارد یک صف خاص می‌شود. صف‌ها نسبت به هم اولویت دارند؛ مثلاً اولویت اجرای پروسه‌های پیش‌زمینه از پروسه‌های پس زمینه بیشتر است. هر صف می‌تواند الگوریتم زمان‌بندی مخصوص به خود را داشته باشد؛ مثلاً یک صف از زمانبندی نوبت گردشی و صف دیگر از زمانبندی SRT استفاده کند. این الگوریتم در سیستم‌عامل‌های مدرن هم استفاده می‌شود.

### خلاصه

| الگوریتم زمان‌بندی | پردازنده سربار | توان عملیاتی | زمان برگشت کار | زمان پاسخ‌دهی |
| --- | --- | --- | --- | --- |
| FCFS | پایین | پایین | بالا | بالا |
| نخست کوتاه‌ترین کار | متوسط | بالا | متوسط | متوسط |
| کوتاه‌ترین زمان باقی‌مانده | متوسط | بالا | متوسط | متوسط |
| بالاترین نسبت پاسخ | متوسط | بالا | متوسط | متوسط |
| زمان‌بندی اولویت | متوسط | پایین | بالا | بالا |
| زمان‌بندی نوبت گردشی | بالا | متوسط | متوسط | بالا |
| صف چندسطحی فیدبک | بالا | بالا | متوسط | متوسط |
| دستی | پایین | متوسط | بالا | بالا |

زمان‌بندی در سیستم‌عامل‌های مختلف
---------------------------------

### مایکروسافت

#### داس و ویندوزهای اولیه

* مایکروسافت داس و ویندوز ابتدایی مایکروسافت قابلیت چند پردازشی نداشتند لذا به زمان‌بندی نیازی نبود.
* ویندوز ۳٫۱ از زمان‌بندی ناپیشگیرانه یا مشارکتی استفاده می‌کرد به این معنا که یک پردازش خاص متوقف نمی‌شد تا زمانی که به پایان برسد یا به سیستم عامل بگوید که دیگر نیازی به پردازنده ندارد در نتیجه پردازنده به پردازش دیگری اختصاص می‌یابد.
* ویندوز ۹۵ یک زمان‌بندی پیشگیرانه ناقص و ابتدایی را ارائه کرد؛ البته به منظور پشتیبانی از پردازش‌های ۱۶ بیتی از همان روش ناپیشگیرانه برای این پردازش‌ها استفاده شد.

#### ویندوز ان‌تی

سیستم‌عامل‌های مبتنی بر ویندوز ان‌تی از زمان‌بندی بازخوردی استفاده می‌کنند. ۳۲ سطح اولویت تعریف شده‌است، از ۰ تا ۳۱. سطوح ۰ تا ۱۵ اولویت معمولی و سطوح ۱۶ تا ۳۱ اولویت بی‌درنگ را دارا می‌باشند؛ اولویت ۰ برای سیستم عامل محفوظ است.  
هسته سیستم‌عامل می‌تواند سطح اولویت یک ریسه را بر اساس نیاز آن به ورودی/خروجی و پردازنده یا تعاملی بودن آن تغییر دهد؛ بدین صورت که سطح اولویت ریسمان‌های در تنگنای ورودی/خروجی و ریسمان‌های مربوط به پردازش‌های محاوره‌ای را بالا می‌برد تا میزان پاسخگویی آن‌ها افزایش یابد، از طرفی سطح اولویت ریسه‌های در تنگنای پردازشگر را کاهش می‌دهد.

#### ویندوز سرور ۲۰۰۸ و ویندوز ویستا

در ویندوز ویستا زمان‌بندی به گونه‌ای تغییر کرد که به جای استفاده از وقفه‌های زمانی برای تعیین مدت اجرای یک ریسه، از ثبات شمارندهٔ سیکل موجود در پردازنده‌های مدرن استفاده شود.

ویندوز ویستا همچنین از زمان‌بندی اولویت در صف ورودی/خروجی استفاده می‌کند تا مانع از تداخل پردازش‌های کم اولویتی همچون یکپارچه‌سازی دیسک سخت با پردازش‌های در حال اجرا شود.

### لینوکس

در سیستم‌عامل لینوکس هر پردازشی در یکی از رده‌های سیاست زمان‌بندی قرار می‌گیرد، که معمولاً یکی از مقادیر زیر است:

* SCHED\_OTHER: سیاست زمان‌بندی برای پردازش‌های عادی
* SCHED\_FIFO: سیاست زمان‌بندی خروج به ترتیب ورود برای پردازش‌های بی‌درنگ
* SCHED\_RR: سیاست چرخشی برای پردازش‌های بی‌درنگ

هر کدام از رده‌های سیاست زمان‌بندی الگوریتم خود را برای انتخاب پردازش بعدی دارند. رده‌های بی‌درنگ اولیت بیشتری نسبت به اولویت SCHED\_OTHER دارند. اگر در این رده‌ها پردازشی برای اجرا وجود داشته باشد، الگوریتم زمان‌بند رده SCHED\_OTHER اجرا نمی‌شود.

در رده‌های SCHED\_FIFO و SCHED\_RR زمان‌بندی با توجه به مقدار اولیت بلادرنگی زمان‌بندی می‌شوند
که مقداری بین ۱ تا ۹۹ دارد. مقدار بالاتر متناظر با اولویت بالاتر است. در این رده، تا زمانی که پردازشی با اولیت بالاتر وجود داشته باشد، سایر پردازش‌ها فرصت اجرا پیدا نمی‌کنند.

در رده SCHED\_OTHER پردازش‌ها با توجه به مقدار اولویت nice که مقداری بین ۲۰- تا ۱۹+ است زمان‌بندی می‌شوند. مقدار بالاتر متناظر با اولیت کمتر است.

برای زمان‌بندی پردازش‌های رده SCHED\_OTHER از نسخه ۲٫۶٫۲۳ به بعد هسته لینوکس از «زمان‌بند کاملاً عادلانه» یا CFS استفاده می‌شود. پیش از این زمان‌بند، زمان‌بند مورد استفاده در هسته لینوکس نسخه ۲٫۶، زمان‌بند مرتبه ۱ یا زمان‌بند O(1) بود.

در نسخه‌های هسته لینوکس ۲٫۴ تا قبل از ۲٫۶، الگوریتم زمان‌بندی نسبتاً ساده بود، و زمان‌بند هر یک از پردازش‌ها را بررسی می‌کرد و به آن امتیازی می‌داد، و پردازشی که بیشترین امتیاز را به دست می‌آورد را برای اجرا انتخاب می‌کرد. بنابراین پیچیدگی زمانی این الگوریتم از مرتبه O(N) بود. با اینکه الگوریتم نسبتاً ساده بود، ولی نسبتاً ناکارامد بود و برای سامانه‌های بی‌درنگ مناسب نبود.

### فری‌بی‌اس‌دی

فری‌بی‌اس‌دی از روش صف چندگانه فیدبک با اولویتهایی بین ۰ تا ۲۵۵ استفاده می‌کند. اولویت‌های ۰ تا ۶۳ برای وقفه‌ها رزرو شده‌اند. ۶۴ تا ۱۲۷ برای نیمه بالایی هسته، ۱۲۸ تا ۱۵۹ برای ریسه‌های بی‌درنگ کاربر، ۱۶۰ تا ۲۲۳ برای ریسه‌های اشتراک زمانی کاربر، ۲۲۴ تا ۲۵۵ هم برای ریسه‌های بیکار کاربر رزرو شده‌اند. مشابه لینوکس، فری‌بی‌اس‌دی هم یک صف فعال دارد، اما فری‌بی‌اس‌دی علاوه بر این صف، یک صف بیکار هم دارد.

پانویس
------

1. ↑  timeslice
2. ↑  non-preemptive
3. ↑  cooperative
4. ↑  thread
5. ↑  I/O bound
6. ↑  CPU-bound
7. ↑  interval-time interrupt
8. ↑  cycle counter register
9. ↑  realtime priority
10. ↑  Completely Fair Scheduler

منابع
-----

1. ↑  «*زمان‌بندی*» [*مدیریت-مدیریت پروژه*] هم‌ارزِ «*scheduling*»؛ منبع: گروه واژه‌گزینی. جواد میرشکاری، ویراستار. *دفتر یازدهم*. فرهنگ واژه‌های مصوب فرهنگستان. تهران: انتشارات فرهنگستان زبان و ادب فارسی. شابک ۹۷۸-۶۰۰-۶۱۴۳-۴۵-۳ (ذیل سرواژهٔ *زمان‌بندی1*)
2. 1 2 3 4 5  کتاب Linux Kernel Development، ویرایش سوم، نوشته رابرت لاو، فصل ۴
3. 1 2  کتاب مفاهیم سیستم عامل، ویرایش هشتم، نوشته آبراهام سیلبرشاتز
4. ↑  صفحات راهنمای لینوکس - تابع sched\_setscheduler
5. ↑  مستندات لینوکس - سند طراحی CFS
6. ↑  دولوپرورکز آی‌بی‌ام - نگاهی به درون زمان‌بند لینوکس
7. ↑  نگاهی به درون زمان‌بند کاملاً عادلانه لینوکس ۲٫۶

* **ویکی‌پدیای انگلیسی**

| * ن
* ب
* و
سیستم‌عامل |
| --- |
| اطلاعات کلی | 
* Advocacy
* Comparison
* Forensic engineering
* History
* Hobbyist development
* فهرست سیستم‌عامل‌ها
* Timeline
* Usage share

 |
| هسته (رایانش) | 

|  |  |
| --- | --- |
| معماری رایانه | 
* Exokernel
* هسته پیوندی
* ریزهسته
* هسته یکپارچه
* vkernel
* Rump kernel
* Unikernel

 |
| مولفه‌ها | 
* گرداننده دستگاه
* Loadable kernel module
* ریزهسته
* فضای کاربری

 |

 |
| مدیریت فرایند (رایانه) | 

|  |  |
| --- | --- |
| مفاهیم | 
* تعویض زمینه
* وقفه
* ارتباط بین پردازشی
* فرایند (رایانه)
* بلاک کنترل فرایند
* سیستم‌عامل بی‌درنگ
* ریسه (رایانه)
* اشتراک زمانی

 |
| زمان‌بندی (رایانه) | 
* چندکارگی (رایانه)
* Fixed-priority preemptive
* صف چندسطحی فیدبک
* قبضه‌کردن (رایانش)
* زمان‌بندی نوبت گردشی
* نخست کوتاه‌ترین کار

 |

 |
| مدیریت حافظه،محافظت از منابع | 
* Bus error
* General protection fault
* حفاظت از حافظه
* صفحه‌بندی (رایانه)
* حلقه حفاظتی
* Segmentation fault
* حافظه مجازی

 |
| دسترسی به حافظه غیرفرار،سیستم‌های فایل‌بندی | 
* راه‌اندازی (رایانه)
* یکپارچه‌سازی دیسک سخت
* فایل دستگاهی
* صفت پرونده
* آی‌نود
* فایل سیستم ژورنالی
* پارتیشن‌بندی
* سامانه پرونده مجازی
* Virtual tape library

 |
| فهرست سیستم‌عامل‌ها | 
* Acorn
	+ Arthur
	+ ARX
	+ MOS
	+ RISC iX
	+ RISC OS
* Amiga Inc.
	+ آمیگااواس
	+ AmigaOS 1.0-3.9 (Motorola 68000)
	+ AmigaOS 4 (PowerPC)
	+ Amiga Unix, a.k.a. Amix
* Amstrad
	+ AMSDOS
	+ کانتیکی
	+ SymbOS
* اندروید
* Apple Inc.
	+ اپل ۲ family
	+ اپل III
	+ Apple DOS
	+ اپل لیسا
	+ Apple SOS
	+ Apple Pascal
	+ ProDOS
	+ GS/OS
	+ GNO/ME
	+ کانتیکی
	+ مکینتاش
		- Classic Mac OS
		- اپل یونیکس
		- Copland
		- MkLinux
		- Pink
		- Rhapsody
		- مک‌اواس (formerly Mac OS X and OS X)
		- macOS Server (formerly Mac OS X Server and OS X Server)
		- سرور شبکه اپل
	+ Apple MessagePad
		- Newton OS
	+ آیفون and آی‌پاد تاچ
		- آی‌اواس (formerly iPhone OS)
	+ آی‌پد
		- آی‌پداواس
	+ اپل واچ
		- واچ اواس
	+ اپل تی‌وی
		- تی‌وی او اس
	+ داروین (سیستم‌عامل)
	+ آی‌پاد
		- آی‌پاد (unnamed embedded OS)
* A/ROSE
* Apollo Computer
	+ Domain/OS
* Atari
	+ Atari DOS
	+ Atari TOS
	+ Atari MultiTOS
* BAE Systems XTS-400
* Be Inc.
	+ بی اواس
	+ BeIA
	+ BeOS r5.1d0
* Bell Labs Non-Unix
	+ BESYS
	+ پلان ۹ از آزمایشگاه‌های بل
	+ اینفرنو)
* Burroughs Corporation
	+ Burroughs MCP
* بی‌اس‌دی
* Control Data Corporation
	+ Chippewa Operating System
	+ Kronos
	+ NOS (Network Operating System)
	+ SCOPE)
* Convergent Technologies Operating System
* Cosmos (سیستم‌عامل)
* Cromemco
	+ Cromemco DOS
	+ Cromix
* Data General
	+ AOS (for 16-bit)
	+ DG/UX
	+ RDOS (Real-time DOS)
* Datapoint (CTOS for Z-80)
* DDC-I Inc.
	+ HeartOS
* Digital Research, Inc.
	+ CP/M
	+ CP/M Plus
	+ CP/M-68K
	+ CP/M-8000
	+ CP/M-86
	+ CP/M-86 Plus
	+ Concurrent CP/M
	+ Concurrent CP/M-86
	+ Concurrent CP/M 8-16
	+ Concurrent CP/M-68K
	+ Concurrent DOS
		- Concurrent PC DOS
		- Concurrent DOS 8-16
		- Concurrent DOS 286
		- Concurrent DOS XM
		- Concurrent DOS 386
		- Concurrent DOS 386/MGE
		- Concurrent DOS 68K
	+ DR-DOS
	+ FlexOS
		- FlexOS 186
		- FlexOS 286
		- FlexOS 68K
	+ Multiuser DOS
	+ Datapac Multiuser DOS
	+ Datapac System Manager, a derivative of Datapac Multiuser DOS
	+ IMS Multiuser DOS
	+ MP/M
		- MP/M II
		- MP/M-86
		- MP/M 8-16
	+ PalmDOS 1.0
	+ Personal CP/M
* Digital Equipment Corporation
	+ Batch-11/DOS-11
	+ OS/8
	+ RSTS/E
	+ RSX-11
	+ RT-11
	+ TOPS-10
	+ TOPS-20
	+ TENEX
	+ ترو۶۴ یونیکس
	+ Ultrix
	+ OpenVMS
	+ WAITS
* داس (سیستم‌عامل)
* ENEA AB OSE
* Fujitsu Towns OS
* General Electric, Honeywell, Bull
	+ Real-Time Multiprogramming Operating System
	+ GCOS
	+ مولتیکس
* Genode
* گنو
* Google
	+ اندروید
	+ سیستم‌عامل کرومیوم
	+ کروم اواس
	+ گوبونتو
	+ گوگل فیوشا)
* Green Hills Software
	+ اینتگریتی
	+ اینتگریتی
	+ *µ-velOSity*
* هایکو (سیستم‌عامل)
* Harmony
* Heathkit, Zenith Data Systems
	+ HDOS
	+ HT-11
* Hewlett-Packard
	+ اچ‌پی-یواکس
	+ Multi-Programming Executive
* Honeywell CP-6
* Huawei Harmony OS
* Intel Corporation
	+ ISIS
* IBM
	+ Pre-360
		- BESYS
		- سیستم اشتراک زمانی سازگار
		- GM OS & GM-NAA I/O
		- IBSYS
		- SHARE Operating System
		- University of Michigan Executive System (UMES)
	+ OS/360 and successors
		- OS/360 and successors
		- ذخیره مجازی چندگانه
		- OS/390
		- Phoenix/MVS
		- زد/اواس)
	+ DOS
		- DOS/360 and successors on IBM S/360, S/370, and successor mainframes
		- BOS/360
		- TOS/360
		- DOS/VS
		- DOS/VSE
		- VSE/SP
		- VSE/ESA
		- z/VSE)
	+ VM/CMS
		- CP/CMS
		- CP-40
		- CP-67
		- VM/370
		- VM/XA
		- VM/ESA ماشین مجازی
		- z/VM)
	+ TPF line
		- Airline Control Program *ACP*
		- Transaction Processing Facility)
	+ Unix-like
		- آی‌بی‌ام ای‌آی‌اکس
		- UTS (Mainframe UNIX)
		- Linux on IBM Z
	+ Others on IBM S/360, S/370, and successor mainframes
		- TSS/360
		- MUSIC/SP
		- ORVYL and WYLBUR
	+ IBM PC
		- آی‌بی‌ام داس
		- اواس/۲
		- اواس/۲
		- eComStation)
	+ Other hardware
		- IBM Series 1
			* EDX
			* RPS
			* CPS
	+ IBM 1130 DM2
	+ IBM 1800 MPX & TSX
	+ IBM 8100
		- DPCX
		- DPPX)
	+ System 3 DMS
	+ IBM System 34, 36, 38
	+ OS/400
* illumos
* IncludeOS
* آی‌اواس
	+ هوم‌پاد
	+ آی‌پداواس
	+ تی‌وی او اس
* لینوکس
* مینیکس
* مورف اواس
* MUSIC/SP
* Nemesis
* نکست‌استپ
* NOS
* ORVYL
* اواس/۲
* OS-9
* OSv
* Pick
* QNX
* ری اکت او اس
* RISC OS
* سولاریس (سیستم‌عامل)
* Tandem
	+ NonStop
* TPF
* TRIPOS
* یونیکس
* Visi On
* VS/9
* وب او اس
* مایکروسافت ویندوز
* Xerox 500 series (530 RTB, 560)
* Xinu
* زد/اواس

 |
| مفاهیم جانبی | 
* رابط برنامه‌نویسی کاربردی
* شبکه رایانه‌ای
* لایه انتزاعی سخت‌افزاری
* لوح زنده
* یواس‌بی زنده
* پوسته (رایانه)
	+ واسط خط فرمان
	+ رابط کاربر گرافیکی
	+ واسط طبیعی کاربر
	+ واسط کاربر متن بنیان
	+ رابط کاربری صوتی
	+ ZUI
* PXE

 |

| * ن
* ب
* و
الگوهای طراحی |
| --- |
| الگوهای طراحی GO4 | 

|  |  |
| --- | --- |
| ایجاد | 
* الگوی کارخانه انتزاعی
* الگوی سازنده
* الگوی متد کارخانه شیء
* الگوی نمونه اولیه
* الگوی یگانه

 |
| ساختاری | 
* آداپتور
* پل
* کامپوزیت
* آذینگر
* نما
* مگس وزن
* وکالت

 |
| رفتاری | 
* زنجیره مسئولیت
* الگوی فرمان
* مفسر
* الگوی تکرار
* میانجی
* یادگاری
* ناظر
* وضعیت
* استراتژی
* متد الگو
* بازدیدگر

 |

 |
| Concurrencypatterns | 
* Active object
* Balking
* Binding properties
* Double-checked locking
* Event-based asynchronous
* Guarded suspension
* Join
* قفل
* مانیتور
* Proactor
* Reactor
* Read write lock
* زمان‌بندی
* الگوی مخزن نخ
* Thread-local storage

 |
| الگوهایمعماری | 
* Front controller
* مفسر
* مدل-نما-کنترل‌گر
* ADR
* Entity-component-system
* چندلایه
* Specification
* Publish–subscribe
* اشیای لخت
* Service locator
* ثبت کنشور
* Identity map
* شی دسترسی به داده
* شی انتقال داده
* وارونگی کنترل
* Model 2

 |
| دیگرالگوها | 
* Blackboard
* Business delegate
* Composite entity
* تزریق نیازمندی
* Intercepting filter
* بارگیری تنبلانه
* شیء ساختگی
* Null object
* استخر اشیاء
* Servant
* Twin
* Type tunnel
* Method chaining

 |
| کتاب‌ها | 
* *الگوهای طراحی*
* *Enterprise Integration Patterns*
* *Patterns of Enterprise Application Architecture*
* *Analysis patterns*

 |
| افراد | 
* کریستوفر الکساندر
* Erich Gamma
* Ralph Johnson
* John Vlissides
* گریدی بوچ
* کنت بک
* وارد کانینگهام
* مارتین فولر
* رابرت سسیل مارتین
* Jim Coplien
* Douglas Schmidt
* Linda Rising

 |
| جوامع | 
* The Hillside Group
* The Portland Pattern Repository

 |