Re: [問題] 有關real-time OS的問題
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章