RT-Thread调度算法疑问

发布于 2015-02-14 13:58:56
Hi!
十分感兴趣RTT的调度算法实现,喵过一点代码发现RTT采用了基于静态优先级的抢占式调度算法,优先级可以在创建任务时静态分配,这样实现的好处在于系统有很快的响应时间!
但是一个硬实时的系统并非仅仅要保证很快的响应时间,更重要的是能够保证所有任务在其截至时间内完成!
对于周期任务的处理来说,rtt仍是采用了手工分配优先级的方法,这样带来的问题是:周期性任务集在最优情况下是可以完全被调度的,但是由于优先级分配的不同导致了任务无法分配,请看下面一个例子(T 表示周期,C表示最坏执行时间):
task.png
所以学术界,包括一些RTOS(如rtems??)都实现了RMS调度算法,RMS会根据任务周期大小来决定优先级。RMS算法会评价该系统是否能完全被调度,对于某些实时性要求十分高的场合,通过去除某些任务来保证系统完全可调度(不知道rtems是不是这样实现的???)!
另外这篇文章中也提到说http://www.embedded.com/electronics-blogs/beginner-s-corner/4023927/Introduction-to-Rate-Monotonic-Scheduling,任务的优先级也尽量不要手工来调整!

查看更多

关注者
0
被浏览
2.1k
6 个回答
zchong
zchong 2015-02-14
疑问是什么?
rt-thread如何保证可调度性?

目前rt-thread应该是不支持动态调度的,这个比较复杂,恐怕很多rtos都不支持吧
ffddybz
ffddybz 2015-02-14
RMS是针对周期任务的静态调度算法,是根据任务周期来判定优先级的,这里有RTEMS的RMS实现,还在消化中
bernard
bernard 2015-02-14
RMS本身就是一种静态调度算法,或者说是一种按照周期性任务来分配优先级的算法。

类似的,当在RTT中按照RMS方式来确定各任务的优先级,则这个时候就能够满足deadline关系。

所以,这类都是静态方式的调度算法,优先级依靠运行前手工定义出来。

btw,你上面说的优先级尽量不要手工调整,指的是不要动态去调整。动态调整不是RTOS要去做的(当然一种情况是,优先级翻转)。
ffddybz
ffddybz 2015-02-17
RTT已经实现了RMS算法吗?
另外,其实也有一些动态调度算法,如EDF(在RT-Linux/Erika Enterprise(正在学习中的)上有实现)等,只是很多的这类算法都停留在实验室中!
原文中提到的静态优先级的设置是这么说的Always assign priorities according to RMA. Manually assigning fixed priorities will not give you a better solution.因为RMS的算法有说到只要其他静态调度可以做到任务集完全可调度,那么RMS完全可做到!
zchong
zchong 2015-02-18
用户需要自己解决可调度问题,比如根据rms决定优先级。rms本身就是一个最优的算法所以才有“要其他静态调度可以做到任务集完全可调度,那么RMS完全可做到”。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友