操作系统—— 5 调度

在这里插入图片描述

1 背景

在这里插入图片描述

什么时候切换,根据什么原则切换与CPU调度有关
在这里插入图片描述

当状态转换时要进行调度,特别是运行态有关的,比如运行态->阻塞态等。
在这里插入图片描述

  • 非抢占式:确保进程启动后不可被打扰,其他进程需要等待当前运行的进程结束才可以去占用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. 非抢占方式(SPN):不管它,把新来的继续放在就绪队列,不会打断正在执行的进程
  2. 抢占式(SRT):当前运行的进程还剩时间片:8,来的时间片:5,则把正在运行的转换成就绪态,新来的执行

好处:平均等待时间变少
在这里插入图片描述
ci表示进程 i 的执行时间
缺点:

  1. 优先考虑短任务,如果产生了很多个短进程,比较长的会有饥饿现象,长期得不到执行,不满足公平性原则
  2. 不知道执行时间就很难实现这个算法
    在这里插入图片描述

在这里插入图片描述

既然不知道执行时间,那么就进行预估,根据执行历史来预估
tn:当前时间段内占多少时间执行
taon :根据以前情况估计的执行时间
在这里插入图片描述

3.3 最高响应比优先(HRRN)

前面的算法只考虑执行时间,这里多考虑了等待时间
在这里插入图片描述

R越大,等待时间越长,则优先调度

缺点:

  1. 不考虑抢占
  2. 还是不知道进程执行时间

优点:
综合考虑了等待时间和执行时间

3.4 轮循(Round Robin)

在这里插入图片描述

每个进程轮流占用CPU执行
在这里插入图片描述

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

  1. 需要比较多的上下文切换的时间,以让每个进程都能有时间执行
  2. 时间片(时间量子)的设置:太小会切换太频繁,太大会退化为FCFS

在这里插入图片描述

虽然FCFS的公平性(FCFS不一定会对每个进程及时的响应)不如RR,但是从上图看来FCFS好像还更好一点,因为FCFS没有频繁的上下文切换,所以总的等待时间反而会降低

FCFS的效率取决于谁先来,若先来的是长的,就效率低

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

多级队列

在这里插入图片描述

把就绪队列分成很多个不同的队列,不同的队列采取不同的调度算法。比如,最高级队列采取短进程优先,低级队列采取FCFS,考虑进程的特点

但是一开始把进程划好级别后,在执行过程,有可能这个进程会变化,因为进程是个动态的执行过程,某个阶段侧重交互性,下个阶段侧重大的计算处理,不同阶段的特点是不一样的,有没有一种调度算法考虑到进程的执行特点,来动态调整队列中的级别——多级反馈队列

多级反馈队列

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

3.6 公平共享(Fair-share scheduling)

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

3.7 算法评价

在这里插入图片描述

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

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
如果T1不能及时完成,那么os就会认为是不稳定状态,就会重启
T3先来执行,执行到t2时访问共享资源,到t3时,T1来了,开始执行T1,到t4时,T1也要访问共享资源,但该共享资源被T3占用并且未释放,所以转去执行T3,到t5时,T2来了开始执行T2,到t6时,继续执行T3,此时,T2延长了T1的执行时间,T1一直未完成执行,因此会导致重启

解决:

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

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值