我想知道调度器是如何被调用以便可以切换任务的。即使是抢占式调度或循环调度,调度器也应该介入进行任何类型的任务切换。假设一个低优先级任务有一个无限循环 - 当调度器介入并切换到高优先级任务时会发生什么?
问题是: 1. 谁调用调度器? [在VxWorks中] 2. 如果它定期被调用 - 那么这种机制是如何实现的?
谢谢。
--Ashwin
我想知道调度器是如何被调用以便可以切换任务的。即使是抢占式调度或循环调度,调度器也应该介入进行任何类型的任务切换。假设一个低优先级任务有一个无限循环 - 当调度器介入并切换到高优先级任务时会发生什么?
问题是: 1. 谁调用调度器? [在VxWorks中] 2. 如果它定期被调用 - 那么这种机制是如何实现的?
谢谢。
--Ashwin
简单的回答是,vxWorks通过系统计时器不断地以固定时间间隔产生硬件中断来控制系统。
以下是更详细的说明:
当vxWorks启动时,它会配置你的硬件生成一个定时器interrupt,每n毫秒触发一次中断,其中n通常为10,但完全取决于你的硬件。定时器间隔通常在vxWorks启动时由你的Board Support Package (BSP)设置。
每次计时器触发中断时,系统开始执行计时器interrupt handler。计时器中断处理程序是vxWorks的一部分,因此现在vxWorks控制着系统。它做的第一件事是将CPU状态(例如寄存器)保存到当前运行任务的Task Control Block (TCB)中。
然后最终vxWorks运行调度器以确定下一个运行的任务。为了运行一个任务,vxWorks将任务的状态从其TCB复制到机器寄存器中,完成后该任务控制CPU。除非您有一个主要定制的目标构建,否则调度程序将由计时器中断调用。但是,详细信息因平台而异。