اطلاعیه

Collapse
No announcement yet.

Multi tasking...

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    Multi tasking...

    امروزه با گسترده تر شدن کاربرد میکرو کنترلر ها وسنگین تر شدن محاسبات نیاز به پردازش های موازی بیشتر و بیشتر میشه.سیستم عامل ها قابلیت های مختلفی رو برای کاربر ایجاد میکنند که یکی از پر کاربرد ترین اون ها چند پردازشی بودن اوناست.درک این موضوع که پردازنده ما در لحظه قادر به انجام یک دستور است ولی سیستم عامل ها چند پردازش رو هم زمان انجام میدن در نگاه اول سخت به نظر میاد.یه توضیح مختصری در باره این موضوع برای دوستانی که اطلاعاتشون در این مورد کم هست میدم:
    در مالتی تسکینگ در اصل ما چند کار رو با هم انجام نمیدیم . در هر لحظه بخشی از هر کار رو انجام میدیم که اگه در کل نگاه کنیم به نظر میرسه همه ی کار ها با هم انجام شده.از نظر اینکه هسته ی سیستم عامل زمان پردازنده رو چطور بین تسک های مختلف تقسیم کنه و چطور با اولویت ها برخورد کنه,سیستم عامل ها عملکرد مختلفی پیدا میکنند و هر کدوم برای یه جا مناسبه. ساده ترین حالت اینه که زمان رو بین همه ی تسک ها تقسیم کنیم و اگه اولویت تسکی بالا تر بود زمان بیشتری به اون بدیم. به این عکس نگاه کنید. ما 2 تسک تعریف کردیم که در هر کدوم وضعیت دو پایه مختلف رو تغییر میدیم.همین طور که تو شکل مشخصه هسته سیستم زمان انجام رو به طور مساوی بین این دو تسک تقسیم کرده.

    حالا اگه بیایم اولویت ها رو تغییر بدیم.میبینیم که زمان داده شده به هر تسک(تسک های ما تغییر وضعیت 2پین بود) تغییر میکنه و تسک با اولویت بالا تر زمان بیشتری میگیره.2 عکس زیر از یه برنامه گرفته شده تنها فرق بین اون ها تغییر اولویت هست که تو عکس معلومه:


    تسک ما تغییر وضعیت یه پین میکرو بود. پس در هر لحظه وضعیت اون میتونه بالا یا پایین باشه(صفر و یک). همین طور که تو عکس زیر میبینید در زمان تعویض تسک این پین میتونه هر وضعیتی داشته باشه چون تعویض تسک کاری به برنامه در حال اجرا نداره و دستور تعویض تسک رو از وقفه ی تایمر میگیره!


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

    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

    #2
    پاسخ : Multi tasking...

    مدت ها بود میخواستم کتابخونه ای بنویسم که اینطوری چندتا کار رو با هم بکنه. ایده من این بود که بیام و تو اینتراپت تایمر تمام رجیسترها رو بریزیم تو stack و ... ولی فکر میکردم تو avr نشه اجراش کرد و ram زیادی بخواد.
    خیلی حال کردم این
    بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
    اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

    دیدگاه


      #3
      پاسخ : Multi tasking...

      قابلی نداشت.
      تمام ریجستر ها رو نیاز نیست که کپی بشن فقط رجیستر های working که میشه R0 تا R31.
      اینکه حجم رم کافی هست یا نه بستگی به تعداد تسک و اندازه استک هر تسک داره.یه کار بهتر اینه که هر تسک اندازه استک مختلفی داشته باشه تا بشه اندازه ها رو بهینه کرد....
      اول این برنامه رو تو کد ویژن نوشتم. خیلی جالب بود برنامه بدون ارور کامپایل میشد اما وقتی build رو میزدم که فایل هگز رو بده ارور میداد!!!! خدا رو شکر avr studio مشکل باهاش نداشت.
      [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

      دیدگاه


        #4
        پاسخ : Multi tasking...

        این Status Register رو چیکار کرده؟ مشکل پیش میادا
        بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
        اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

        دیدگاه


          #5
          پاسخ : Multi tasking...

          این از دیتاشیت avr درآوردم :


          کد:
          The Status Register is not automatically stored when entering an interrupt routine and
          restored when returning from an interrupt. This must be handled by software.


          فکر کنم باید تو اون push و pop ها SREG رو هم اضافه کنیم.
          بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
          اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

          دیدگاه


            #6
            پاسخ : Multi tasking...

            الان دیدم توش هست :mrgreen:


            کد:
            current->sreg = SREG;

            بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
            اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

            دیدگاه


              #7
              پاسخ : Multi tasking...

              حق با شماست این 2 تا رجیستر هم هستند:
              SREG و SP
              بدون اولی آخرین عمل انجام شده موقع تعویض تسک (تبدیل شده برنامه به اسمبلی) ممکنه از دست بره و دومی هم که نباشه تسک نمیتونه بعد از تعویض اجرا شدنش رو ادامه بده(استک رو گم میکنه).
              نکته خوبی رو یاد آوری کردید.
              [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

              دیدگاه


                #8
                پاسخ : Multi tasking...

                فایل خراب شده :mrgreen:

                دیدگاه


                  #9
                  پاسخ : Multi tasking...

                  خراب نشده .چیزترش کردن.چیز همون فیل هست ها :mrgreen:
                  http://wdl.persiangig.com/pages/down...20ON%20AVR.rar
                  تو اون فایل قدیمی عکسهایی که بالا میبینید هم بود ولی دیگه تو این نداشتم که بزارم.
                  [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                  دیدگاه


                    #10
                    پاسخ : Multi tasking...

                    این مرورگره صحفه چیز رو نشون نمی ده :icon_razz:
                    حالا برنامه رو یه توضیح بده من سی بلد نیستم :nerd:

                    دیدگاه


                      #11
                      پاسخ : Multi tasking...

                      enjoy
                      full source
                      http://s2.picofile.com/file/72617771...N_AVR.rar.html
                      بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
                      اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

                      دیدگاه


                        #12
                        پاسخ : Multi tasking...

                        نوشته اصلی توسط erfan m
                        حالا برنامه رو یه توضیح بده من سی بلد نیستم :nerd:
                        تو این برنامه از وقفه ی یکی از تایمر ها برای ایجاد پالس برای تعویض تسک استفاده شده.با هر وقفه ای که اتفاق میوفته استک تسک فعلی به همراه ریجستر وضعیت و رجستر های working و اشاره گر استک به یه قسمتی از رم منتقل میشه و همین پارامتر ها برای تسک جدید از قسمت دیگه ای از رم خونده میشه و مقدار دهی میشه.وقتی پردازنده از روتین وقفه برگرده پارامتر های تسک جدید رو داره و از اون جا به بعد رو ادامه میده.این اتفاق با هر وقفه تکرار میشه. اگر رجیستر های پردازنده رو بشناسید برنامه رو راحت میتونی آنالیز کنید.
                        [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                        دیدگاه


                          #13
                          پاسخ : Multi tasking...

                          هیچی نفهمیدم :mrgreen:

                          تسک چیه ؟
                          استک تسک چیه ؟
                          رجستر های working چیه ؟
                          پارامتر ها چیه ؟
                          روتین چیه ؟
                          بقیش رو هم نفهمیدم

                          دیدگاه


                            #14
                            پاسخ : Multi tasking...

                            نوشته اصلی توسط erfan m
                            هیچی نفهمیدم :mrgreen:

                            تسک چیه ؟
                            استک تسک چیه ؟
                            رجستر های working چیه ؟
                            پارامتر ها چیه ؟
                            روتین چیه ؟
                            بقیش رو هم نفهمیدم
                            ببین اخوی
                            تو پردازش چند برنامه باهم توسط یک CPU مفاهیم تعریف شده ای وجود داره :
                            Task : یعنی کار. ولی اینجا به هر کدوم از برنامه های در حال اجرا گفته میشه. مثلا این مثال دو تا task داره.
                            Thread و ...

                            بقیه چیزهایی که پرسیدی اصلا ربطی به بحث نداره و یه چیزای عمومیه
                            stack :
                            قسمتی از ram هست که موقع صدا کردن توابع کاربرد داره و توضیحش لفظی نمیشه باید با مثال و شکل باشه تا بفهمی

                            رجیسترهای working:
                            همون رجیسترهای دم دستی CPU هستند که CPU عملیاتی مثل ضرب و تقسیم و ... رو فقط میتونه روی اونها پیاده کنه و کلا چیزای خاصی هستن. حالا وقتی میخوای یه برنامه یا task درحال اجرا رو stop کنی و یه task دیگه رو run کنی (این دو تا کلمه رو که میدونی ایشالا) باید توجه داشته باشی این رجیسترها باید برای task ی که stop شده یه جا ذخیره بشن و برای task ی که run میشه هم از یه جا که قبلا ذخیره شده بازیابی بشن. در واقع بای ذخیره این رجیسترها مثل اینکه بازی رو save میکنی میتونی یه برنامه رو save کنی و برنامه دیگه رو load کتی و یکم اجرا کنی بعدا برگردی برنامه اول رو از همون جا ادامه بدی.
                            بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
                            اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

                            دیدگاه


                              #15
                              پاسخ : Multi tasking...

                              کل برنامه رو فهمیدم چی به چیه
                              مگه خودش اتوماتیک ریجستر های working ذخیره نمی کنه ؟ باید خودت ادرس بدی ؟

                              دیدگاه

                              لطفا صبر کنید...
                              X