اجزای اصلی RTOS؛ قلب تپنده سیستم
اگر RTOS را یک شهر هوشمند در نظر بگیریم، هر بخش از آن نقش مشخصی دارد. در این شهر، هیچ کاری بدون برنامهریزی انجام نمیشود. همه چیز زمانبندی شده، اولویتبندی شده و تحت کنترل است.
در این بخش با مهمترین اجزای RTOS آشنا میشویم:
Task (وظیفه)
Scheduler (زمانبند)
Context Switching (تعویض زمینه)
Queue (صف)
Semaphore (سمافور)
Mutex (قفل دسترسی)
اینها ستونهای اصلی هر سیستم عامل بلادرنگ هستند.
Task چیست؟
در RTOS، برنامه دیگر یک حلقه بزرگ while(1) نیست. بلکه به بخشهای کوچکتر به نام Task تقسیم میشود.
هر Task در واقع یک وظیفه مستقل است که:
کد مخصوص خودش را دارد
حافظه و وضعیت اجرای خودش را دارد
میتواند در زمان مشخص اجرا شود
میتواند متوقف یا دوباره اجرا شود
مثال ساده
فرض کنید یک سیستم هوشمند دارید که باید:
دما را بخواند
داده را به سرور ارسال کند
یک LCD را بهروزرسانی کند
در RTOS این سه کار به سه Task جدا تبدیل میشوند:
Task سنسور دما
Task ارتباط شبکه
Task نمایشگر
هر کدام مستقل هستند، اما توسط RTOS هماهنگ میشوند.
ویژگی مهم Task: حالتهای مختلف اجرا
هر Task در RTOS فقط اجرا نمیشود، بلکه در حالتهای مختلف قرار میگیرد:
1. Running (در حال اجرا)
Task در حال استفاده از CPU است.
2. Ready (آماده اجرا)
Task آماده است اما CPU در اختیار Task دیگری است.
3. Blocked (مسدود)
Task منتظر یک رویداد است (مثلاً دریافت داده یا پایان زمان تأخیر).
4. Suspended (متوقف)
Task بهصورت دستی متوقف شده است.
این حالتها باعث میشوند RTOS بتواند مدیریت دقیقی روی اجرای برنامه داشته باشد.
Scheduler چیست؟
Scheduler مهمترین بخش RTOS است.
اگر Taskها را بازیگران یک صحنه تئاتر در نظر بگیریم، Scheduler کارگردان است.
وظیفه Scheduler این است که تصمیم بگیرد:
کدام Task اجرا شود
چه زمانی اجرا شود
چه مدت اجرا شود
در چه لحظهای متوقف شود
انواع Scheduling در RTOS
در سیستمهای RTOS معمولاً چند نوع زمانبندی وجود دارد:
1. Preemptive Scheduling (اولویتمحور)
در این حالت اگر یک Task مهمتر آماده شود، اجرای Task فعلی قطع میشود و Task جدید اجرا میشود.
2. Cooperative Scheduling (همکاریمحور)
در این حالت Taskها خودشان کنترل CPU را به Task دیگر واگذار میکنند.
در میکروکنترلرها معمولاً Preemptive استفاده میشود چون دقیقتر و قابل اعتمادتر است.
Priority (اولویت Taskها)
در RTOS همه Taskها برابر نیستند.
هر Task یک اولویت (Priority) دارد.
Task با اولویت بالا سریعتر اجرا میشود
Task با اولویت پایین ممکن است دیرتر اجرا شود
مثال واقعی
فرض کنید در یک سیستم پزشکی:
خواندن ضربان قلب → اولویت بالا
ذخیره داده در حافظه → اولویت متوسط
نمایش گراف → اولویت پایین
اگر سیستم شلوغ شود، RTOS اول کارهای حیاتی را انجام میدهد.
Context Switching چیست؟
یکی از مفاهیم بسیار مهم در RTOS، تعویض زمینه (Context Switching) است.
تعریف ساده:
زمانی که CPU از یک Task به Task دیگر میرود، باید وضعیت Task قبلی را ذخیره و وضعیت Task جدید را بازیابی کند.
این شامل موارد زیر است:
مقدار رجیسترها
شمارنده برنامه (Program Counter)
وضعیت حافظه
وضعیت Stack
مثال ساده
فرض کنید دارید کتاب میخوانید، وسط صفحه را علامت میزنید، سپس کتاب را میبندید و میروید سراغ کتاب دیگر. بعداً دوباره برمیگردید و از همان نقطه ادامه میدهید.
RTOS دقیقاً همین کار را برای Taskها انجام میدهد.
Queue چیست؟
Queue (صف) یکی از ابزارهای مهم ارتباط بین Taskها است.
در RTOS، Taskها معمولاً باید با هم ارتباط داشته باشند. Queue مثل یک کانال ارتباطی امن عمل میکند.
کاربرد Queue
ارسال داده بین Taskها
انتقال اطلاعات سنسور
مدیریت پیامها
ذخیره موقت دادهها
مثال
Task سنسور دما مقدار 25 درجه را میخواند و در Queue قرار میدهد.
Task نمایشگر این مقدار را از Queue دریافت میکند و روی LCD نشان میدهد.
Semaphore چیست؟
Semaphore یک ابزار برای هماهنگی بین Taskهاست.
کاربرد اصلی:
کنترل دسترسی به منابع مشترک یا هماهنگسازی اجرا
مثال ساده:
فرض کنید دو Task میخواهند همزمان از یک پرینتر استفاده کنند. اگر کنترل نباشد، دادهها قاطی میشوند.
Semaphore مثل یک چراغ راهنمایی عمل میکند:
سبز → اجازه ورود
قرمز → انتظار
انواع Semaphore
1. Binary Semaphore
فقط دو حالت دارد: 0 یا 1
برای کنترل ساده استفاده میشود.
2. Counting Semaphore
میتواند چند مقدار داشته باشد
برای مدیریت چند منبع همزمان استفاده میشود.
Mutex چیست؟
Mutex (Mutual Exclusion) شباهت زیادی به Semaphore دارد اما دقیقتر و امنتر است.
Mutex برای این استفاده میشود که فقط یک Task در یک زمان مشخص به یک منبع دسترسی داشته باشد.
تفاوت مهم Mutex و Semaphore
Mutex مالک دارد (Owner دارد)
Semaphore مالک ندارد
مثال واقعی
اگر یک فایل روی حافظه SD دارید:
فقط یک Task باید بتواند همزمان آن را تغییر دهد
Mutex این کار را تضمین میکند
تفاوت Queue، Semaphore و Mutex
این سه مفهوم معمولاً با هم اشتباه گرفته میشوند:
| ابزار | کاربرد اصلی |
|---|---|
| Queue | انتقال داده |
| Semaphore | هماهنگی و سیگنالدهی |
| Mutex | کنترل دسترسی انحصاری |
چرا این مفاهیم مهم هستند؟
اگر این ابزارها وجود نداشتند:
دادهها خراب میشدند
Taskها با هم تداخل پیدا میکردند
سیستم غیرقابل پیشبینی میشد
خطاهای سختگیرانه (Hard Fault) رخ میداد
در واقع این ابزارها باعث میشوند RTOS قابل اعتماد و صنعتی باشد.
جمعبندی این بخش
در این بخش فهمیدیم که RTOS فقط یک سیستم عامل ساده نیست، بلکه یک ساختار دقیق برای مدیریت همزمانی است.
مفاهیمی مثل Task، Scheduler، Queue، Semaphore و Mutex پایههای اصلی این سیستم هستند. بدون درک این مفاهیم، کار با هیچ RTOSی مثل FreeRTOS یا Zephyr بهصورت حرفهای ممکن نیست.
در بخش سوم و پایانی مقاله بررسی میکنیم:
Context Switching در سطح سختافزار
FreeRTOS و RTOSهای معروف
مزایا و معایب واقعی RTOS در پروژههای صنعتی
اشتباهات رایج برنامهنویسان
و یک جمعبندی کاملاً کاربردی برای انتخاب بین Bare Metal و RTOS
برای مطالعه بخش سوم اینجا کلیک کنید

