![](https://csdnimg.cn/release/download_crawler_static/85828055/bg1.jpg)
基于 μC/0S—II 的时问片调度法设计
时间:2009-09-14 11:06:34 来源:单片机与嵌入式系统 作者:上海奥控汽车电子有限公司 吴嵩 曹乐
千
引 言
μC/0S—II 嵌入式实时操作系统采用的是基于优先级的可剥夺调度法。基于优先级的
可剥夺调度法是指,CPU 总是让处于就绪态的、优先级最高的任务运行;最高优先级的任
务一旦就绪,总能得到 CPU 的使用权,当一个运行着的任务使一个比它优先级高的任务
进入了就绪态时,当前任务的 CPU 使用权就被剥夺了,更高优先级的任务立刻得到了
CPU 的使用权。除非最高优先级的任务主动放弃 CPU 的使用权(通过调用
0STimeDly()、0SSem—Pend()等函数),否则低优先级的任务是没机会获得 CPU 使用
权的。对于一个实际应用系统中耗时比较长的任务,为了让其他任务能够得到实时调度,
可以用两种方法来处理。第一种方法是把该任务的优先级设为最低(当然还是比空闲任务要
高);第二种方法就是让该耗时任务运行一段时间后延时一下再继续运行,即把整个任务划
分为若干步骤来执行,如以下的示例代码:
很多情况下,耗时长的任务并不能设置为最低优先级任务,而划分步骤来执行的
方法不但繁琐而且每一步执行的时间也是不确定的(其他低优先级任务获得 CPU 使用权的
时间也会是不确定的)。笔者在用 μC/OS—II 开发一款车载信息娱乐系统的时候就碰到了
这样的问题,因此设计了一种优先级和时间片相结合的调度法(也就是基于 μC/0S—II 的
时间片调度法)。
1 调度原理
这种调度法给处于就绪态的每一个任务都分配一个时间片(优先级越高分配的时间片越
长,空闲任务得不到时间片的分配),内核按照任务的优先级依次调度处于就绪态的任务,
即当就绪态中最高优先级的任务用完自己的时间片后,CPU 控制权转让给就绪态中优先级
第二高的任务。该任务用完自己的时间片后,CPU 控制权又转让给下一优先级的就绪态任
务……当就绪态的每一个任务都被调度一次之后将重新为它们分配时间片,然后又开始新
一轮的调度……
其中要注意的是,在调度过程中如果有一个比当前任务优先级更高的任务由其他态变成
了就绪态(被创建或获取了一个信号量等),当前任务的 CPU 控制权将被剥夺;空闲任务仍
然是等到其他任务都退出就绪态才获得 CPU 的使用权。
图 1 解释了该调度法的调度过程(其中任务 1 优先级最高,任务 2 次之,任务 3 最低)。
评论0