|
下面引用网上的一段话,
------------------------------------------
实时和抢占,是为了减少latency
在非抢占的内核中(比如2.4),中断返回时(包括时钟中断?),如果发现CPU是在内核态,是不进行调
度的。
因此,在内核态中的某些代码,如果运行时间太长的话,是会增加schedule latency的。
此时,主要依靠内核本身主动进行调度。
对于可以抢占的内核,中断返回时,即使CPU是内核态,也可以调度,因此可以减少latency。
此时,即使是内核态,也可以被动的调度。
但是,即使在可以抢占的内核,如果在某个锁中的运行时间太长,也会增加schedule latency,因为锁中
是不能抢占的。
因此,内核的很多代码,当觉得占用了较长时间,就会主动调用cond_resched()。
也就是说,在可抢占的内核中,没有占用锁的时候,可以抢占(中断返回的时候),这是被动的调度。
占用锁的时候,主要靠内核本身主动调度。
-----------------------------------------------------------------
我有一个问题 不清楚 就是红色字体部分
不是说了锁中不能抢占的吗!那还主动调用cond_resched()有用吗?????schedule()应该会打印出错信息啊????
疑惑啊。。。。。。。。。。 |
|