آموزش ARM, کارگاه آموزشی

سیستم عامل بلادرنگ در سیستم های Embedded

امروزه سیستم عامل­های بلادرنگ[1] کاربرد گسترده و روز افزونی در سیستم­های Embedded دارند. سیستم عامل با مدیریت کارامد سخت افزار باعث افزایش کارایی و قابلیت اطمینان سیستم می­شود. همچینین با فراهم نمودن لایه­ای بین سخت افزار موجب سادگی فرآیند توسعه نرم افزار می­شود.

سیستم عامل مبحث بسیار گسترده­ای است. لذا در اینجا فقط به بیان مفاهیمی از آن که در سیستم های Embedded و به ویژه سیستم­های میکروکنترلی نیاز است پرداخته شده است.

فهرست مطالب

سیستم عامل بلادرنگ

سیستم عامل بلادرنگ از ادغام دو عبارت سیستم عامل و سیستم بلادرنگ تشکیل شده است. سیستم عامل به نرم افزاری گفته می شود که سخت افزار را  مدیریت کرده و بستری را فراهم می کند تا نرم افزار های کاربر در آن اجرا شوند. بعنوان مثال سیستم عامل ویندوز یکی از نمونه­های شناخته شده است که محیطی فراهم می آورد که برنامه­های کاربر نظیرGoogle Chrome، Microsoft Word  و … در آن به بدون درگیر شدن با جزئیات سخت افزار براحتی اجرا شوند.  امروزه حتی تصور استفاده از کامپیوترهای شخصی بدون سیستم عامل غیر ممکن است. سیستم عامل­ها معمولا سرویس­هایی نظیر مالتی تسکینگ، همزمان سازی، کنترل وقفه و ایونت، ارتباط بین تسک ها و تایمر و مدیریت حافظه و …  فراهم می کنند. سیستم های بلادرنگ نیز به سیستم های گفته می شود که در آن­ها درستی پاسخ علاوه بر نتیجه منطقی، به زمان  تولید آن نیز وابسته باشد. لذا سیستم عامل بلادرنگ به سیستم عاملی گفته می شود که علاوه بر فراهم نمودن نتیجه منطقی صحیح در مدت زمان معین پاسخ را فراهم آورد. ساختار پایه سیستم عامل بلادرنگ شبیه سیستم عامل های معمولی است که علاوه بر آن، امکان مدیریت زمانی تسک ها را فراهم می­کند. سسیتم عامل بلادرنگ همیشه باعث افزایش سرعت سیستم نمی شود ولی مشخصه های زمانی دقیق تری ارایه می دهد. در واقع سرعت سیستم را سخت افزار سیستم مشخص می­کند.

امروزه سیستم عامل های بلادرنگ کاربرد گسترده ای در سیستم Embedded دارد. همه سیستم های Embedded با استفاده از سیستم عامل طراحی نمی­شوند. در مواردی که نرم افزار سیستم ساده و کوچک باشد نیازی به استفاده از سیستم عامل نیست ولی هنگامی که نرم افزار بزرگ و پیچیده باشد، استفاده از سیستم عامل ضروری است.

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

 

در این بخش تفاوت سیستم عامل­های بلادرنگ با سیستم عامل­های عمومی بیان شده است. منظور از سیستم عامل­های عمومی سیستم عامل­هایی نظیر ویندوز است. در این قسمت سیستم عاملا بلادرنگ را در سه مشخصه زیر با سیستم عامل عمومی مقایسه شده است.

  • Determinism

 تفاوت اصلی سیستم عامل های بلادرنگ با سیستم عامل­های عمومی ویژگی Determinism آن­ها است. در این مبحث Determinism به معنای مشخص بودن دقیق مدت زمان اجرای هر تسک است. در سیستم عامل های بلادرنگ همواره بیشترین مدت زمان اجرای هر تسک مشخص است. ولی در سیستم عامل های عمومی مدت زمان اجرای هر تسک مهم نیست.

  • مدیریت تسک­ها

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

  • کرنل Preemptive

سیستم عامل های بلادرنگ بصورت Preemptive هستند بطوریکه وقتی یک تسک با اولویت بالاتر نیاز به اجرا داشته باشد، تسک با اولویت پایین متوقف شده و تسک با اولویت بالاتر اجرا می­شود. این امر موجب می­شود که سیستم به رویدادهای مهم، سریع پاسخ دهد.

  • کاربرد

سیستم عامل های بلادرنگ غالبا در سیستم­های Embedded استفاده می­شوند ولی سیستم عامل­های عمومی در کامپیوترهای شخصی و دیگر کامپیوترهایی که استفاده همه منظوره دارند، استفاده می­شوند

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

سیستم عامل های بلادرنگ نسبت به درجه تحمل از دست دادن Deadline به سه دسته زیر تقسیم می شوند.

  • سیستم عامل های Hard Real-Time

در این نوع سیستم عامل درجه تحمل  از دست دادن Deadline بسیار ناچیز است و از دست دادن Deadline موجب شکست کل سیستم می شود.

  • سیستم عامل های Firm Real-Time

در این سیستم عامل ها از دست دادن  Deadlineموجب افت کیفیت سیستم می­شود ولی موجب شکست کل سیستم نمی شود.

  • سیستم عامل های Soft Real-Time

در این سیستم عامل ها ممکن است Deadline ها از دست بروند و موجب شکست کل سیستم نمی شود و سیستم نیز کیفیت قابل قبولی دارد.

در کاربردهایی نظیر باز شدن کیسه هوای خودرو اندکی تاخیر می­تواند تلفات جبران ناپذیری داشته باشد. لذا در این گونه کاربردها سیستم حتما باید Hard Real-Time باشد. در صورتیکه در سیستم هایی نظیر پخش زنده تلویزیون اندکی تاخیر قابل پذیرش است و می توان از سیستم عامل های Soft Real-Time استفاده نمود.

ساختار سیستم عامل های بلادرنگ

سیستم عامل­های بلادرنگ های ساده تنها از کرنل تشکیل شده­اند. هر چه به پیچیدگی سیستم افزوه ­شود بلوک­هایی نظیر فایل سیستم، پروتکل­های شبکه و … به آن اضافه می­شود. ساختار کلی سیستم عامل­های بلادرنگ در شکل 1 نشان داده شده است. در ادامه کرنل که مهم­ترین بخش سیستم عامل است بررسی شده است.

ساختار ساده شده سیستم عاملهای بلادرنگ
ساختار ساده شده سیستم عاملهای بلادرنگ

کرنل

کرنل در واقع هسته مرکزی سیستم عامل است و بعنوان لایه بین سخت افزار و نرم افزار کاربر عمل می کند. در حالت کلی کرنل ها به سه دسته Monolithic Kernel ، Microkernel و Hybrid Kernel تقسیم می شوند.

  • Monolithic Kernel

در این نوع کرنل یک برنامه مسئول اجرای کلیه تسک های مرتبط با کرنل است. کرنل کلیه سرویس موردنیاز نظیر مدیریت حافظه، مدیریت وقفه و … را بر عهده دارد. در این نوع کرنل نسبت به سایر کرنل­های دیگر تعداد Context Switching و Messaging  بسیار کمتر است لذا نسبتا سریعتر است. سیستم عامل های Linux و FreeBSD و … در این گروه قرار دارند.

  • Microkernel

این نوع کرنل حداقل سرویس­های لازم نظیر مدیریت حافظه، ارتباط بین تسک­ها و مدیریت تسک­ها را فراهم می­کند و سایر سرویس­ها مستقیما توسط کرنل انجام نمی­شود.  Microkernel نسبت به کرنل Monolithic  پایدارتر است چرا که با در صورتیکه­ هر یک از سرویس دهنده (مانند فایل سیستم) دچار مشکل شود، موجب شکست کرنل نمی­شود. کرنل­هایی نظیر QNX و MINIX در گروه قرار دارند.

  • Hybrid Kernel

کرنل Hybrid در واقع ترکیبی از کرنلMonolithic  و Microkernel است. کرنل Hybrid سرعت و سادگی طراحی کرنل Monolithic  و ساختار ماژولار کرنل Microkernel را داراست.

کرنل مسئول مدیریت سخت افزار و ارائه سرویس به سایر نرم افزار­ها است. در شکل 2 سرویس­هایی که اکثر کرنل­ها ارائه می­دهد، نشان داده شده است.

سرویس های کرنل
سرویس های کرنل

Task Management

در سیستم عامل های Embedded نرم افزار سیستم به بخش های کوچک و قابل اجرا به نام تسک تجزیه می شوند.  هر تسک با سه مشخصه زمانی  Release Time و  Deadline و Execution Time مدیریت می شوند.  Release Time به زمانی اشاره می­کند که تسک می تواند آغاز شود. Deadline زمان اتمام تسک را مشخص می کند و در نهایت Execution Time مدت زمانی که طول می کشد تا تسک اجرا شود را مشخص می کند.

هر تسک در می تواند در هر یک از حالت­های زیر باشد.

حالت کاری تسک ها در سیستم عامل
حالت کاری تسک ها در سیستم عامل
  • Dormant: در این حالت کاری تسک نیازی به زمان پردازش و سخت افزار ندارد.
  • Ready: در این حالت کاری تسک منتظر دریافت نوبت است تا به حالت کاری Activeبرود.
  • Active: در این حالت کاری تسک در حال اجرا است و پردازنده را در اختیار دارد.
  • Suspend: در این حالت کاری تسک موقتا غیر فعال است.
  • Pending: تسک منتظر منابع است.

زمانی که نرم افزار کاربر در حال اجراست هر یک از تسک ها دایما در حال رفتن از یک حالت کاری به حالت کاری دیگر هستند. ولی نکته مهم اینجاست که در هر لحظه تنها یک تسک در حالت کاری Active است.

به فرآیندی که در آن مدیریت پردازنده از یک تسک به تسک دیگر انتقال می یابد و داده ها و وضعیت تسک در حال اجرا در حافظه ذخیره شده و داده ها و وضعیت تسک بعدی از حافظه بازیابی می­شود، Context Switching گفته می­شود. Scheduler وضعیت کلیه تسک ها را نگه میدارد و از بین تسک هایی که در حالت کاری  Readyقرار دارند با توجه به الگوریتم مشخصی انتخاب کرده و مدیریت سخت افزار را به آن واگذار می کند.

البته لازم به ذکر است که هر سیستم عامل ماشین حالت کاری خود را دارد. بعنوان مثال در سیستم عامل FreeRTOS ماشین حالت بصورت شکل 3 است.

نمودار حالت کاری تسک ها در FreeRTOS
نمودار حالت کاری تسک ها در FreeRTOS

الگوریتم های Scheduling

در هر سیستم عامل Scheduler به روش­های مختلفی تسک­ها را مدیریت می­کند. در این قسمت روش­های مختلف Scheduling بررسی شده است.

روش Run To Completion

RTC اولین و ساده ترین روشScheduling  است. در این روش تسک در حال اجرا تا زمانی­که به اتمام نرسیده­اند، سخت افزار را در اختیار دارند. تسک­ها به ترتیب اجرا می­شوند و بعد از اجرای آخرین تسک مجددا تسک اول اجرا می­شود. در شکل 5 چگونگی اجرای تسک­ها نشان داده شده است.

Scheduling به روش Run To Completion
Scheduling به روش Run To Completion

مزیت این روش به سایر روش­های دیگر سادگی آن است. مهم­ترین اشکال این روش وابسته بودن زمان شروع تسک به تسک­های دیگر است. لذا سیستم اصلا Deterministic نیست.

روش Round Robin

روش RR بسیار شبیه روش RTC است با این تفاوت که تسک­ها می­توانند قبل از به پایان رسیدن می­توانند متوقف شوند و کنترل پردازنده را به تسک دیگری واگذار کنند. در شکل 6 چگونگی اجرای تسک­ها نشان داده شده است.

Scheduling به روش Round Robin
Scheduling به روش Round Robin

این روش نسبت به روش RTC انعطاف پذیری بالاتری دارد ولی در عوض پیچیدگی­های بیشتری به سیستم تحمیل می­کند. چرا که هنگامی که تسک قبل از به اتمام رسیدن متوقف می­شود نیازمند Context Switching است.

روش Time Slicing

در این روش زمان به واحدهای کوچک­تری به نام Slot تقسیم می­شود. در هر Slot یک تسک اجرا می­شود. پس از پایان Slot تسک متوقف شده و تسک بعدی شروع می­شود. این روش نسبت به روش­های قبل مشخصه­های زمانی دقیق­تری دارد. در شکل 7 چگونگی اجرای تسک­ها نشان داده شده است.

Scheduling به روش Time Slicing با قابلیت اتمام تسک قبل از اتمام Time Slot
Scheduling به روش Time Slicing با قابلیت اتمام تسک قبل از اتمام Time Slot

روش Time slice with background task

روش TS هر چند مشخصه­های زمانی دقیقی دارد ولی در صورتی­که تسک نیازی به پردازش نداشته باشد باید تا زمان شروع تسک بعدی در یک حلقه خالی منتظر بماند که موجب اتلاف زمان پردازنده می­شود. یک روش برای جلوگیری از اتلاف زمان پردازنده شروع تسک بعدی بلافاصله پس ازاتمام تسک در حال اجرا است. این روش در شکل 7 نشان داده شده است.

Scheduling به روش Time Slicing با قابلیت اتمام تسک قبل از اتمام Time Slot
Scheduling به روش Time Slicing با قابلیت اتمام تسک قبل از اتمام Time Slot

هر چند در این روش از اتلاف زمان پردازنده جلوگیری می­شود ولی رفتار Deterministic سیستم از بین می­رود. برای حل این مشکل روش TSBG پیشنهاد شده است. در این روش تسک­ها در زمان­های مشخصی شروع می­شوند و هر تسک می­تواند زودتر از پایان زمان Slot به اتمام برسند. ولی به جای شروع تسک بعدی، تسک Background اجرا می­شود. در تسک Background اقداماتی نظیر مدیریت حافظه و … انجام می­شود. لازم به ذکر است که تسک Background نمی­تواند Suspend شود.

Scheduling به روش Time slice with background task
Scheduling به روش Time slice with background task

روش Priority

روش PRI روشی متداول و کارا برای Scheduling است که در اکثر سیستم عامل­های بلادرنگ استفاده می­شود. در این روش هر تسک دارای اولویتی مشخصی است. Scheduler از بین تسک­هایی که در حالت ready قرار دارند، تسک با بالاترین اولویت انتخاب می­کند. هنگامی که وقفه­ای روی دهد ممکن است تسک با اولویت بالا را به حالت Ready ببرد. در این حالت Scheduler سریعا تسک با اولویت بالا را اجرا می­کند. لذا سیستم می­تواند به رخداد­های سیستم سریع پاسخ دهد.

روش Priority [PRI]
روش Priority

Synchronization and Communication

Synchronization  و  Communicationاین امکان را فراهم می­کند که تسک­ها بطور همزمان از منابعی مانند بافر و … استفاده کنند. بعنوان مثال تسک 1 به نتایج تسک 2 نیازمند است بنابراین تسک 2 هنگامی می تواند اجرا شود که تسک 2 نتایج موردنظر را فراهم کند.

همزمانی بین تسک ها با استفاده از مکانیزم زیر انجام می شود.

Event Object

 از  Event Object هنگامی استفاده می شود که همزمان سازی بین تسکها بدون اشتراک داده مورد نیاز باشد. Event Object به یک یا چند تسک اجازه می دهند تا منتظر رخداد بمانند.

Semaphore

سمافور دارای منابع خاصی برای شمارش منابع وQueue انتظار است. شمارنده تعداد منابع موجود را مشخص می­کند.

سمافور همانند یک کلید که دسترسی تسک به منبع مورد نظر را مشخص می­کند، عمل می­کند. یک تسک تنها زمانی می­توانند به منبع مشترک دسترسی داشته باشد که سمافور را بدست آورده باشند. سه نوع سمافور وجود دارد.

  • Binary Semaphore
  • Counting Semaphore
  • Mutually Exclusion (Mutex) Semaphore

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

نحوه کار سمافور
نحوه کار سمافور

Intertask communication

ارتباط بین تسک ها  شامل اشتراک داده و منابع و همچنین ارسال داده بین تسک ها می­شود.  ارتباط بین تسک ها با استفاده از مکانیزم زیر انجام می­شود.

Message Queue

Message Queue ابزاری است که برای به منظور تبادل داده بین تسک ها است که تسک داده را با آن ارسال و یا از آن دریافت می­کند. Queue می­تواند بصورت First In First Out (FIFO) ، Last In First Out (LIFO) و یا Priority (PRI) sequence باشد. معمولا یک Message Queue از یک بلوک کنترلی Queue، نام، ID منحصر بفرد، طول Queue، بیشترین طول Message و یک یا چند لیست تسک­های منتظر تشکیل می­شوند.

Pipe

Pipe ها ابزاری است کانل ساده ارتباطی برای داده­های بدون ساختار بین تسک ها فراهم می کنند.

Remote Procedure Call

این مکانیزم برای ارتباط بین تسک ها در سیستم عامل­های distributed بر روی پردازنده های دیگر فراهم می­آورد.

Memory Management

در حالت کلی دو نوع مدیریت حافظه در سیستم عامل­های بلادرنگ وجود دارد: Heap و Stack

هنگام Context Switching از حافظه Stack استفاده می­شود. هر تسک Stack خاص خود را دارد. حافظه Heap برای اختصاص دینامیکی حافظه استفاده می شود.

Timer Management

برای اینکه تسک­ها، بطور دقیقی برنامه ریزی شوند و یا جهت انجام Delay های نرم افزاری و … سیستم عامل دارای API مختلف Timer است.

Interrupt and event handling

سیستم عامل های بلادرنگ توابع متعددی برای مدیریت interrupt و event فراهم می کنند. از جمله این توابع می توان به تعریف handler وقفه، تعریف یا حذف ISR و … فراهم می­کنند.

evice I/O Management

سیستم عامل­های بلادرنگ معمولا دارای API های متعددی برای پشتیبانی از درایورهای ادوات مختلف هستند.

نظرتان را درباره این مقاله بگویید 14 نظر

سیستم عامل بلادرنگ در سیستم های Embedded

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *