Windows是一款微内核、抢占式多任务、软实时的操作系统。 Windows的任务调度主要以线程为单位进行,线程拥有33个优先级,数值为0~32,其中0为最低优先级,32为最高优先级,最高和最低优先级均保留给系统使用。用户可以使用的优先级为1~31。

Windows按照优先级高低顺序来进行任务的调度,当调度发生时,内核首先检查高优先级的线程是否 就绪,如果有发现有高优先级的线程就绪则立刻将高优先级的线程发往CPU执行。如果有高优先级的线程就绪,就不会执行低优先级的任务。不 过,windows使用成为“饥渴”的时间片分配策略,如果有线程一直渴望得到时间片但是很长时间都没有获得时间片,windows就会临时将这个线程的 优先级提高,并一次分配给2倍的时间片来执行,但是windows绝不会将这个线程的优先级提高到实时优先级范围(16~31为实时优先级范围),如果不 希望windows进行饥渴分配策略,也可以通过特定的API将该策略关闭(SetThreadPriorityBoost)。

Windows同时采用时间片策略来执行相同优先级的任务。相同优先级的线程会获得同样的时间片(一 般为2个系统Tick,在单CPU系统上一个系统Tick一般为10ms,多CPU系统上一般为15ms,可以通过 GetSystemTimeAdjustment查询)。一个线程的时间片用完后,Windows会将另外一个已经就绪的同优先级的线程发往CPU进行执 行。正在执行的线程将在线程主动放弃时间片(比如调用Sleep函数),时间片用完或Windows发现有更高优先级的线程就绪后暂停执行。

另外,Windows还存在不受优先级策略控制的线程,如DPC的处理线程,Windows中每个CPU上都有一个DPC队列,只要DPC中有等待处理的任务,Windows总是会立刻对DPC中的任务进行处理。

Windows和硬实时操作系统的区别在于,硬实时操作系统一般拥有256或更多的优先级,硬实时操 作系统的最重要特性在于中断的处理方式方面,Windows使用DPC队列方式来延时处理中断请求,在ISR中仅能执行时间非常关键的硬件寄存器操作(如 恢复清除设备中断寄存器使得设备能进行下一次中断),DPC队列按照先入先出的方式执行,这样如果系统在短时间发生大量中断而使得DPC队列中存在大量待 处理的中断请求时,时间关键的中断请求可能会在很长时间后才得到处理,使得系统丧失实时响应能力。硬实时操作系统的ISR同样一般仅能执行时间关键的硬件 寄存器操作,也必须通过任务调度切换至相关的任务上下文环境,才能访问更多的资源来进行相关的处理,但是硬实时操作系统可以根据优先级来处理中断的请求, 后发生的高优先级中断请求可以抢占低优先级中断或低优先级任务的时间片,而使得时间关键的中断请求总是能得到最优先的处理。

对各种操作系统的任务调度策略进行深入的理解之后,才能对一套应用系统的设计进行精确的把握。 Windows的调度策略很适合处理各种非事件性的数据,比如大量的流数据,可以达到很高的数据吞吐量。如果你设计的系统是需要实时响应的中断事件式的处 理,那么你可能需要考虑使用一款硬实时的操作系统,如Windows CE 5.0以上版本,或vxWorks,WindowsCE有很好的硬实时的处理能力,价格低廉,开发容易,缺点是可用软件少。而vxWorks功能强大,有 庞大的gnu软件阵容做后盾,唯一美中不足的是价格昂贵。其他免费的操作系统只会令你的项目陷入困境,如果做的是有的是时间没有钱的项目,才值得考虑。

Windows的任务调度机制相关推荐

  1. windows程序消息机制(Winform界面更新有关)--转

    1. Windows程序消息机制 Windows GUI程序是基于消息机制的,有个主线程维护着消息泵.这个消息泵让windows程序生生不息. Windows程序有个消息队列,窗体上的所有消息是这个队 ...

  2. 深入详解windows安全认证机制ntlmKerberos

    0x01 为什么要理解windows 安全认证机制: 加深对后续各种漏洞利用的理解深度,还是那句话,要知其然,更要知其所以然,不废话,咱们直接开始 0x02 windows认证协议主要有以下两种: 基 ...

  3. Spark 任务调度机制详解

    Spark 任务调度机制 在工厂环境下,Spark 集群的部署方式一般为 YARN-Cluster 模式,之后的内核分析内容中我们默认集群的部署方式为 YARN-Cluster 模式. 4.1 Spa ...

  4. windows程序消息机制(Winform界面更新有关)

    1. Windows程序消息机制 Windows GUI程序是基于消息机制的,有个主线程维护着消息泵.这个消息泵让windows程序生生不息. Windows程序有个消息队列,窗体上的所有消息是这个队 ...

  5. 全面介绍Windows内存管理机制及C++内存分配实例(六):堆栈

    本文背景: 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本 ...

  6. 全面介绍Windows内存管理机制及C++内存分配实例(五):堆

    本文背景: 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本 ...

  7. 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件

    本文背景: 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本 ...

  8. 全面介绍Windows内存管理机制及C++内存分配实例(三):虚拟内存

    本文背景: 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本 ...

  9. 全面介绍Windows内存管理机制及C++内存分配实例(二):内存状态查询

    本文背景: 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本 ...

最新文章

  1. 多线程编程有什么用途_C++ 多线程编程 (一)
  2. 一文详析微信和淘宝扫码登录背后的实现原理!
  3. PhpStorm+Homestead+Xdebug调试Laravel
  4. Angular应用ng serve命令行的学习笔记
  5. android使用 注解框架,Android实践 | 注解框架ButterKnife基本使用
  6. org.apache.commons.math3.linear.FieldMatrix的类关系图
  7. Asp.Net--回调技术
  8. [CTO札记]研究:日本Rakuten(乐天)
  9. USBCNC导入DXF文件
  10. div css3 border-radius 之圆角 div圆角 图片圆角
  11. SysML实践指南第二版(中文翻译:刘亚龙)第一章 系统工程基础
  12. 电视盒子线刷固件教程B860AV2.1-A-M-T版
  13. SWS_BICUBIC未声明的标识符解决方法
  14. 【日常实用篇】解决2345压缩软件自带的流氓广告
  15. DB2表空间状态列表
  16. 【算法】求n的m次方(快速幂取模)
  17. 基于MATLAB的雷达的杂波模拟器
  18. matlab浊音段和清音段,基于Matlab编写的语音端点检测1
  19. 区块链扩展性技术总结
  20. 7.23 010Editor.exe的使用

热门文章

  1. VMware vSphere Hypervisor 7(ESXi 7)
  2. 今天面了个京东拿 38K 出来的,让我见识到了基础的天花板
  3. 全国统一计算机二级考试内容试题,全国计算机二级考试题
  4. vue的生命周期钩子函数的作用
  5. 智能家居创意DIY之智能触摸面板开关
  6. 江苏海信ip906h盒子,强刷固件及教程(70T1版本)
  7. 基于P2P万信金融-- 万信金融项目之业务大总结(文末附代码地址)
  8. 通知计算机大赛的英语作文,关于诗歌比赛(通知)的英语作文
  9. mysql主键设置名称_MySQL的主键命名挺任性,就这么定了
  10. 第九届山东理工大学ACM网络编程擂台赛 热身赛 sdut4087 ldq's Sons