majianjia 发表于 2011-9-20 13:09:18

最近新学RT-Thread,有个关于tick的小疑问

假设设定的时间片长度是 2ms
我的线程1只运行了0.5ms就sleep了,此时任务调度器会调度到线程2,但是这个时间片还剩下1.5ms。
如果其他任务是一个死循环,那么下一次调度是发生在1.5ms后,还是2ms后?
tick的长度是不变的吗?

aozima 发表于 2011-9-20 14:37:33

时间片作用于:
当线程1和线程2的优先级相同,CPU只可能同时运行其中一个.
而当两个线程都没有主动sleep时.某个线程会一直运行下去.
时间片用于限定当前线程的最大单次运行时间长度.

参考链接: 请教rt_thread_create()参数rt uint32 t tick的具体作用?http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4233111

majianjia 发表于 2011-9-20 16:20:03

回复【1楼】aozima
看了你给的帖子,大概弄懂了,谢谢~

s200661524 发表于 2011-9-20 17:03:04

有几个问题需要搞清楚:
1)系统定时器ticks周期是多少
2)“其他任务”优先级是否比线程2的还高
3)sleep多长时间
没有条件这里就假设系统定时器周期0.1ms,
1 假设有其他线程(非线程1)优先级比2还高,在线程2运行期间就绪了,那么下一次调度发生在下一次定时器ticks中断期间。
2 在线程2运行的2ms期间没有其他高优先级线程就绪,线程1和线程2同优先级,或者线程1比2的低,那么下一次调度发生在2ms后而不管sleep多长时间。
3 在线程2运行的2ms期间没有其他高优先级线程就绪,线程1优先级比线程2高,那就看sleep时间如果<2ms那么就会在sleep结束后立刻调度,如果sleep>2ms,那么就会在2ms后调度。

暂时只想到这几种情况,欢迎补充!
页: [1]
查看完整版本: 最近新学RT-Thread,有个关于tick的小疑问