阅读:5524回复:8
windows 线程切换
最近对线程切换比较感兴趣,就是没有看到windows在什么时候进行线程切换,也到现在没有明白是怎么实现的,就是在什么地方改变CS和EIP的值,请各位指点一下,谢谢!
|
|
沙发#
发布于:2007-10-04 20:42
主要有两种方式-主动和被动,比如应用程序调用诸如Sleep之类的函数主动出让CPU控制给其他的线程,还有就是时间片到期后被动切换。
|
|
板凳#
发布于:2007-11-14 21:21
关注中!
|
|
地板#
发布于:2007-11-20 10:27
貌似还有个优先级调度,,,,
|
|
地下室#
发布于:2007-12-08 11:43
windows没隔几毫秒进行一些线程切换好像是6毫秒,记不太清楚了。windows有一个等待调度队列,切换的时候,windows从调度队列中取走最前面的线程开始把时间片分给它,等切换时间一到,它会执行下一个调度线程,当前的线程重新到调度队列排队。调度的先后和线程的优先级有关,如果某一个线程在执行期间调用sleep,则表示它让出了自己剩余的时间片,windows会马上调度下一个线程~~~~~
|
|
5楼#
发布于:2008-02-18 21:11
1.时间片:时钟中断处理例程从PCR中取得当前线程对象指针并更新线程时间,如果超出了时间片,则将当前线程从放入ready列表中,然后从standby列表中取出最高优先级的线程,然后保存当前线程上下文数据,并转到新的线程上下文.
2.主动等待:线程调用等待函数,则将当前线程放到wait列表中,然后从standby列表中取一个线程,切换上下文,当主动等待的事件完成时,线程被调度到ready列表中等待再次被调度运行. 3.抢先:时钟中断发现standby列表中有比当前线程更高的线程,则挂起当前线程,切换线程上下文,运行最需要运行的线程. 所以,所谓的线程调度器是不存在的,不是线程等某个真实存在的调度器来调度自己,而是"线程挂起自己,让出CPU" |
|
6楼#
发布于:2008-06-15 22:38
To chagoogle:我对于线程调度的理解也跟你一样,不过我有一个困惑,那就是:线程调度的IRQL级别是在DISPATCH_LEVEL,但按照你刚才说的三种线程调度情况来说的话,其中第一种情况线程调度的IRQL级别就应该是CLOCK1_LEVEL或CLOCK2_LEVEL了呀,不知道对于这个问题你是怎么看的?
|
|
7楼#
发布于:2008-07-12 21:50
必然有个线程专门来管理,线程调度的问题。
多线程应该也是CPU支持的才对。 应该会定时激活那个专门调度的线程。 |
|
8楼#
发布于:2008-08-05 16:28
现在,我正在看那本教材,都看晕了,,里面好多的东西都没见过啊,,看到线程那部分也晕晕的。。我继续努力啊!!!要多潜水才行!!!
|
|