XinHuaSoft
驱动牛犊
驱动牛犊
  • 注册日期2005-07-19
  • 最后登录2012-06-11
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望167点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:3737回复:4

Windows是如何进行线程调度的?

楼主#
更多 发布于:2008-06-15 13:33
以下是我对于线程调度程序的理解,不知道是否正确,请大家发表一下自己的观点。

线程调度例程应该也是一个ISR,当cpu发生时钟中断时执行,它判断当前线程时间片是否用完或有更高优先级的线程存在,如果满足条件就调度那个满足条件的线程进CPU,否则继续执行当前线程。

至于当前线程主动交出CPU控制权的情况,是由当前线程调用某系统服务或等待某内核对象而引发陷阱处理例程执行,该处理例程就是线程调度例程,它调度另一线程进CPU执行。

但是我有一点疑问,线程调度例程的IRQL级别在DISPATCH_LEVEL,但时钟中断的IRQL却高于这个,所以如果按照我的猜测那么线程调度例程的IRQL应该高于DISPATCH_LEVEL才对啊?请大家多多指导啊!
Leonsoft
驱动小牛
驱动小牛
  • 注册日期2003-05-08
  • 最后登录2012-08-11
  • 粉丝1
  • 关注0
  • 积分21分
  • 威望281点
  • 贡献值1点
  • 好评度103点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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算法重新调度。。
I will do the best with what the God gave me.
XinHuaSoft
驱动牛犊
驱动牛犊
  • 注册日期2005-07-19
  • 最后登录2012-06-11
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望167点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-06-23 09:49
楼上的也许没有明白我的意思,在我看来,线程调度例程其实应该是一个中断处理例程,在cpu每个时钟周期到达的时候会产生一个中断,此时线程调度例程被调用。我想先确认对于这个说法你是否认同?
better0332
驱动牛犊
驱动牛犊
  • 注册日期2007-10-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望46点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-12-30 17:43
楼主竟然跟我想到一块去了,但在时钟中断中可以设置IRQL啊,而且线程调度代码是散落在系统多处,如sleep等……
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
地下室#
发布于:2008-12-31 10:11
用户被禁言,该主题自动屏蔽!
游客

返回顶部