操作系统 | CPU调度

背景

CPU调度

  • 上下文切换
    • 切换CPU的当前任务,从一个进程/现成到另一个
    • 保存当前进程/线程在PCB/TCP中的执行上下文(CPU状态)
    • 读取下一个进程/线程的上下文
  • CPU调度
    • 从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程
    • 调度程序:挑选进程/线程的内核函数(通过一些调度策略)
    • 什么时候进行调度

调度时间

操作系统 | CPU调度
从一个状态到另一个状态变化时会触发一次调度
重点是运行相关的一些状态,例如从就绪态到运行态,从运行态到等待状态

操作系统 | CPU调度
大部分情况下调度应用程序,程序在运行过程中以用户态进程形式存在。早期操作系统,非抢占式调度策略,一旦启动进程,那么从开始到结束不允许被打断,这种情况导致等很长时间,效率可能会不高。

上面策略主要针对用户态的进程,对于内核而言,当一个用户进程执行系统调用,如果这个系统调用在内核中不会导致这个进程处于等待状态,他还是处于运行状态的时候,当这个系统调用正常返回的时候一定会返回到发起这个系统调用的进程继续执行,也就是内核中不会出现抢断现象。在内核中发生一次切换,到另一个内核中执行

目前的操作系统,支持内核中抢占,系统更加灵活高效

调度准则

调度策略

操作系统 | CPU调度

程序执行模型

操作系统 | CPU调度

比较调度算法的准则

操作系统 | CPU调度

吞吐量 VS 延迟

操作系统 | CPU调度
操作系统 | CPU调度

公平的目标

操作系统 | CPU调度

调度算法

操作系统 | CPU调度
常见简单的调度算法
操作系统 | CPU调度
操作系统 | CPU调度
操作系统 | CPU调度
操作系统 | CPU调度
操作系统 | CPU调度
操作系统 | CPU调度
通过预估,时间历史上来看,预测下一次执行时间
操作系统 | CPU调度
操作系统 | CPU调度
相比上一个考虑到进程等待时间
操作系统 | CPU调度
操作系统 | CPU调度
希望四个进程轮流占用CPU,每个进程都有机会占用CPU时间执行
操作系统 | CPU调度
操作系统 | CPU调度
操作系统 | CPU调度
操作系统 | CPU调度
IO密集的任务可以尽快的进行,也就是交互性比较多的可以优先执行,需要很多资源的进程可以跑的慢一点
操作系统 | CPU调度
FSS重点强调公平,由于计算机系统面想服务器之类的,需要多用户共享,这里要考虑不同用户开启不同进程数,用户是平等的,在用户级别实现对资源公平的共享,而不是进程这个级别。
操作系统 | CPU调度
评价方法
操作系统 | CPU调度

实时调度

实时系统

操作系统 | CPU调度
操作系统 | CPU调度

可调度行

操作系统 | CPU调度
衡量标准
操作系统 | CPU调度
这个任务重复三次,执行一段时间然后等待到下一次,周期是5
操作系统 | CPU调度
静待优先级调度,在任务执行前确定优先级
动态优先级调度随着执行过程动态的变化

单调数据(RM)

截止日期最早优先(EDF)

操作系统 | CPU调度

多处理器调度

操作系统 | CPU调度

优先级反转

操作系统 | CPU调度
操作系统 | CPU调度
正常三个进程执行,T1>T2>T3按照优先级调度

T1如果不能及时完成,系统会判定操作系统不稳定,然后重启

T3开始执行,t1-t2,执行到t3,T1出现,开始执行,执行到结束,要去访问被T3占用的共享资源,但是T3占用资源还没有释放,等待T3共享资源执行完毕,T3从t4-t5,到t5时间,T2来了,抢占T3执行T2,T1虽然比T1优先级高,但是受制于T2的执行时间,因为T2抢占了T3的CPU资源执行,而T1又必须等待T3,导致T1 的执行时间被T2延长

操作系统 | CPU调度
优先级继承办法

T3访问了共享资源,T1也需要访问时候,因为需要等待T3执行完毕,所以T3的优先级得到动态的提升,和T1一样,这种情况下,T2不能抢占T3
操作系统 | CPU调度