时间片调度概述
时间片调度是 FreeRTOS 调度策略之一,在多个任务共享 CPU 时间时,时间片调度可以有效地管理每个任务的执行时间,从而实现任务之间的公平性。
时间片调度机制
时间片调度是一个简单且常见的调度策略,其基本思想是将 CPU 时间划分为固定长度的时间片,每个任务在一个时间片内运行。当一个任务的时间片用完时,调度器会自动将其切换出去,给下一个就绪任务分配 CPU 时间。
时间片调度的运行过程:
三个任务的优先级是一样的,给每个任务都分配一个时间片,当第一个任务的时间片耗尽就切换到第二个任务,同样执行一个时间片的时间,当第二个任务的时间片耗尽就切换到第三个任务运行,第三个任务存在阻塞的情况,此时不管时间片有没有耗尽都直接切换到下一个任务,即第一个任务。
注意:
- 恢复执行位置:当任务的时间片耗尽,任务切换时,FreeRTOS 会保存任务的上下文信息,任务下次被调度时会从 上次执行的位置继续。任务不会从头开始执行。
- 时间片耗尽:当一个任务运行完成它的时间片后,调度器会检查其他同优先级的任务是否就绪。如果有其他任务就绪,调度器将进行任务切换。
- 出现阻塞:当有任务出现阻塞时,会直接切换到下一个任务去运行,不管此时的时间片是否用完,这个出现阻塞的任务下次运行还是按照一个时间片运行。
时间片调度运行条件
- 有多个就绪任务:时间片调度只在有多个任务处于就绪状态时起作用。
- 任务处于就绪状态:只有就绪的任务才会被调度执行,阻塞任务不参与调度。
- 存在明确的时间片大小:每个任务的执行是按固定的时间片大小分配的,时间片到期后会进行任务切换。
- 任务在时间片内没有完成时:如果任务在其时间片内没有完成,它会被挂起,调度器会选择下一个任务。
- 启用抢占式调度:时间片调度通常依赖于抢占式调度,任务在时间片结束或高优先级任务出现时会被中断。