Windows操作系统支持内核级线程,调度单位是线程,它采用基于动态优先级的,抢占式调度,并结合时间配额的调整来完成调度

一、几个前提知识点

  就绪线程按优先级进入相应的就绪队列

  系统总是选择优先级最高的就绪线程运行

  同一优先级的各个线程按时间片轮转方式进行调度

  多CPU系统中允许多个线程并行运行

二、调度时机

线程调度的引发条件,除了前面提到的公共的4种情况外还有以下两种

  一个线程的优先级改变

  一个线程改变了它的亲和处理机集合(线程可以被处理的处理机的集合,比如这个集合中增加了一个新的处理机)

  前面提到的4种情况也列出来:

  线程正常终止 或 由于某种错误而终止

  新线程创建 或 一个等待线程变为就绪态

  当一个线程由运行态线程变为就绪态

  当一个线程由运行态进入阻塞态

三、线程优先级(重要)

  Windows使用的三类共32个线程优先级:(优先级和优先数自行查阅概念)

    实时优先级:16-31(一旦确定优先级不再改变)

    可变优先级:1-15(优先级可以在一定范围内升高或降低,分为基本优先级和当前优先级)

    系统线程:0(物理内存清零的操作等)

四、时间配额:加粗加硬,理解这个概念非常重要

  时间配额不是一个时间长度值,而是一个被称为配额单位的整数值

  一个线程用完了自己的时间配额时,如果没有其他相同优先级的线程,Windows将重新给该线程分配一个新的时间配额使其继续运行

五、调度策略

1、主动切换

  一个正在运行态的线程由于等待I/O结果进入阻塞态,让出CPU,调度程序从就绪队列选择一个新的线程上CPU运行

2、抢占

  如果刚才被阻塞的线程被唤醒,由于他的优先级高,会抢占CPU取运行,被抢占的线程回到就绪队列

  当线程被抢占时,它被放回相应优先级的就绪队列的队首

  处于实时优先级的线程被抢占时,时间配额被重置为一个完整的时间配额

  处于可变优先级的线程被抢占时,时间配额不变,重新得到CPU后将运行剩下的时间配额

3、时间配额用完

  时间配额用完的线程,如果优先级降低了,Windows将选择一个优先级更高的线程上CPU

  优先级没有降低的情况下,

    如果队列中有其他的就绪线程,则选择下一个线程执行,A回到原来就绪队列的末尾

    如果队列中没有其他的就绪线程,系统会给当前线程重新分配一个新的时间配额,让他继续运行

六、优化方案

提升优先级的情况(只针对可变优先级1-15的线程)

  线程处于就绪态超过了一定的时间还没有运行 (俗称饥饿)

  完成I/O操作的线程

  前台进程中的线程完成一个等待操作

  由于窗口活动而唤醒窗口线程

  信号量或事件等待结束

特别的,"饥饿线程"的优先级提升

  系统线程"平衡集管理器"每秒钟扫描一次就绪队列,发现是否存在等待时间超过300个时钟中断间隔的线程

平衡集管理器将这些线程的优先级提升到15,并分配它一个长度值为正常值4倍的时间配额,被提升的线程用完

它的时间配额后立即衰减到它原先的基本优先级

操作系统-Windows操作系统的线程调度了解这些的更多相关文章

  1. 杂谈:Windows操作系统的介绍与对Win8操作系统市场反响冷淡原因的分析

    Windows操作系统,毫无疑问是操作系统市场上的霸主,也正因为Windows操作系统的诞生让电脑的操作性能变得更加平民化,深的用户的喜爱.至今身边的人也是选择windows操作系统的居多,这篇文章也 ...

  2. Windows操作系统的版本

    Windows操作系统的版本号一览 操作系统 PlatformID 主版本号 副版本号 Windows95 1 4 0 Windows98 1 4 10 WindowsMe 1 4 90 Window ...

  3. winxp退市是微软windows操作系统的滑铁卢

    winxp退市是微软windows操作系统的滑铁卢 兵败如山倒,windowsxp退市.宣布微软时代结束,windows将逐步退出中国市场,取而代之将是中国人自己的操作系统.中国人努力.中国人加油,不 ...

  4. Windows操作系统的发展简介

    一.简介    Microsoft Windows,是美国微软公司研发的一套操作系统,它问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级,不但易用, ...

  5. 转:使用DOS命令chcp查看windows操作系统的默认编码以及编码和语言的对应关系

    代码页是字符集编码的别名,也有人称"内码表".早期,代码页是IBM称呼电脑BIOS本身支持的字符集编码的名称.当时通用的操作系统都是命令行界面系统,这些操作系统直接使用BIOS供应 ...

  6. 关于windows操作系统的内核

    操作系统内核.从本质上来讲,它本身也是一个程序.比如windows的内核 ntoskrnl.exe 就是一个我们平常看到的 PE 文件,它的位置位于 \WINDOWS\system32\ntoskrn ...

  7. windows操作系统的快捷键

    编号:1015时间:2016年5月26日09:25:34功能:windows操作系统的快捷键URL:https://www.douban.com/group/topic/5937774/

  8. Windows操作系统的历史

    30 years ago Windows was first released, see how much it has changed回顾了Windows操作系统的历史. 1985, Windows ...

  9. 微软操作系统 Windows Server 2012 R2 官方原版镜像

    微软操作系统 Windows Server 2012 R2 官方原版镜像 Windows Server 2012 R2 是由微软公司(Microsoft)设计开发的新一代的服务器专属操作系统,其核心版 ...

随机推荐

  1. leetcood学习笔记-141-环形列表

    题目描述: 方法一: class Solution(object): def hasCycle(self, head): """ :type head: ListNode ...

  2. Batch - attrib 命令

    原文地址:CMD中使用attrib命令设置文件只读.隐藏属性详解 本文介绍一个cmd下的一个attrib.exe的小程序,它可以用来设置文件的属性.我们知道文件的属性有只读.隐藏.系统.存档和无内容索 ...

  3. sed 一 文本处理工具

    简介 sed 采用的是流编辑模式: 最明显的特点是,在 sed 处理数据之前,需要预先提供一组规则,sed 会按照此规则来编辑数据. sed 会根据脚本命令来处理文本文件中的数据,这些命令要么从命令行 ...

  4. Linux 系统分区与目录介绍

    分区 分区类型 主分区:总共最多只能分四个 扩展分区: 只能有一个,也算作主分区的一种,也就是说主分区加扩展分区最多有四个. 但是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用. 逻辑分区 ...

  5. Windows API DOC

    { /* https://docs.microsoft.com/zh-cn/?view=sql-server-ver15 */ }

  6. Delphi流

      一.流的概念 流简单说是建立在面向对象基础上的一种抽象的处理数据的工具,它定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员只需掌握对流进行操作,而不用关心流的另一头数据的真正流向.其实 ...

  7. NX二次开发-获取面的法向向量UF_MODL_ask_face_data

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_obj.h> #include <u ...

  8. NX二次开发-UFUN输入特征TAG,获取特征所有表达式TAG和个数UF_MODL_ask_exps_of_feature

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> UF_initialize(); //创建块 UF_FEATURE_SIGN S ...

  9. (转)HashMap和HashSet的区别

    HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collection框架的问题不涉及到HashSet和H ...

  10. 剑指offer——08斐波那契数列

    题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 有多种方法,简单的循环.递归.动态规划: class Solutio ...