⚙️ کالبدشکافی فنی AhuraRTOS
بخش ۳ | IPC، Preemption، Atomics و مدیریت حافظه
🔐 ۵. ارتباطات بینتسکی و کنترل Preemption
در یک RTOS، فقط انتقال داده بین Taskها مهم نیست؛ نحوه محافظت از دادههای مشترک هم اهمیت زیادی دارد.
AhuraRTOS برای این کار دو مکانیزم متفاوت در اختیار برنامهنویس قرار میدهد:
🔹 Scheduler Lock
با:
os_kernel_lock()
Scheduler متوقف میشود، اما Interruptها همچنان فعال هستند.
یعنی Task دیگری نمیتواند جای Task فعلی را بگیرد، اما ISRها میتوانند اجرا شوند.
این روش برای محافظت از دادههایی که فقط بین چند Task مشترک هستند مناسب است، چون باعث افزایش غیرضروری Interrupt Latency نمیشود.
🔹 Critical Section
با:
os_critical_enter()
Interruptها نیز Mask میشوند.
بنابراین زمانی کاربرد دارد که دادهای بین یک Task و ISR بهصورت مشترک استفاده میشود و باید از دسترسی همزمان جلوگیری شود.
تفاوت کلیدی:
Scheduler Lock → جلوگیری از Context Switch
Critical Section → جلوگیری از Interrupt + Context Switch
🔒 Mutex و Priority Inheritance
یکی از مشکلات کلاسیک RTOSها، Priority Inversion است.
فرض کنید:
Low Priority Task → Mutex را در اختیار دارد
و همزمان:
High Priority Task → منتظر همان Mutex است
در این حالت یک Task با Priority متوسط میتواند باعث شود Task با Priority بالا برای مدت طولانی منتظر بماند.
AhuraRTOS برای کاهش این مشکل از Single-level Priority Inheritance استفاده میکند.
یعنی Priority مالک Mutex، بهصورت موقت تا سطح Task منتظر افزایش پیدا میکند و پس از آزاد شدن Mutex، Priority به حالت قبلی برمیگردد.
📬 Task Notification
برای ارتباطات ساده و سریع، AhuraRTOS از Task Notification استفاده میکند.
Notification مستقیماً داخل TCB (Task Control Block) قرار دارد و میتواند مانند یک Mailbox بسیار کوچک عمل کند.
مزیت اصلی:
⚡️ بدون نیاز به ساخت یک Object جداگانه IPC
⚡️ مصرف حافظه کمتر
⚡️ مسیر سریع برای بیدار کردن یک Task
⚛️ ۶. اما Atomics و مدیریت حافظه
AhuraRTOS بین معماریهای مختلف ARM در پیادهسازی عملیات Atomic تفاوت قائل میشود.
🔹 ARMv6-M — Cortex-M0/M0+
به دلیل محدودیتهای این معماری، عملیات Atomic با استفاده از Critical Section پیادهسازی میشود.
🔹 ARMv7-M و بالاتر
از قابلیتهای سختافزاری ARM مانند LDREX/STREX برای پیادهسازی عملیات Atomic استفاده میشود و امکان اجرای Lock-free فراهم میشود.
🧠 مدیریت Kernel Heap
مدیریت Heap در AhuraRTOS از الگویی مشابه heap_4 استفاده میکند، اما یک نکته مهم دارد:
Address-ordered Free List
بلوکهای آزاد بر اساس آدرس مدیریت میشوند؛ بنابراین هنگام آزاد شدن حافظه، بلوکهای مجاور میتوانند با یکدیگر Coalesce شوند.
نتیجه:
Free Block + Adjacent Free Block → Larger Free Block
این کار به کاهش Fragmentation کمک کرده و امکان استفاده مجدد بهتر از حافظه را فراهم میکند.
📦 Queue و جلوگیری از Silent Overflow
در Queueهای Static، استفاده از:
OS_QUEUE_DEFINE_STATIC
باعث میشود اندازه آیتم و ظرفیت Queue مستقیماً از آرایه و با استفاده از sizeof مشخص شود.
این رویکرد احتمال خطاهایی را کاهش میدهد که در آن توسعهدهنده ظرفیت Queue را بیشتر از حافظه واقعی تعریف میکند؛ خطایی که ممکن است در ظاهر بدون مشکل اجرا شود اما در زمان اجرا باعث Memory Corruption شود.
🎯 در این بخش دیدیم که AhuraRTOS فقط روی Scheduler تمرکز ندارد؛ بلکه در لایههای IPC، Synchronization، Atomic Operations و Memory Management نیز تلاش میکند سربار کم و رفتار قابل پیشبینی داشته باشد.
🔜 ادامه دارد...
@Amin_Techlab
4
1August 8, 2026 442 2