任务调度器和任务切换
调度器schedule并不仅仅由时钟中断函数来处理,他还有被其他函数调用的情况例如thread_block。
在schedule中要判断当前线程是出于什么原因才被换下处理器的。其实就是查看线程的状态,如果线程的状态为TASK_RUNNING,这说明时间片到期了,将其ticks重新赋值为他的优先级PRIORITY,将其状态由TASK_RUNNING。并将其加入到就绪队列的末端。如果状态为其他,就不需要其他的操作了。
调度器按照队列先进先出的顺序,把就绪队列中的第一个节点作为下一个要运行的新线程。将该线程的状态置为TASK_RUNNING,之后通过函数switch_to将新线程的寄存器环境恢复,这样新线程便开始执行。
因此,完整的线程调度需要三步的过程:
- 时钟中断处理函数
- 调度器schedule
- 任务切换函数 switch_to
网友评论