امروزه با گسترده تر شدن کاربرد میکرو کنترلر ها وسنگین تر شدن محاسبات نیاز به پردازش های موازی بیشتر و بیشتر میشه.سیستم عامل ها قابلیت های مختلفی رو برای کاربر ایجاد میکنند که یکی از پر کاربرد ترین اون ها چند پردازشی بودن اوناست.درک این موضوع که پردازنده ما در لحظه قادر به انجام یک دستور است ولی سیستم عامل ها چند پردازش رو هم زمان انجام میدن در نگاه اول سخت به نظر میاد.یه توضیح مختصری در باره این موضوع برای دوستانی که اطلاعاتشون در این مورد کم هست میدم:
در مالتی تسکینگ در اصل ما چند کار رو با هم انجام نمیدیم . در هر لحظه بخشی از هر کار رو انجام میدیم که اگه در کل نگاه کنیم به نظر میرسه همه ی کار ها با هم انجام شده.از نظر اینکه هسته ی سیستم عامل زمان پردازنده رو چطور بین تسک های مختلف تقسیم کنه و چطور با اولویت ها برخورد کنه,سیستم عامل ها عملکرد مختلفی پیدا میکنند و هر کدوم برای یه جا مناسبه. ساده ترین حالت اینه که زمان رو بین همه ی تسک ها تقسیم کنیم و اگه اولویت تسکی بالا تر بود زمان بیشتری به اون بدیم. به این عکس نگاه کنید. ما 2 تسک تعریف کردیم که در هر کدوم وضعیت دو پایه مختلف رو تغییر میدیم.همین طور که تو شکل مشخصه هسته سیستم زمان انجام رو به طور مساوی بین این دو تسک تقسیم کرده.
حالا اگه بیایم اولویت ها رو تغییر بدیم.میبینیم که زمان داده شده به هر تسک(تسک های ما تغییر وضعیت 2پین بود) تغییر میکنه و تسک با اولویت بالا تر زمان بیشتری میگیره.2 عکس زیر از یه برنامه گرفته شده تنها فرق بین اون ها تغییر اولویت هست که تو عکس معلومه:
تسک ما تغییر وضعیت یه پین میکرو بود. پس در هر لحظه وضعیت اون میتونه بالا یا پایین باشه(صفر و یک). همین طور که تو عکس زیر میبینید در زمان تعویض تسک این پین میتونه هر وضعیتی داشته باشه چون تعویض تسک کاری به برنامه در حال اجرا نداره و دستور تعویض تسک رو از وقفه ی تایمر میگیره!
تو برنامه ای که در پایین گزاشتم دقیقا کار های بالا صورت میگیره.
تو کتابخونه ی برنامه از تایمر صفر برای ایجاد وقفه تعویض تسک استفاده شده. این کتابخونه بیشتر جنبه آموزشی داره و اگر برای پروژه ای دنبال هسته ی سیستم عامل میگردید از هسته هایی مثل FREE RTOS و RTX (keil) و... استفاده کنید.چون یه سیستم عامل کامل نیاز به یه سری امکانات دیگه هم داره که تو اینجا نیومده و از طرفی نوشتن اون ها هم زیاد عقلانی نیست چون زمان و انرژی زیادی نیاز داره!
توضیح کامل در مورد سیستم عامل ها رو در کتاب real time operation system بخونید.این کتاب رو قبلا تو همن سایت گزاشته بودند. دوستان مطالب زیادی در مورد آموزش سیستم عامل ها قرار دادند و توضیحات جامعی هم گزاشتند که من دیگه به دلیل تکراری بودن اون ها رو نیاوردم. پیشنهاد میکنم اون تاپیک ها رو حتما بخونید تا دید بهتری نسبت به سیستم عامل ها داشته باشید..... http://www.4shared.com/rar/ws9aYx0S/MULTITASKING_ON_AVR_3.html
سلام مهندس من کل نت رو گشتم نتونستم جوابم رو بگیرم اگر کمکم کنید خیلی ممنون میشم
به مثال من توجه کنید سوالم رو به شکل مثال بیان میکنم
تایمر 0 سر ریز میکنه و برنامه رو به تسک 1 میفرستیم تایمر دوباره سرریز میکنه و ( برنامه ما تو تسک 1 تا آخر اجرا نشده سی پی یو میاد به تابع وقفه و به تسک 2 ما میره
وضعیت تسک 1 ما به چه صورت ذخیره میشه که مثلا تا دستور x رفته بودیم یا مثلا تو حلقه وایل فلا بودیم ؟
با تشکر فراوان واقعا اگر من رو راهنمایی کنید یک دنیا ممنون میشم خیلی ذهنم رو درگیر کرده
سلام مهندس من کل نت رو گشتم نتونستم جوابم رو بگیرم اگر کمکم کنید خیلی ممنون میشم
به مثال من توجه کنید سوالم رو به شکل مثال بیان میکنم
تایمر 0 سر ریز میکنه و برنامه رو به تسک 1 میفرستیم تایمر دوباره سرریز میکنه و ( برنامه ما تو تسک 1 تا آخر اجرا نشده سی پی یو میاد به تابع وقفه و به تسک 2 ما میره
وضعیت تسک 1 ما به چه صورت ذخیره میشه که مثلا تا دستور x رفته بودیم یا مثلا تو حلقه وایل فلا بودیم ؟
با تشکر فراوان واقعا اگر من رو راهنمایی کنید یک دنیا ممنون میشم خیلی ذهنم رو درگیر کرده
همه ی محتوای برنامه همونطور دست نخورده میمونه تا زمانی که برنامه به انتهای scope برسه و متغیر ها رو آزاد کنه.
فقط میمونه محتوای رجیستر ها که هر جا انشعابی ایجاد بشه، پیش از اینکه برنامه به دنباله جدید تحویل داده بشه محتوای رجیسترها رو ذخیره میکنه و در زمان بازگشت دنباله برنامه دوباره اونها رو بارگزاری میکنه. (content switching)
دیدگاه