Amin'sTechLab: post #3333 — TG.ME

Amin'sTechLab🧩 کالبدشکافی فنی AhuraRTOS رویکردی نوین در طراحی RTOS برای ARM Cortex-M بخش ۱ | معماری Kernel و فلسفه Portability 🔹 ۱. فراتر از انتزاع‌های رایج در Embedded اگر با سیستم‌های نهفته کار کرده باشید، احتمالاً با یک سؤال مهم روبه‌رو شده‌اید: ❓ چرا با تغییر معماری…
⚙️ کالبدشکافی فنی AhuraRTOS
بخش ۲ | Scheduling، Priority و Context Switching

🧠 ۳. مکانیسم Scheduling و مدیریت Priority
یکی از ویژگی‌های مهم AhuraRTOS، استفاده از Scheduler با پیچیدگی O(1) است.
یعنی زمان انتخاب Task بعدی به تعداد Taskهای سیستم وابسته نیست؛ چه ۲ Task داشته باشیم و چه ۳۲ Task، انتخاب Task آماده با زمان ثابت انجام می‌شود.
🔹 ۳۲ سطح Priority
AhuraRTOS از ۳۲ سطح اولویت، از 0 تا 31، استفاده می‌کند. این ساختار با یک 32-bit Bitmap هماهنگ است و وضعیت Taskهای Ready را به‌صورت فشرده نگهداری می‌کند.
🔹 Bitmap + CLZ
برای پیدا کردن بالاترین Priority آماده، Bitmap بررسی می‌شود. در ARMv7-M و معماری‌های بالاتر، دستور سخت‌افزاری CLZ (Count Leading Zeros) می‌تواند برای پیدا کردن موقعیت بیت موردنظر استفاده شود.
در نتیجه Scheduler به‌جای بررسی Priorityها به‌صورت ترتیبی، مستقیماً به Priority مناسب دسترسی پیدا می‌کند.
🔹 Round-Robin
اگر چند Task دارای Priority یکسان باشند، AhuraRTOS امکان اجرای چرخشی آن‌ها را فراهم می‌کند.
پارامتر:
OS_CONFIG_TIME_SLICE_TICKS
تعداد Tickهای مربوط به Time Slice را مشخص می‌کند. با قرار دادن مقدار آن روی 0، Round-Robin غیرفعال شده و سربار Context Switching کاهش پیدا می‌کند.

🛡 ۴. چرا PendSV و نه SVC؟
در بسیاری از RTOSها از SVC برای ورود به Kernel یا شروع اولین Task استفاده می‌شود.
اما AhuraRTOS رویکرد متفاوتی دارد:
SVC → Application
PendSV → Context Switching
در این طراحی، SVC برای Application آزاد باقی می‌ماند و RTOS برای Context Switch از PendSV استفاده می‌کند.
حتی شروع اولین Task نیز از مسیر PendSV انجام می‌شود. Kernel با بررسی وضعیت PSP می‌تواند تشخیص دهد که آیا هنوز Taskای اجرا نشده است یا خیر.
⚡️ Context Switch در سطح پایین
در PendSV، وضعیت Context مربوط به Task فعلی ذخیره و Context مربوط به Task بعدی بازیابی می‌شود.
رجیسترهای:
R4 – R11
در این فرآیند مدیریت می‌شوند.
همچنین مدیریت FPU به‌صورت هوشمند انجام می‌شود تا در Taskهایی که از محاسبات Floating-Point استفاده نمی‌کنند، هزینه اضافی Context Switching ایجاد نشود.
🎯 در نهایت، این طراحی سه هدف مهم را دنبال می‌کند:
O(1) Scheduling
Context Switching بهینه
آزاد ماندن SVC برای Application
🔜 ادامه دارد...

@Amin_Techlab
🔥4❤1👍1
August 8, 2026 410 3