作者ggg12345 (ggg)
站内Programming
标题Re: [问题] 有关real-time OS的问题
时间Sat Feb 17 12:15:24 2007
※ 引述《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