`
384444165
  • 浏览: 254753 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Windows线程调度机制

阅读更多

 

      今天复习操作系统,觉着windows的线程调度策略应该写在一起,加上一个整体的认识比较好,就来写篇博客也当做复习笔记了,有些地方可能略显零散。

 

    Windows 实现了一个由优先级驱动,抢占式的调度系统,调度过程结合实践配额调整,调度单位是线程。Windows 在单处理机系统和多处理机系统中的线程调度是不同的。

    Windows采用多优先级队列,windows为每个优先级的线程都准备了优先级队列,同一优先级各线程按时间片轮转进行调度,多处理器可以多线程并行。

   

    Windows的没有单独的调度模块或程序,调度的代码是在内核中实现的,广泛分布在内核中那些与调度相关的事件发生的地方。这些负责调度的程序被总称为“内核的调度器”。线程调度发生在DPC/Dispatch级别。

以下这些事件发生时会触发线程调度:

 

  • 变成就绪状态的线程。例如:一个新创建的线程,或者从等待状态释放出来的线程。
  • 因其时间片结束而离开运行状态的线程,它或者结束了,或者进入等待状态。
  • 线程的优先级改变了,是因为系统调用,或者是Windows自己改变了优先级。
  • 正在运行的线程的处理器亲合性改变了。

 

    Windows内部使用32个优先级别,从0-31。这些数值被分成以下几类:

 

  • [实时优先级]16个实时级别(16-31)
  • [动态优先级]15个变化的级别(1-15) (一般交互式线程优先级最高)
  • 1个系统级别(0), 被保留用作0页线程(零页线程:用于对系统中空闲物理页面清零)

    需要注意的是Windows这里的实时优先级只是一种windows内部的命名(windows很多的命令和理论课或unix中的命名不同),并不是通常意义上的实时。

    对于具备实时优先级的线程在被其他线程抢占时,具有实时优先级线程与具有可变优先级线程的行为是不同的,下面会介绍到。在应用程序中,用户可在一定范围内升高或降低线程优先级,但要把线程的优先级提升到实时优先级,用户必须有升高线程优先级的权限,如果用户进程在实时优先级运行时间过多,可能阻塞关键系统功能的执行,阻塞系统线程的运行。

 

Win32 API中,每个线程的优先级都是它所属的进程的优先级和自己相关的线程优先级二者的组合。从Win32优先级映射到Windows内部数字式的优先级如图所示:

(转载自http://www.programfan.com/blog/article.asp?id=44350

 

   前面提到了一个概念叫做时间配额,时间配额不是一个时间长度值,而一个称为配额单位的整数。(每次从检查调度间的运行时间,很好理解,不多解释)多说一下,时间配额的作用就是可以在不提升优先级的情况下区分不同线程的运行时间,如果提升优先级来做可能导致一些线程饥饿。

 

   调度方式有三种:

 

  • 主动切换
  • 抢占(当线程被抢占时,它被放回到相应的优先级就绪队列的队首;对实时优先级线程被抢占后分配一个完整的是时间配额,而动态优先级线程不变,下次仅运行剩余时间配额)
  • 时间配额用完(没有同优先级线程会继续分配一个新的时间配额)

    windows线程有优先级提升机制(总的来说是因为能更好利用CPU资源或饥饿而提高优先级):

 

 

 

  • I/O操作完成
  • 信号量或事件等待结束
  • 前台进程中的线程完成一个等待操作
  • 由于窗口活动而唤醒图形用户接口线程
  • 线程处于就绪状态超过一定时间,但没能进入运行状态(处理机饥饿)
特别说明下饥饿状态下的优先级提升:
系统线程“平衡集管理器(balance set manager)” 会每秒钟检查一次就绪队列,是否存在一直在就绪队列中排队超过300个时钟中断间隔的线程。如果找到这样的线程,平衡集管理器将把该线程的优先级提升到15,并分配给它一个长度为正常值4倍的时间配额。一旦运行完重新回到原来的优先级。

以上都是对于单核情况,对于多核的情况下假如有N个处理器,则N-1个处理器上活跃的线程为最高优先级的线程N-1个,独占运行,剩下的低优先级线程会共享剩余的一个处理器。但这个原则又收到处理器关联属性的影响。如果一个线程准备执行,但是唯一可用的处理器不在它的处理器关联结合中,则该线程也只能被迫等待,执行体调度下一个可以得到的线程执行。

 

分享到:
评论

相关推荐

    嵌入式系统/ARM技术中的Windows CE陷阱调度机制

    什么是陷阱调度机制?  一般来说,嵌入式操作系统主要由两部分组成:运行在核心态的内核系统和运行在用户态的环境子系统组成。因此,Windows CE系统被划分为两层:执行体和内核。而内核始终运行在核心态下,除了...

    Windows之漫谈兼容内核

    漫谈兼容内核之二十二:Windows线程的调度和运行 漫谈兼容内核之二十三:关于TLS 漫谈兼容内核之二十四:Windows的结构化异常处理(一) 漫谈兼容内核之二十五:Windows的结构化异常处理(二) 漫谈兼容内核之二十六:...

    windows internals fifth edition (英文版) part2

    全书内容丰富、信息全面,主要包括的Windows操作系统深度知识有:理解Windows的关键机制,包括系统服务分发和调度机制、启动和停机,以及注册表;挖掘Windows的安全模型,包括访问控制、特权和审计;利用内核调试器...

    深入解析WINDOWS操作系统(第4版).pdf

    《深入解析:Windows操作系统》(第4版)全书内容丰富、信息全面,主要包括的Windows操作系统深度知识有:理解Windows的关键机制,包括系统服务分发和调度机制、启动和停机,以及注册表;挖掘Windows的安全模型,包括...

    深入解析WINDOWS操作系统(第4版)01

    全书内容丰富、信息全面,主要包括的Windows操作系统深度知识有:理解Windows的关键机制,包括系统服务分发和调度机制、启动和停机,以及注册表;挖掘Windows的安全模型,包括访问控制、特权和审计;利用内核调试器...

    漫谈Linux兼容内核

    01:ReactOS怎样实现系统调用.pdf ...22:Windows线程的调度和运行.pdf 23:关于TLS.pdf 24:Windows的结构化异常处理(一).pdf 25:Windows的结构化异常处理(二).pdf 26:Windows的结构化异常处理(三).pdf

    深入解析WINDOWS操作系统(第4版)

    全书内容丰富、信息全面,主要包括的Windows操作系统深度知识有:理解Windows的关键机制,包括系统服务分发和调度机制、启动和停机,以及注 册表;挖掘Windows的安全模型,包括访问控制、特权和审计;利用内核调试...

    嵌入式WinCE多线程编程研究与实现

    Windows ce作为一个多任务操作系统,采用了一种新的任务调度机制。原理上它将一个进程划分为多个线程,每个线程按照一定的调度策略占用CPU 的运行时间及其资源,这样使得CPU 的调度单元很小,从而提高了CPU 并发处理...

    windows internals fifth edition (英文版) part1

    全书内容丰富、信息全面,主要包括的Windows操作系统深度知识有:理解Windows的关键机制,包括系统服务分发和调度机制、启动和停机,以及注册表;挖掘Windows的安全模型,包括访问控制、特权和审计;利用内核调试器...

    深入解析WINDOWS操作系统(第4版) 04

    全书内容丰富、信息全面,主要包括的Windows操作系统深度知识有:理解Windows的关键机制,包括系统服务分发和调度机制、启动和停机,以及注册表;挖掘Windows的安全模型,包括访问控制、特权和审计;利用内核调试器...

    深入解析WINDOWS操作系统(第4版) 03

    全书内容丰富、信息全面,主要包括的Windows操作系统深度知识有:理解Windows的关键机制,包括系统服务分发和调度机制、启动和停机,以及注 册表;挖掘Windows的安全模型,包括访问控制、特权和审计;利用内核调试...

    Microsoft Windows Internals.pdf

    全书内容丰富、信息全面,主要包括的Windows操作系统深度知识有:理解Windows的关键机制,包括系统服务分发和调度机制、启动和停机,以及注册表;挖掘Windows的安全模型,包括访问控制、特权和审计;利用内核调试器...

    windowsnt 技术内幕

    4.0 Windows NT网络协议简介 MUP简介 Multiple Provider Router简介 理解传输驱动动器接口(TDI) 理解文件系统驱动器 理解分布式处理 理解进行进程间通信机制 访问文件和打印资源 分布式文件和打印资源 分布式文件...

    深入解析windows操作系统 第四版 英文版 chm 格式 卷一

    全书内容丰富、信息全面,主要包括的Windows操作系统深度知识有:理解Windows的关键机制,包括系统服务分发和调度机制、启动和停机,以及注册表;挖掘Windows的安全模型,包括访问控制、特权和审计;利用内核...

    漫谈兼容内核.7z

    Windows线程的系统空间堆栈.pdf 漫谈兼容内核之二十一:Windows进程的用户空间.pdf 漫谈兼容内核之二十二:Windows线程的调度和运行.pdf 漫谈兼容内核之二十三:关于TLS.pdf 漫谈兼容内核之二十四:Windows的结构化...

    深入解析Windows操作系统 中文版 第四版 part 4

    6.5 线程调度 6.6 作业对象 6.7 本章总结 第7章 内存管理 7.1 内存管理器简介 7.2 内存管理器提供的服务 7.3 系统内存池 7.4 虚拟地址空间的布局结构 7.5 地址转译 7.6 页面错误处理 7.7 虚拟地址描述符 7.8 内存区...

    深入解析windows操作系统(第4版)卷3

    全书内容丰富、信息全面,主要包括的Windows操作系统深度知识有:理解Windows的关键机制,包括系统服务分发和调度机制、启动和停机,以及注册表;挖掘Windows的安全模型,包括访问控制、特权和审计;利用内核...

    深入解析windows操作系统(第4版)卷2

    全书内容丰富、信息全面,主要包括的Windows操作系统深度知识有:理解Windows的关键机制,包括系统服务分发和调度机制、启动和停机,以及注册表;挖掘Windows的安全模型,包括访问控制、特权和审计;利用内核...

    深入解析windows操作系统(第4版)卷1

    全书内容丰富、信息全面,主要包括的Windows操作系统深度知识有:理解Windows的关键机制,包括系统服务分发和调度机制、启动和停机,以及注册表;挖掘Windows的安全模型,包括访问控制、特权和审计;利用内核...

    漫谈兼容内核

    22.漫谈兼容内核之二十二:Windows线程的调度和运行.pdf 23.漫谈兼容内核之二十三:关于TLS.pdf 24.漫谈兼容内核之二十四:Windows的结构化异常处理(一).pdf 25.漫谈兼容内核之二十五:Windows的结构化异常处理...

Global site tag (gtag.js) - Google Analytics