我们上一篇文章介绍了一种理论上最优,但实际受到硬件限制无法实现的任务调度算法。本文就来介绍一下本次所采用的能够实现的调度算法。
这种方法是把任务与CPU绑定,某个任务只能在某一个CPU上运行。
这种方法涉及到另一个参数:
OSPrioTbl:就绪任务优先级表
这个参数中存储着当前CPU的所有就绪任务的优先级,每个CPU必须单独占用一个表,所以我们需要把它也扩展成数组。
当发生任务调度的时候,从每个CPU各自的 OSPrioTbl 中选取优先级最高的任务,进行切换。每个CPU都至少要有一个优先级最低的空闲任务。
这种算法并不能保证整个系统中优先级最高的两个任务总能得到执行,如果优先级最高的两个任务在同一个CPU上,也只能执行优先级最高的一个任务,另一个CPU执行优先级更低的任务。但它使得同一个任务只会在同一个CPU上运行,不会产生跨CPU任务调度的资源消耗,且任务调度算法很简单,大大减少任务调度的时间和资源消耗。
代码如下,我们对比上面的代码就可以看到这种算法实现起来简单很多。
/**************************************************************/
void