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

سیستم عامل بلادرنگ RTOS چیست؟
عبارت RTOS خلاصه شده Real-Time Operating System است، یعنی سیستم عامل بلادرنگ. اما بلادرنگ یعنی چه؟ برای رسیدن به پاسخ این سوال، نیاز است که ابتدا به مفهوم بلادرنگ یا Real-Time بپردازیم. در این مقاله بررسی می کنیم که، بلادرنگ چه چیزی هست و چه چیزی نیست. در ویدئو آموزشی زیر در قالب چند مثال به زیبایی مفهوم بلادرنگ بیان شده است.
مشاهده ویدئو
یک ذهنیت اشتباه
در نگاه اول خیلی افراد ممکنه فکر کنند زمانی که یک سیستم پردازش بلارنگ داره، به این مفهومه که دارای سخت افزارهای گران قیمت و اصطلاحا خفن هست! یک CPU بسیار قوی، RAM و … ، اما جالبه که بدونید سخت افزار قوی و گران قیمت هیچ ارتباطی با بلادرنگ بودن پردازش نداره! حالا داستان چیه؟ در ادامه مقاله بررسی میکنیم!
بلادرنگ یا Real-Time
زمانی که می گیم یک کاربرد بلادرنگ هست، به این معنی ست که یک رویداد رخ می دهد، بلافاصله سیستم پردازشی باید متوجه رخداد شود، و فورا پردازش های مورد نظر را باید انجام دهد. اما از زمان وقوع رخداد چقدر زمان سپری میشه تا پردازش های مرتبط انجام و کامل بشه؟
معمولا این زمان باید به حدی کم باشه که از دید ناظر بیرونی، در یک لحظه احساس بشه، بدون تاخیر یا به عبارت دیگر بلادرنگ (بی درنگ). حالا که نسبت به بحث بلادرنگ قدری درک شهودی پیدا کردیم، اجازه بدید تعریف دقیقتری برای پردازش بلادرنگ داشته باشیم.
در RTOS امکان اولویت بندی وقایع وجود دارد. بسته به اهمیت رویدادی که رخ می دهد، یک ضرب الاجل (dead-line) برای انجام آن درنظر می گیریم، که طبیعتا زمان پردازش مورد نیاز آن از چند میکرو ثانیه تا چند میلی ثانیه می تونه طول بکشه. در شرایطی که زمان پاسخ گویی سیستم به رخداد (Response time) از ضرب الاجل تعیین شده، تجاوز نکنه، گفته میشه پردازش به صورت بلادرنگ انجام شده. و چرا Response Time انقدر برای ما در سیستم های بلادرنگ مهم هست؟
نحوه کارکرد سیستم عامل RTOS
زمانی که تصمیم می گیریم پروژه ای را بر مبنای RTOS پیاده سازی کنیم، لازمه با عینک و دنیا بینی RTOS به پروژه نگاه کنیم! در این حالت پروژه بزرگ به تعدادی پروژه کوچکتر شکسته می شه. هر کدام از پروژه های کوچکتر حکم یک ویژگی برای سیستم کلی را دارن. این ویژگی ها را می تونیم در لوپ (حلقه) های مجزا و مستقل از هم پیاده سازی کنیم. در اصطلاح سیستم عاملی به این لوپ های مجزا که هر کدام یک ویژگی سیستم را در بر دارد تسک (Task) گفته میشه.
- در سیستم عامل RTOS می تونیم تسک ها رو با توجه به اهمیت اجرا اولویت بندی کنیم!
- سیستم عامل RTOS بر پایه واحد زمان بندی کننده (scheduler) تسک ها رو زمانبندی می کند.
- scheduler با توجه به اولویت تعیین شده برای تسک ها، جهت اجرا به تسک ها بودجه زمانی اختصاص می دهد.
در مقاله ای دیگر تحت عنوان استفاده از سیستم عامل RTOS در میکروکنترلرها روش کارکرد سیستم عامل با جزئیات خیلی بیشتری تشریح شده است. برای اطلاعات بیشتر حتما مقاله را مشاهده نمایید.
چرا به پردازش های بلادرنگ نیاز داریم؟
در نظر بگیرید خودرویی دچار صانحه ی تصادف بشه و کیسه هوای آن به موقع باز نشه. فاجعه اتفاق می افته درسته؟ بهترین مثالی که اهمیت پردازش بلادرنگ را نشان میده، بدون شک کیسه هوای خودرو هست. بنابراین فاجعه زمانی رخ می دهد که Response time مورد نظر برآورده نشه، و شروع و تکمیل یک فرایند از ضرب الاجل تعیین شده تجاوز کنه. بله نتیجه مرگ یا آسیب جدی سرنشین خودرو خواهد بود!
چند نمونه دیگر از این مثال ها رو شما می توانید نام ببرید؟ ددلاین هایی که اگر رعایت نشوند و از دست بروند، صدمات جانی و مالی در پی دارند! به همین جهت سیستمی که قراره کاربرد سخت (Hard Real-Time Application) داشته باشه، باید بتونه از پس زمانبندی تسک های اولویت بالا در ددلاین تعیین شده بر بیاد. در غیر این صورت سیستم طراحی شده امن نیست و باید دور ریخته شود و دوباره طراحی بشه!
منابع پیشنهادی جهت یادگیری FreeRTOS
در لینک زیر می تونید کتاب الکترونیکی را دانلود کنید و یک شروع سریع با سیستم عامل FreeRTOS برای میکروکنترلر STM32 داشته باشید.
همینطور می تونید در دوره جامع آموزش سیستم عامل FreeRTOS در لینک زیر شرکت کنید.
لینک های مفید
نصب و راه اندازی FreeRTOS با STM32 و cubeMX
استفاده از سیستم عامل RTOS در میکروکنترلرها
مقایسه برنامه نویسی به روش RTOS و Super Loop
برنامه نویسی به روش RTOS امروز یک ضرورت است؟!
اگر سوال، پیشنهاد ویا نظری راجع به این مطلب دارید، از قسمت نظرات در پایین همین صفحه، می توانید با ما و بقیه ی خوانندگان درمیان بگذارید.
جهت مطلع شدن از آموزش های جدید به خبرنامه ی EasyMCU بپیوندید.
درباره مرتضی زندی
خلق کردن شماره 1 علاقه مندی های من هست. برنامه نویسی بهترین ابزاری بوده که تا الان برای این کار پیدا کردم. بیس الکترونیک دارم و دستی بر آتش در دنیای رشته های مجاور. تجربه سال ها فعالیت در تیم های R&D رو دارم، در این بین در حوزه ی امبدد سیستم ها فعالیتم پررنگ تر هست. عاشق یادگیری و یاد دادن هستم و تلاش می کنم تجربیاتم رو به زبانی ساده از طریق EasyMCU.org به نحوی کاربردی و موثر با علاقه مندان این حوزه به اشتراک بذارم.
نوشته های بیشتر از مرتضی زندیمطالب زیر را حتما مطالعه کنید
آموزش نصب و راه اندازی سیستم عامل Free RTOS برای آردوینو Arduino
آموزش نصب و راه اندازی سیستم عامل Free RTOS روی STM32
آموزش FreeRTOS نحوه استفاده از میوتکس Mutex
آموزش Free RTOS نحوه استفاده از سمافور Semaphore
آموزش STM32 راه اندازی وقفه خارجی EXTI
معرفی کتاب ARM
12 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
دیدگاهتان را بنویسید لغو پاسخ
این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش میشوند.
سلام. قابلیت اطمینان در سیستمهای Bare-metal بالاست یا آرتاس؟
درود بر شما.
در هر دو سبک baremetal و RTOS ، اطمینان می تونه بالا و یا کم باشه، بستگی به پیاده سازی داره.
در کل برای پروژه های کوچک baremetal کافی هست.
برای پروژه های متوسط و بزرگ RTOS گزینه مطلوبتری هست.
با آرزوی بهترین ها.
سلام ببخشید یک idیا گروهی معرفی میکنید سوالات و اشکالاتfreertosبپرسیم و اینکه خودتون حضور داشته باشید در اون گروه که پاسخ دهید . ممنون
درود بر شما.
دوستان شرکت کننده در دوره FreeRTOS در حال حاضر می تونن با شماره واتساپ سایت موجود در بخش تماس با ما در ارتباط باشند. به اینصورت اگر سوال و یا مشکلی از مطالب ارائه شده در دوره FreeRTOS دارید، بررسی و پاسخ داده می شود.
با آرزوی بهترین ها
ممنون از سایت خوبتون و پاسخگویی تون
ممنون میشم اگه در موردtask notificationsو event group هم مطلب بزارید .
و اینکه حتما لازم یک متغییر از یک تسک به تسک دیگر باqueueارسال بشه یا با متغییر Global هم ارسال بشه اوکی درصورتی که بدونیم از این متغییر در جای دیگه ایی به جز این دوتا تسک استفاده نکردیم .ممنون
خواهش می کنم، خوشحالم مفید بوده.
به امید خدا مباحث جدید رو در نظر داریم در آپدیت های آینده به دوره FreeRTOS اضافه کنیم.
اینکه در عوض queue از متغییر Global استفاده بشه، بستگی به شرایط پروژه داره، به عنوان یک قائده کلی نمیشه گفت درسته، اما در شرایط خاصی می شه استفاده کرد. بستگی به معماری پروژه داره و البته محدودیت ها رو بیشتر می کنه.
سلام مهندس، ممنون بابت جواب.
در شرایطی که baremetal با روشهای استاندارد (MISRA……) تولید شده باشد و مدت زمان تولید برنامه نادیده گرفته شود صرفا از دیدگاه قابلیت اطمینان؟ ( هر چند که نادیده گرفتن زمان برای نوشتن کد غیر فنی هست)
درود بر شما.
خواهش می کنم. متاسفانه متوجه سوالتون نشدم. MISRA و … ها زمانی که تعداد برنامه نویس ها زیاد هست و قراره یک پروژه گروهی کار بشه برای یکدست بودن کار اهمیت پیاده می کنه که خروجی تکه های پروژه یک دست باشه و یکسری اصول اولیه رعایت بشه و … .
قابلیت اطمینان بستگی به پروژه داره، اینکه کجا قراره کار کنه و چه استانداردهایی رو باید پاس کنه. برای شرایط خاصتر RTOS هایی هم وجود دارند که استانداردهای خاصی رو پاس کردند.
امیدوارم مفید بوده باشه.
با آرزوی بهترین ها
سلام ممنون از پاسخگویی
ببخشید ی سوال دیگه Queue mail چیه و همچنین
xQueue send to back from isr
یا
XQueue send to front from isr
چه مزیتی نسبت به
XQueue send from isrدارد ؟
درود بر شما. خواهش می کنم.
در مورد سوال اول : عبارت mail در سیستم عامل های مختلف می تونه مفهوم متفاوتی داشته باشه، اما در FreeRTOS ، عبارت هست از Queue ای که دارای یک Item است و این Item توسط فرستنده overwrite می شود و هرگز توسط گیرنده پاک نمی شود بلکه Peek می شود.
در مورد سوال دوم : دو API یاد شده، xQueueSendToBackFromISR و xQueueSendFromISR معادل یکدیگر می باشند و تفاوتی ندارند و موجب می شوند در عملیات Enqueue ، اون item جدید در ته صف اضافه شود. این در حالی هست که API دیگر xQueueSendToFrontFromISR موجب می شود در عملیات Enqueue، اون item جدید به جلو صف اضافه شود.
سوال مربوط به Queue رو بهتر بود در لینک زیر می پرسیدید
https://easymcu.org/fa/freertos-what-is-queue/
با آرزوی بهترین ها
سلام ببخشید delayبرحسبmicro secondچه جوری درسیستم عاملfreertosایجاد کنیم باstm32 ؟ممنون
درود بر شما.
اگر میزان تاخیر مورد نیاز در رنج میکرو ثانیه هست، از تاخیرهای عادی در روش برمتال می تونید استفاده کنید، فقط سعی کنید تا جای ممکن کم و محدود استفاده کنید.
با آرزوی بهترین ها