小型嵌入式实时操作系统核心之--“调度器”

1.调度器介绍
简单的说,调度器就是使用相关的调度算法来决定当前需要实行的任务。所有的调度器有一个共同的特性:调度器可以区分就绪态任务和挂起任务(由于延迟,信号量等待,邮箱等待,事件组等待等原因使得任务被挂起)。调度器可以选择就绪态中的一个任务,然后激活它(通过执行这个任务)。当前正在执行的任务是运行态的任务。不同调度器之间最大的区别就是如何分配就绪态任务间的完成时间。
嵌入式实时操作系统的核心就是调度器和任务切换,调度器的核心就是调度算法。任务切换的实现在各个RTOS中区别不大,基本相同的架构,任务切换也是相似的。调度算法就有些区别了,比如uCOS-III和FreeRTOS在抢占式调度器算法上就是两种不同的调度方法,下面主要了解一下合作式调度器,抢占式调度器和时间片调度器。

2.1 合作式调度器
简单的来说,合作式调度器就是根据用户的设置时刻(周期或者单次)来执行相应的任务,每个时刻是有一个任务可以执行,这些任务间不支持被抢占,直到任务自愿放弃CPU的控制权。当任务需要执行的时候,被添加到等待队列,当CPU空闲的时候,运行等待队列中的下一个(如果有的话),任务运行直到完成,然后由调度器控制。

2.2抢占式调度器
在实际的应用中,不同的任务需要不同的响应时间。例如,我们在一个应用中需要使用电机,键盘和LCD显示,电机比键盘和LCD需要更快速的响应,如果我们使用合作式调度器和时间片调度器,那么电机将无法得到及时的响应,这时抢占式调度器是必须的。
如果使用了抢占式调度,最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级更高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说任务被挂起了,比它高优先级的任务立刻得到CPU的控制权。如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的哪个任务开始运行。
总的来说,学习抢占式调度掌握最关键的一点就是:抢占式调度器会为每一个任务都分配一个优先级,调度器会激活就绪任务中优先级最高的任务。
抢占式调度器给任务带来快速响应的同时也使得任务间的同步和通信机制显得很麻烦,因此在源码中的很多地方我们都需要设置临界段(通过开关中断来实现)。

2.3时间片调度器
在小型的嵌入式RTOS中,最常用的时间片调度算法就是Round-robin调度算法。这种调度算法可以用于抢占式或者合作式的多任务中,时间片调度适合用于不要求任务实时响应的情况下。
实现Round-robin调度算法需要给同优先级的任务分配一个专门的列表,用于记录当前就绪的任务,并为每个任务分配一个时间片(也就是需要运行的时间长度,时间片用完了就进行任务切换)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值