SylixOS任务调度分析

1. 任务调度相关链表
SylixOS将任务控制块加入到不同的任务调度链表进行管理,创建一个任务就会把新创建的任务加入到优先级就绪表,等待被调度执行。根据不同的任务阻塞原因会被加入到不同的阻塞表中。
1.1    优先级就绪表
 
图 1.1 任务优先级就绪表
SylixOS系统启动的过程会初始化一个任务优先级就绪表,当创建新任务时,根据任务的优先级加入到对应的优先级就绪表中,如图 1.1所示。系统启动过程创建一个优先级最低的IDLE任务。
1.2    任务控制块地址表
 
图 1.2 任务TCB地址表
创建新任务添加到就绪表的同时加入到任务控制块地址表。当调用任务挂起函数API_ThreadSuspend时,把任务控制块从优先级队列中取出,更新TCB地址表中的任务状态。当调用任务恢复函数API_ThreadResume时,从TCB地址表中获取到任务控制块更新到优先级就绪表,等待执行。
1.3    延时阻塞表
 
图 1.3 任务延时阻塞表
调用任务休眠函数API_TimeSleep时,任务被加入到延时阻塞表,等待任务延时时间到,从延时阻塞表中取出加入到就绪表中。
1.4    事件阻塞表
 
图 1.4 事件阻塞表
如图 1.4所示,以信号量阻塞为例,创建信号量时获取一个事件控制块,当获取信号量被阻塞就被加入到事件控制块的阻塞表中,如果设置了等待时间同时会被加入到延时阻塞表。当获取到信号量或是等待超时,任务会被重新加入到就绪表中。
2. 任务调度
引起任务调度的主要原因有以下几个:
1)    时间片耗尽、任务执行完毕。
2)    任务进入睡眠等待。
3)    获取资源被阻塞。
4)    任务主动挂起。
2.1    任务调度流程分析
 
图 2.1 任务调度流程
SylixOS任务调度流程如图 2.1所示,创建的任务加入优先级就绪表,等待被调度执行。在任务运行过程中,如果调用延时函数,任务被调出加入到延时阻塞表,等待延时时间到;如果因获取信号量等资源被阻塞,任务被调出加入到事件阻塞表,等待事件到来或超时时间到;如果任务被挂起加入任务控制块地址表,等待被唤醒。每个任务都有占用CPU执行的时间片,当时间片耗尽时,系统会重新调度高优先级任务执行。
————————————————
版权声明:本文为CSDN博主「sylixos-cainiao」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gufuguang/article/details/82117523

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值