سیستم عامل بلادرنگ RTOS بخش سوم ( binary semaphore)

RTOS  مخفف سیستم عامل زمان واقعی (سیستم عامل بلادرنگ) است. همان طور که از نام آن پیداست ، کار یک سیستم عامل را انجام می دهد ، و قادر به انجام کارها به صورت همزمان است. هدف اصلی یک سیستم عامل این است که عملکردی داشته باشیم ، که  بتوان همزمان از چندین کار استفاده کرد.


در این آموزش قصد داریم از سمافور باینری(binary semaphore) در STM32 استفاده کنیم.

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

سمافور یا پرچم زنی اساساً برای همگام سازی تسک ها با سایر وقایع موجود در یک سیستم استفاده می شوند. در FreeRTOS ، سمافورها بر اساس مکانیسم صف انجام می شوند. در FreeRTOS  ۴ نوع سمفور وجود دارد:

 

  • سمافور (پرچم زنی) دودویی
  • سمافور شمارشی ( Counting semaphores)
  • ممانعت دو جانبه یا دو طرفه (Mutex)
  • بازگشتی (Recursive)

 

چگونگی عملکرد

کارکرد با Binary Semaphore بسیار ساده است. یک سمافور دودویی به نام دودویی خوانده می شود زیرا یا در آنجاست (۱) یا اینگونه نیست (۰). شرط سوم در آن وجود ندارد. بنابراین ، یک تسک یا سمافور را دارد یا اینطور نیست. برای یک تسک ، ما می توانیم شرایطی را ایجاد کنیم که باید آن را به صورت همزمان داشته باشد تا خودش را اجرا کند. بنابراین ، اگر تسک دارای پرچم نباشد ، چاره ای دیگر ندارد جز اینکه منتظر بمانید تا توسط Task که در حال حاضر دارای سمافور (پرچم زنی) است ، منتشر شود.

بیایید بگوییم یک تسک با اولویت کم در بخش مهم وجود دارد. یک تسک با اولویت بالا می تواند LPT را در هر نقطه از زمان مقدم کند. اما اگر LPT دارای سمافور باشد ، و تا زمانی که از بخش مهم خارج نشود ، آن را منتشر نمی کند ، HPT  گزینه دیگری جز صبر کردن برای سمافور نخواهد داشت ، و نمی تواند  Task با اولئیت کم را پیشگویی کند.

به زبان ساده سمافور یا پرچم زنی به منظور هماهنگ کردن فعالیت ها استفاده می شود. به عنوان مثال گرفتن یک پرچم توسط یک فعالیت است. فعالیت متوقف است تا زمانی که پرچم زده شود و یا مدت زمان انتظار به سر برسد.

 

نتیجه

  • در ابتدا ، زمان بندی (Scheduler) 3 تسک برای اجرا دارد. بنابراین ابتدا تسک با اولویت بالاتر را اجرا می کند.
  • تسک بالا semaphore را به دست می آورد ، خود را اجرا می کند و semaphore را منتشر می کند.
  • در مرحله بعد ، تسک با اولویت متوسط اجرا خواهد شد و به حالت تعلیق ۵۰۰ میلی ثانیه می روید
  • اکنون زمان آن رسیده که تسک با اولویت پایین اجرا شود. این سمافور را به دست می آورد و منتظر فشار دادن دکمه است.
  • تسک بالا از حالت تعلیق خارج می شود و تسک پایین را حق تقدم پیدا می کند. این تلاش خواهد کرد تا semaphore را به دست آورد ، که در جریان LOW Task قرار خواهد گرفت. که چاره ای جز صبر کردن برای semaphore نیست.
  • MEDIUM Task از حالت تعلیق خارج می شود و پیشگویی LOW Task را انجام می دهد. برای اجرا به هیچ سمافوری احتیاج ندارد ، بنابراین هر ۵۰۰ میلی ثانیه اجرا خواهد شد.

و…


جهت دانلود ویدئو آموزشی به لینک زیر مراجعه کنید:

Free RTOS -Binary Semaphore