litroncn
驱动牛犊
驱动牛犊
  • 注册日期2006-10-27
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望31点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:5385回复:8

windows 线程切换

楼主#
更多 发布于:2007-06-26 09:26
最近对线程切换比较感兴趣,就是没有看到windows在什么时候进行线程切换,也到现在没有明白是怎么实现的,就是在什么地方改变CS和EIP的值,请各位指点一下,谢谢!
jingjing1977
驱动牛犊
驱动牛犊
  • 注册日期2003-12-24
  • 最后登录2009-02-07
  • 粉丝0
  • 关注0
  • 积分157分
  • 威望16点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-10-04 20:42
主要有两种方式-主动和被动,比如应用程序调用诸如Sleep之类的函数主动出让CPU控制给其他的线程,还有就是时间片到期后被动切换。
king21th
驱动牛犊
驱动牛犊
  • 注册日期2006-04-13
  • 最后登录2009-10-08
  • 粉丝0
  • 关注0
  • 积分56分
  • 威望334点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-14 21:21
关注中!
qiweixue
驱动小牛
驱动小牛
  • 注册日期2004-07-21
  • 最后登录2011-12-19
  • 粉丝0
  • 关注0
  • 积分1006分
  • 威望274点
  • 贡献值0点
  • 好评度268点
  • 原创分1分
  • 专家分0分
地板#
发布于:2007-11-20 10:27
貌似还有个优先级调度,,,,
zongjg
驱动牛犊
驱动牛犊
  • 注册日期2004-04-24
  • 最后登录2009-03-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-12-08 11:43
windows没隔几毫秒进行一些线程切换好像是6毫秒,记不太清楚了。windows有一个等待调度队列,切换的时候,windows从调度队列中取走最前面的线程开始把时间片分给它,等切换时间一到,它会执行下一个调度线程,当前的线程重新到调度队列排队。调度的先后和线程的优先级有关,如果某一个线程在执行期间调用sleep,则表示它让出了自己剩余的时间片,windows会马上调度下一个线程~~~~~
chagoogle
驱动牛犊
驱动牛犊
  • 注册日期2005-11-22
  • 最后登录2011-11-23
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望97点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-02-18 21:11
1.时间片:时钟中断处理例程从PCR中取得当前线程对象指针并更新线程时间,如果超出了时间片,则将当前线程从放入ready列表中,然后从standby列表中取出最高优先级的线程,然后保存当前线程上下文数据,并转到新的线程上下文.

2.主动等待:线程调用等待函数,则将当前线程放到wait列表中,然后从standby列表中取一个线程,切换上下文,当主动等待的事件完成时,线程被调度到ready列表中等待再次被调度运行.

3.抢先:时钟中断发现standby列表中有比当前线程更高的线程,则挂起当前线程,切换线程上下文,运行最需要运行的线程.

所以,所谓的线程调度器是不存在的,不是线程等某个真实存在的调度器来调度自己,而是"线程挂起自己,让出CPU"
XinHuaSoft
驱动牛犊
驱动牛犊
  • 注册日期2005-07-19
  • 最后登录2012-06-11
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望167点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-06-15 22:38
To chagoogle:我对于线程调度的理解也跟你一样,不过我有一个困惑,那就是:线程调度的IRQL级别是在DISPATCH_LEVEL,但按照你刚才说的三种线程调度情况来说的话,其中第一种情况线程调度的IRQL级别就应该是CLOCK1_LEVEL或CLOCK2_LEVEL了呀,不知道对于这个问题你是怎么看的?
tonyfirst1
驱动牛犊
驱动牛犊
  • 注册日期2008-02-26
  • 最后登录2010-08-06
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望138点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-07-12 21:50
必然有个线程专门来管理,线程调度的问题。

多线程应该也是CPU支持的才对。

应该会定时激活那个专门调度的线程。
jzw333789
驱动牛犊
驱动牛犊
  • 注册日期2008-07-29
  • 最后登录2008-08-15
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-08-05 16:28
现在,我正在看那本教材,都看晕了,,里面好多的东西都没见过啊,,看到线程那部分也晕晕的。。我继续努力啊!!!要多潜水才行!!!
游客

返回顶部