调度方式
Zephyr中存在协作式和抢占式两种线程类型,不同类型的线程面对相同的触发条件有不同的反应.
抢占式线程
当抢占式线程占用CPU时,其它高优先级线程就绪后可以立即抢占CPU:
上图的(1)中ISR给高优先级线程T2等待资源,T2进入就绪状态,可以立即抢占T1。协作式线程的优先级高于抢占式线程,因此协作式线程和高优先级抢占式线程就绪时都可以抢占低优先级抢占式线程。
抢占式线程时间片
相同优先级的抢占式线程之间以时间片为单位轮流使用CPU:
在Zephyr中通过配置CONFIG_TIMESLICE_SIZE
指定每个时间片占用的Tick数。为了仅允许应用程序在处理时间敏感性较低的较低优先级线程时使用抢占式时间切片,在Zephyr中通过配置CONFIG_TIMESLICE_PRIORITY
指定低于该优先级的线程才使用时间片。当一个线程执行的时间片用完后,这个将从就绪线列队中移除然后再加入到就绪列队中,这样保证其它相同优先级的线程走到就绪列队的前面而使用下一个CPU时间片。Zephyr的时间片计算是维护在内核数据结