下面有cond_resched注释和源代码
1.顾名思义
有条件的调度,条件是什么呢?
2.注释解释
/*
* cond_resched() and cond_resched_lock(): latency reduction via
* explicit rescheduling in places that are safe. The return
* value indicates whether a reschedule was done in fact.
*/
通过在适当安全地方明显重新调度来减少延迟,返回值表明调度是否完成。
注意理解
a).适当安全地方,这就是上面所说条件, 适当安全地方又是什么地方呢?分析下面代码可得知。
b).直接进行调度,肯定提高实时性,因为正常调度时机:时间片到时,中断返回等,这时候就行调度肯定延迟不小。
3.代码分析
a).should_resched是应该可以调度,就是我们所说条件(适当安全地方)。条件有两点:
1.需要调度地方,也就是设置TIF_NEED_RESCHED标志地方。最终设置TIF_NEED_RESCHED这个标志函数有scheduler_tick和try_to_wake_up,当然封装这两个函数,也可以啦。
2.内核可抢占的地方
上述两点可以调用成功。该函数不能在中断上下中调度,只能在进程上下文使用该函数。
b).返回值为1,表示调度完成。0,表示失败。
static inline int should_resched(void)
1.顾名思义
有条件的调度,条件是什么呢?
2.注释解释
/*
* cond_resched() and cond_resched_lock(): latency reduction via
* explicit rescheduling in places that are safe. The return
* value indicates whether a reschedule was done in fact.
*/
通过在适当安全地方明显重新调度来减少延迟,返回值表明调度是否完成。
注意理解
a).适当安全地方,这就是上面所说条件, 适当安全地方又是什么地方呢?分析下面代码可得知。
b).直接进行调度,肯定提高实时性,因为正常调度时机:时间片到时,中断返回等,这时候就行调度肯定延迟不小。
3.代码分析
a).should_resched是应该可以调度,就是我们所说条件(适当安全地方)。条件有两点:
1.需要调度地方,也就是设置TIF_NEED_RESCHED标志地方。最终设置TIF_NEED_RESCHED这个标志函数有scheduler_tick和try_to_wake_up,当然封装这两个函数,也可以啦。
2.内核可抢占的地方
上述两点可以调用成功。该函数不能在中断上下中调度,只能在进程上下文使用该函数。
b).返回值为1,表示调度完成。0,表示失败。
static inline int should_resched(void)