操作系统-Windows操作系统的线程调度了解这些
2021-05-16 06:28
标签:原来 了解 额的 基本 中断 切换 错误 除了 线程调度 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操作系统的线程调度了解这些 标签:原来 了解 额的 基本 中断 切换 错误 除了 线程调度 原文地址:https://www.cnblogs.com/yb38156/p/9749715.html一、几个前提知识点
二、调度时机
三、线程优先级(重要)
四、时间配额:加粗加硬,理解这个概念非常重要
五、调度策略
六、优化方案