زمانبند نرخ یکنواخت

در علوم کامپیوتر، زمان‌بند Rate-monotonic(برنامه‌ریز نرخ یکنواخت یا **RMS**) به عنوان یک الگوریتم زمان‌بندی بر اساس اولویت با استفاده از یک کلاس اولویت ایستا است؛ که در سیستم عامل‌های بی‌درنگ (RTOS) استفاده می‌شود. اولویت‌های ایستا در این روش بر اساس زمان مورد نیاز برای انجام شدن یک چرخه کامل کار (وظیفه) تعیین می‌شود پس هرچه زمان مورد نیاز برای چرخه کار کمتر باشد اولویت آن کار (وظیفه) بیشتر است.

این سیستم عامل‌ها عموماً انحصاری (قبضه ای) است و تضمین قطعی برای زمان اجرا دارد. در این سیستم‌ها از تحلیل نرخ یکنواخت (Rate monotonic analysis) برای به دست آوردن تضمین زمان‌بندی در یک برنامه خاص استفاده می‌شود.

## معرفی
در نسخه ساده تجزیه و تحلیل نرخ مونوتونیک rate-monotonic analysis فرض می‌شود رشته‌ها دارای ویژگی‌های زیر باشند:
* هیچ منبع اشتراکی بین رشته‌ها وجود نداشته باشد (بین پردازه‌ها منبع مشترکی نباشد این منابع اشتراکی می‌توانند سخت‌افزار، صف اولویت، یا هر نوع نشان‌بر مسدود کننده یا غیر مسدود کننده (مشغول به انتظار) باشند)
* مهلت‌های قطعی دقیقاً برابر با دوره‌ها هستند
* اولویت‌ها ایستا (استاتیک) هستند (وظیفه ای که بالاترین اولویت را دارد کمترین زمان اجرا را خواهد داشت و بلافاصله قابل اجراست و تمامی وظایف دیگر را قبضه کرده و اجرا می‌شود)
* اولویت‌های استاتیک با توجه به کنوانسیون‌های *نرخ مونوتونیک* (وظایف با دوره‌های کوتاه / ضرب‌العجل‌ها اولویت‌های بیشتر دارند)
* زمان برگردان متن(Context switch) و دیگر عملیات مرتبط با رشته ناچیز هستند و بر مدل تأثیری ندارند

این یک مدل ریاضی است که شامل یک شبیه‌سازی محاسبه شده از دوره‌ها در یک سیستم بسته است، در جایی که زمانبندهای راند رابین (نوبت گردشی) و اشتراک زمانی در برآورد کردن نیازهای زمانبندی ناتوان هستند.

زمان‌بند rate monotonic مدل اجرایی همه رشته‌های موجود در سیستم را بررسی می‌کند و از روی این بررسی انجام شده تعیین می‌کند چه مقدار زمان برای تضمین مجموعه رشته‌های درخواستی مورد نیاز است

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

تست برنامه‌ریزی برای RMS از رابطه زیر به دست می‌آید:

که در این رابطه  زمان مورد نیاز وظیفه i ام برای پردازش است،  دوره آزادسازی پردازه iام است که مهلت پایان آن یک دوره بعد است، و  تعداد فرایندهای برنامه‌ریزی شده است. به عنوان مثال،  برای دو فرایند است.

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

: \lim_{n \rightarrow \infty} n(\sqrt[n]{2} - 1) = \ln 2 \approx 0.693147\ldots

بنابراین، برآورد تقریبی این است که RMS می‌تواند تمام مهلت‌های پایان مقرر را در صورتی که نرخ بهره‌وری CPU کمتر از ۶۹٫۳۲٪ باشد برآورده کند. ۳۰٫۷٪ باقی از CPU را می‌توان به وظایف غیر بی‌درنگ کم اولویت اختصاص داد.

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

محدودیت هایپربولیک یک شرط کافی با محدودیت شدیدتر نسبت یه روش ارائه لی(Liu) و لیلند (Layland) برای بازه قابلیت برنامه‌ریزی است

: \prod_{i=1}^n (U_i +1) \leq 2

که در این رابطه  کارایی پردازنده برای هر وظیفه است.

تخصیص اولویت نرخ مونوتونیک بهینه است، به این معنی که اگر هر الگوریتم برنامه‌ریزی استاتیک اولویت دیگری بتواند تمام ضرب‌الاجل‌ها را برآورده کند، الگوریتم نرخ مونوتونی نیز می‌تواند.

الگوریتم زمانبندی مونوتونیک مهلت برای دوره‌ها و ضرب‌العجل‌های برابر نیز بهینه است، در واقع در این مورد الگوریتم‌ها یکسان هستند.

علاوه بر این، زمانبندی مونوتنیک ضرب‌الاجل زمانی مطلوب است که ضرب‌الاجل کمتر از دوره باشد. الگوریتم Audsley که دارای تست برنامه‌ریزی دقیق برای این مدل است، برای یک مدل کاری که در آن ضرب‌الاجل می‌تواند بیشتر از دوره باشد، یک تخصیص اولویت بهینه را تعیین می‌کند.

## اجتناب از عدم رعایت اولویت
در بسیاری از کاربردهای عملی، منابع به اشتراک گذاشته می‌شوند و RMS بدون تغییر، باعث می‌شود در معرض خطر عدم رعایت اولویت و همچنین در معرض خطر وقوع بن‌بست قرار گیرد.

در عمل این مشکل را با غیرفعال کردن امکان قبضه یا ارث بری اولویت‌ها حل می‌کنند.

همچنین روش‌های جایگزینی وجود دارد مانند استفاده از الگوریتم‌های بدون قفل یا اجتناب از اشتراک (mutex) یا نشان‌بر(semaphore) بین رشته‌های دارای اولویت مختلف، که در وهله اول اینکار می‌تواند باعث جلوگیری از تداخل منابع شود.

### غیرفعال کردن عملکرد غیر انحصاری
* `OS_ENTER_CRITICAL()` و `OS_EXIT_CRITICAL()` دستورهایی هستند که از وقوع وقفه در سیستم عامل‌های بی‌درنگ جلوگیری می‌کنند مانند MicroC / OS-II
* خانواده ای از دستورهای `splx()` که از آنها برای کنترل اولویت استفاده می‌شود، ممکن است از آنها برای ایجاد وقفه‌های کم اولویت استفاده شود (FreeBSD 5.x / 6.x)

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

الگوریتم‌های ارث بری اولویت می‌توانند با دو ویژگی مشخص شوند.

ویژگی اول وراثت تنبل یا فوری (بلافاصله):

تنبل (فقط زمانی اعمال می‌شود که ضروری است) یا وراثت بلافاصله (افزایش اولویت قبل از وقوع یک تداخل)

ویژگی دوم اولویت خوش بین یا بدبین:

اولویت خوش‌بینانه (افزایش به اندازه حداقل مقدار) بدبینانه (افزایش بیشتر از حداقل مقدار)

در عمل هیچ تفاوت ریاضی (از لحاظ استفاده از سیستم Liu-Layland محدود) بین الگوریتم‌های تنبل و فوری وجود ندارد و الگوریتم‌های فوری برای پیاده‌سازی کارآمدتر هستند و بنابراین در سیستم‌های عملی معمولاً از آنها استفاده می‌شوند.

یک نمونه از استفاده از وراثت اولیه (ساده) اولویت مربوط به "خطای بازنشانی پیمایش مریخ " است

## مثال

بهره‌وری برابر است با:

: \frac{1}{8} + \frac{2}{5} + \frac{2}{10} = 0.725

شرایط کافی برای ۳ فرایند، که می‌توان نتیجه گرفت که سیستم قابل برنامه‌ریزی و زمانبندی است:

از آنجاییکه سیستم مطمئناً قابل برنامه‌ریزی است

اما به یاد داشته باشید، این شرط لازم نیست؛ بنابراین ما نمی‌توانیم بگوییم که یک سیستم با بهره‌وری بیشتر با این الگوریتم زمانبندی قابل برنامه‌ریزی نیست یا نه.

## جستارهای وابسته
* زمانبندی مونیتونی
* برنامه‌ریزی اولویت پویا
* اولین برنامه زمانبندی اولیه مهلت
* برنامه‌ریزی (محاسبات)

## منابع

## برای مطالعهٔ بیشتر

* .
*    
* ، فصل ۶
* .
* 

## پیوند به بیرون
* خط مشی مریخ Pathfinder از تحقیق @ مایکروسافت
* آنچه واقعاً در مریخ روبر پاتفیندر توسط مایک جونز از The Risks Digest, Vol. 19، شماره ۴۹
رده:رایانش بی‌درنگ