Re: [問題] 有關real-time OS的問題

看板Programming作者 (ggg)時間18年前 (2007/02/17 12:15), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《ms6163 ()》之銘言: : 最近正在寫一個RTOS.. 有關task time-out的部分 有些不太了解.. : 當一個task的execution time expired的時候.. : 是由誰來負責檢查的?? : case 1. : void task() : { : ........... : if(time_out) : call_software_intr_for_context_switch(); : // 這裡可以用trap來寫 : ........... : } : case 2. : _timer_handler: : save_regs_to_stack_point; : save_sp_to_current_TCP; : jump_to_timer_intr_jandler; 假設某個 process/task 被 timer 中斷, CPU 因此跑去執行 timer_intr_handler , 若又執行 sched() 那麼, 底下這個 restore , ret 如何被執行 ? 再假設 timer 下次再中斷的時間很短, 此時這個 _timer_handler 可能正確的反應時間去啟動 對應的 process/task 嗎 ? : restore_regs_to_stack_point; : ret_to_the_task_be_interrupted; : void timer_intr_handler() : { : save_taskx_context(); : if(taskx_time_out){ : sched(); : } : } : 我自己是在timer handler裡面作task的檢查並且決定要不要作preempted的動作 : 但是看了很多的RTOS,他們好像都是由task來負責檢查的動作(case 1),請問一下 : 這兩個間的作法有什麼好壞的不同? Case1 的寫法是經由 time-out event-flag 被通知, 自行放棄 CPU 已取得的掌控權. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.6.234
文章代碼(AID): #15re5TmR (Programming)
討論串 (同標題文章)
文章代碼(AID): #15re5TmR (Programming)