操作系统—— 5 调度

1 背景

在这里插入图片描述
什么时候切换,根据什么原则切换与CPU调度有关
在这里插入图片描述
当状态转换时要进行调度,特别是运行态有关的,比如运行态->阻塞态等。
在这里插入图片描述
非抢占式:确保进程启动后不可被打扰,效率不高
抢占式:常用的调度策略(针对的是用户态的进程)。内核是否可以抢占?当一个用户进程执行一个系统调用,内核中不会导致这个进程处于等待状态,还是处于运行状态,返回的还是发起这个系统调用的进程,也就是说内核中不会发生抢占现象
现在有的系统也可以做到内核里的抢占

2 调度原则

2.1 调度策略

2.2 程序执行模型

在这里插入图片描述
针对一个进程,有的时候CPU会很忙,有的时候会空闲下来(如I/O操作时),我们希望,当CPU空闲下来时,其他进程来使用CPU,以充分利用CPU

2.3 比较调度算法的准则

调度算法的评价指标:
在这里插入图片描述
CPU使用率:越高,系统效率越好
吞吐量:越高,进程的效率越好
周转时间:启动进程到完成进程,即等待时间+服务时间
等待时间:处于就绪态的进程等多少时间才到运行态到CPU运行
响应时间:外设发出一个请求,该请求被进程处理完毕,响应时间越快越好

2.4 吞吐量vs延迟

在这里插入图片描述
低延迟:响应时间快
高带宽:吞吐量很高
都可以认为是很快的体现

2.5 公平的目标

在这里插入图片描述
以上的指标,鱼和熊掌不可兼得
在这里插入图片描述
在这里插入图片描述
期望os通过调度算法给每个进程能够公平的得到CPU的服务,即得到CPU的时间大致是公平的,等待执行的时间也大致是公平的

3 调度算法

介绍大致3种:

  1. 通常os中的基本的调度算法
  2. 嵌入式中实时的特殊的调度算法
  3. 多核(CPU)的调度算法
    在这里插入图片描述

3.1 先来先服务(FCFS)

在这里插入图片描述
在这里插入图片描述
优点:简单(先来的在链表头,后来的在链表尾)
缺点:平均等待时间和周转时间都会比较长,受制于前面的进程的执行时间,未考虑抢占,响应时间也会受影响

3.2 短进程优先(SPN/SRT)

在这里插入图片描述
当来了一个进程比正在运行的进程还要短,则有2个策略:

  1. 非抢占方式:不管它,把新来的继续放在就绪队列
  2. 抢占式(SRT):当前运行的进程还剩时间片:8,来的时间片:5,则把正在运行的转换成就绪态,新来的执行

好处:平均等待时间变少
在这里插入图片描述
缺点:

  1. 优先考虑短任务,比较长的会有饥饿现象,长期得不到执行,不满足公平性原则
  2. 不知道执行时间就很难实现这个算法
    在这里插入图片描述
    在这里插入图片描述
    既然不知道执行时间,那么就进行预估,根据执行历史来预估
    tn:当前时间段内占多少时间执行
    taon :根据以前情况估计的执行时间
    在这里插入图片描述

3.3 最高响应比优先(HRRN)

在这里插入图片描述
R越大,等待时间越长,则优先调度
不考虑抢占
还是不知道进程执行时间
考虑了等待时间

3.4 轮循(Round Robin)

在这里插入图片描述
每个进程轮流使用CPU
在这里插入图片描述
假设给每个进程分配的时间片都是20,当执行P1时,P1需要53时间,而他只能执行20时间,P2只需要8就可以执行完成,之后执行P3
在这里插入图片描述

  1. 需要比较多的上下文切换的时间,以让每个进程都能有时间执行
  2. 时间片(时间量子)的设置:太小会切换太频繁,太大会退化为FCFS
    (瞬间画面清晰大法)
    在这里插入图片描述
    FCFS的公平性不如RR
    FCFS的效率取决于谁先来,若先来的是长的,就效率低

3.5 多级反馈队列(MLFQ)(动态调整)

在这里插入图片描述
把就绪队列分成很多个不同的队列,不同的队列采取不同的调度算法。比如,最高级队列采取短进程优先,低级队列采取FCFS,考虑进程的特点
在这里插入图片描述
加入一个进程最开始是交互进程(i/O密集型),其优先级较高,会有等待时间,等待时间越长,优先级提的越高。做完交互后,开始大量计算,可能会占用CPU时间较长(CPU密集型),时间片会用的很快,一旦用完1个时间片,就把他降到下一个优先级,时间片越多,优先级越低。
需要交互的进程放在较高优先级处,使得一旦得到它所需要的,就能立即响应执行。

3.6 公平共享(Fair-share scheduling)

强调公平
面向服务器(科学计算),多人多用户共享1台计算机,有的用户开得进程较多,有的开的少,要在用户层面实现公平共享,对CPU的公平的调用
最新的linux采取了这种该算法
在这里插入图片描述

3.7 算法评价

在这里插入图片描述
建立数学模型,如建立一个队列,建立一个模拟器来讨论算法如何
更期望在真实系统中跑,才能看出实际的影响,毕竟调度算法与硬件也有关系
在这里插入图片描述

4 实时调度

4.1 实时系统

在这里插入图片描述

  • 用在工业控制,如火车、机床、嵌入式工厂里需要确保某些任务在规定时间内完成
  • 实时系统的特点:确定性和可预测性
  • 分为:
    • 强实时系统:需要在保证的时间内完成重要的任务,必须完成(如果重要任务不按时完成会产生灾难性后果,水坝不及时放掉水就会有严重后果)
    • 弱实时系统:要求重要的进程优先级跟高,尽量完成,非必需(在视频,每秒60帧,不会产生太严重的后果)

衡量1个进程能否完成实质性的需求,用一些术语来描述它:
在这里插入图片描述
Released time : 让进程处于就绪的时间
Relative deadline : 相对时间,每个时间段内完成特定任务
Execution time : 执行的时间
Absolute deadline : 最终截至时间,执行结束的时间不能超出这个时间
在这里插入图片描述
上图,

  • 周期p=5,
  • 蓝色为执行时间,不能超出p

在这里插入图片描述

4.2 可调度性

在这里插入图片描述
静态优先级调度:在任务执行前就把优先级确定了,根据优先级选择任务,在规定时间内执行完成
动态优先级调度:任务随着执行的过程,其周期会变化,不同时刻其优先级会有区别

4.3 单调速率(RM)

在这里插入图片描述
开始前就确定优先级,执行周期越短优先级越高

4.4 截止日期最早优先(EDF)

在这里插入图片描述

5 多处理器调度(多CPU)

在这里插入图片描述
os需考虑:

  • 把进程放在那个CPU
  • 平衡每个CPU的工作量

6 优先级反转

在这里插入图片描述
在这里插入图片描述
优先级: T1>T2>T3
T3先来执行,执行到t2时访问共享资源,到t3时,T1来了,开始执行T1,到t4时,T1也要访问共享资源,但该共享资源被T3占用并且未释放,所以转去执行T3,到t5时,T2来了开始执行T2,到t6时,继续执行T3,此时,T1一致未完成执行
在这里插入图片描述
解决:

  1. 优先级继承:当T1也要访问共享资源时,把T3的优先级提到和T1一致,此时,再来T2,T2也不会执行

在这里插入图片描述
2. 优先级天花板:先统计进程需要哪些资源,把这些资源也定优先级,让优先级等于最高进程调用该资源时的优先级

发布了16 篇原创文章 · 获赞 0 · 访问量 238

猜你喜欢

转载自blog.csdn.net/qq_42713936/article/details/105210927
今日推荐