基于μC/OS-II的时间片调度法设计
[11-20 15:54:45] 来源:http://www.88dzw.com arm嵌入式 阅读:8443次
文章摘要:引言 μC/OS-II嵌入式实时操作系统采用的是基于优先级的可剥夺调度法[1]。基于优先级的可剥夺调度法是指,CPU总是让处于就绪态的、优先级最高的任务运行;最高优先级的任务一旦就绪,总能得到CPU的使用权,当一个运行着的任务使一个比它优先级高的任务进入了就绪态时,当前任务的CPU使用权就被剥夺了,更高优先级的任务立刻得到了CPU的使用权。除非最高优先级的任务主动放弃CPU的使用权(通过调用OSTimeDly()、OSSemPend()等函数),否则低优先级的任务是没机会获得CPU使用权的。对于一个实际应用系统中耗时比较长的任务,为了让其他任务能够得到实时调度,可以用两种方法来处理。第一种方法
基于μC/OS-II的时间片调度法设计,标签:arm嵌入式系统,arm系统,http://www.88dzw.com引言
μC/OS-II嵌入式实时操作系统采用的是基于优先级的可剥夺调度法[1]。基于优先级的可剥夺调度法是指,CPU总是让处于就绪态的、优先级最高的任务运行;最高优先级的任务一旦就绪,总能得到CPU的使用权,当一个运行着的任务使一个比它优先级高的任务进入了就绪态时,当前任务的CPU使用权就被剥夺了,更高优先级的任务立刻得到了CPU的使用权。除非最高优先级的任务主动放弃CPU的使用权(通过调用OSTimeDly()、OSSemPend()等函数),否则低优先级的任务是没机会获得CPU使用权的。对于一个实际应用系统中耗时比较长的任务,为了让其他任务能够得到实时调度,可以用两种方法来处理。第一种方法是把该任务的优先级设为最低(当然还是比空闲任务要高);第二种方法就是让该耗时任务运行一段时间后延时一下再继续运行,即把整个任务划分为若干步骤来执行,如以下的示例代码:
很多情况下,耗时长的任务并不能设置为最低优先级任务,而划分步骤来执行的方法不但繁琐而且每一步执行的时间也是不确定的(其他低优先级任务获得CPU使用权的时间也会是不确定的)。笔者在用μC/OSII开发一款车载信息娱乐系统的时候就碰到了这样的问题,因此设计了一种优先级和时间片相结合的调度法(也就是基于μC/OSII的时间片调度法)。
1 调度原理
这种调度法给处于就绪态的每一个任务都分配一个时间片(优先级越高分配的时间片越长,空闲任务得不到时间片的分配),内核按照任务的优先级依次调度处于就绪态的任务,即当就绪态中最高优先级的任务用完自己的时间片后,CPU控制权转让给就绪态中优先级第二高的任务。该任务用完自己的时间片后,CPU控制权又转让给下一优先级的就绪态任务……当就绪态的每一个任务都被调度一次之后将重新为它们分配时间片,然后又开始新一轮的调度……[2]
其中要注意的是,在调度过程中如果有一个比当前任务优先级更高的任务由其他态变成了就绪态(被创建或获取了一个信号量等),当前任务的CPU控制权将被剥夺;空闲任务仍然是等到其他任务都退出就绪态才获得CPU的使用权。
图1解释了该调度法的调度过程(其中任务1优先级最高,任务2次之,任务3最低)。
图1 基于μC/OSII时间片调度过程
① 任务2和任务3都处于就绪态,任务1在等待一个信号量,优先级中的任务2获得CPU使用权。
② 任务2的时间片用完,优先级低的任务3获得CPU使用权。
③ 任务3的时间片用完,任务2重新获得CPU的使用权。
④ 任务2的时间片还没用完时中断来临,中断服务程序获得CPU使用权。
⑤ 中断服务程序发送了一个任务1等待的信号量,中断服务完成后优先级高的任务1获得CPU使用权。
⑥ 任务1的时间片用完,任务2继续运行。
⑦ 任务2的时间片用完,任务3获得CPU使用权。
⑧ 任务3的时间片用完,重新分配时间片,新一轮调度开始。
2 实现方法
在调度算法的实现过程中,力求做到3点:
① 尽可能少地改动μC/OSII原有的代码;
② 增加的代码在风格上保持与原有的相一致;
③ 兼容原有的优先级调度法(可以很方便地选择优先级调度法或是时间片调度法)。
注:对于该小节中出现的代码,如果是笔者增加的部分都用黑体表示。
2.1 数据结构中增加的变量
在进程控制块中增加两项:
Typedef struct os_tcb{
《基于μC/OS-II的时间片调度法设计》相关文章
- › 基于CXA3355ER的GPS接收机下变频器电路
- › 基于CXA1951AQ的GPS接收机下变频器电路
- › 基于CAN总线的电池管理系统结构框图
- › 基于CY7C68013A的USB控制系统设计研究
- › 基于CPCI总线的多网口卡设计
- › 基于CAN总线的分布式位置伺服系统设计
- 在百度中搜索相关文章:基于μC/OS-II的时间片调度法设计
- 在谷歌中搜索相关文章:基于μC/OS-II的时间片调度法设计
- 在soso中搜索相关文章:基于μC/OS-II的时间片调度法设计
- 在搜狗中搜索相关文章:基于μC/OS-II的时间片调度法设计