阅读:3737回复:4
Windows是如何进行线程调度的?
以下是我对于线程调度程序的理解,不知道是否正确,请大家发表一下自己的观点。
线程调度例程应该也是一个ISR,当cpu发生时钟中断时执行,它判断当前线程时间片是否用完或有更高优先级的线程存在,如果满足条件就调度那个满足条件的线程进CPU,否则继续执行当前线程。 至于当前线程主动交出CPU控制权的情况,是由当前线程调用某系统服务或等待某内核对象而引发陷阱处理例程执行,该处理例程就是线程调度例程,它调度另一线程进CPU执行。 但是我有一点疑问,线程调度例程的IRQL级别在DISPATCH_LEVEL,但时钟中断的IRQL却高于这个,所以如果按照我的猜测那么线程调度例程的IRQL应该高于DISPATCH_LEVEL才对啊?请大家多多指导啊! |
|
沙发#
发布于:2008-06-22 12:13
晕倒,建议你看看Inside Windows2k吧。
Thread Scheduler 是建立在Thread的优先级队列上,不要和IRQL混在一块。 当然如果IRQL >= Dispatch Level,Thread调度就停止了,换句话说,当前运行的Thread停止了,CPU运行的代码是IRQL的对应的ISR。 而当IRQL < Dispatch Level,Thread才重新运行,Windows会根据Thread Scheduler算法重新调度。。 |
|
|
板凳#
发布于:2008-06-23 09:49
楼上的也许没有明白我的意思,在我看来,线程调度例程其实应该是一个中断处理例程,在cpu每个时钟周期到达的时候会产生一个中断,此时线程调度例程被调用。我想先确认对于这个说法你是否认同?
|
|
地板#
发布于:2008-12-30 17:43
楼主竟然跟我想到一块去了,但在时钟中断中可以设置IRQL啊,而且线程调度代码是散落在系统多处,如sleep等……
|
|
地下室#
发布于:2008-12-31 10:11
用户被禁言,该主题自动屏蔽! |
|