完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
RT-Thread支持时间片调度算法,相同优先级的thread按其设定的ticks 轮流执行。 先上rt_schedule代码 need_insert_from_thread 标志主要是用来标记是否从当前任务切换到其他任务,切出意味着需要把当前任务插入到对应优先级的readylist。 情况1 这个很好理解:没有和当前任务task1优先级相同的任务,其优先级readylist为空。 假如有一个低优先级task2任务, systic中断里 rt_timer_check()发现超时;或者资源就绪把它唤醒,都会发起一次调度,把它插入对应readylist,这时_scheduler_get_highest_priority_thread得到的是task2,无需切换。 或者当前任务时间片用完,主动发起调度,发现自己还是老大,那就继续运行吧 task主动调用rt_thread_yield,礼让CPU资源,结果和上面一样 情况2 假设还有一个task2和当前任务task1优先级相同, 同样可能因为超时;或者资源就绪把它唤醒,发起一次调度,把它插入对应readylist。 这时task1的时间片还未用完,依旧无需切换,让它等着吧。 情况3 可以直接列出剩余的三种情况, 1) if (rt_current_thread->current_priority == highest_ready_priority && (rt_current_thread->stat & RT_THREAD_STAT_YIELD_MASK) != 0) 和情况2相同,当前任务的时间片用完了或者主动礼让,把自己插入对应readylist前 2) if (rt_current_thread->current_priority > highest_ready_priority && (rt_current_thread->stat & RT_THREAD_STAT_YIELD_MASK) != 0) 再次因超时或者资源唤醒进来,也不满足这个条件 /** [url=home.php?mod=space&uid=2666770]@Brief[/url] This function will notify kernel there is one tick passed.
*/ if (rt_current_thread->current_priority > highest_ready_priority && (rt_current_thread->stat & RT_THREAD_STAT_YIELD_MASK) == 0) 新就绪的任务优先级高于当前任务,虽然当前任务时间片有剩余,也必须切出,同时保留剩余时间片 插入到readylist void rt_schedule_insert_thread(struct rt_thread thread) 问题 问题出在情况3的第三种情景下: 新就绪的任务优先级高于当前任务,当前任务时间片有剩余, 插入动作没有问题,但是使用rt_list_insert_before把未执行完时间片的任务插入到其优先级readylist的最后面,是不是对其不太公平,毕竟是高优先级的任务打断了它。 是不是应该按下面分类处理比较好, 使用rt_list_insert_after把它插在list->next位置,下次轮到该优先级时,首先执行,直到其时间片用完!
// else if (rt_current_thread->current_priority > highest_ready_priority && (rt_current_thread->stat & RT_THREAD_STAT_YIELD_MASK) != 0) |
|
相关推荐
2个回答
|
|
分析得有道理,按这分析,我觉得正常逻辑应该是,高优先级打断了它,它住后等,等高优先级执行完后,就应该再执行它,
|
|
|
|
如果紧接着就绪的线程的优先级比刚才被打断的优先级的任务高,上述的切换策略又会对该任务不公平,所以感觉当前一视同仁插入到末尾的策略是个目前比较好的策略。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
764 浏览 0 评论
3847 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2479 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2901 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
31185 浏览 11 评论
72793 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 00:38 , Processed in 0.699222 second(s), Total 72, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号