操作系统(7)进程--处理机调度:单处理机调度算法、实时调度、多处理机调度

版权声明:版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/lililuni/article/details/83746396

1. 处理机调度概念

处理机调度是操作系统当中用来管理处理机执行能力的这一部分资源的功能。

  1. CPU资源的时分复用
    之前进程切换实际上就是对CPU资源的当前占用者的一种切换,通过这种切换来实现CPU资源的时分复用。

    处理机调度就是从就绪队列中挑选下一个占用CPU运行的进程(单处理机),如果是多处理机的话,就还包含从多个可以用的CPU中挑选就绪进程可使用的CPU资源。
    调度程序是指在内核当中,用来挑选就绪进程的函数。 这里面就包含两个问题,一是调度策略(依据什么原则挑选进程/线程),二是调度时机

  2. 调度时机
    ==1==


2. 调度准则

  1. 调度策略
    ==2==

  2. 处理机资源的使用模式
    进程通常是在CPU计算和I/O操作间交替运行
    ==3==

  3. 比较调度算法好坏的准则

    CPU使用率:CPU处于忙状态的时间百分比
    吞吐量:单位时间内完成的进程数量(这前两个都是基于系统效率来讲,后面的是从用户的角度)
    周转时间:进程从初始化到结束(包括等待)的总时间
    等待时间:进程在就绪队列中的总时间
    响应时间:从提交请求到产生响应所花费的时间(对于交互性应用)

    ==7==


  1. 吞吐量与相应时间的关系
    ==4==
  2. 处理机调度策略的目标
    1. 响应时间目标(响应时间是操作系统的计算延迟)
      ==5==
    2. 吞吐量目标(吞吐量是操作系统的计算带宽)
      ==6==
    3. 公平性目标
      公平的定义:保证每个进程占用相同的CPU时间或者保证每个进程的等待时间相同。公平通常会增加平均响应时间。

3. 调度算法

前三种为关于就绪队列排序的算法,主要是根据先后达到顺序、执行时间、等待时间来排序。
==8==

1. 先来先服务算法(FCFS)

==9==
==10==
在上图中,进程进入等待或者结束状态就意味着进程主动让出CPU,周转时间指的是进程进程从初始化到结束(包括等待)的总时间。

2. 短进程优先算法(SPN)

由于先来先服务算法周转时间抖动的问题,将进程的执行时间也考虑到算法里。短进程优先算法的策略就是选择就绪队列中执行时间最短进程占用CPU进入运行状态。这种算法具有最优平均周转时间
==11==

  1. 缺点
    ==12==
  2. 改进:短剩余时间优先算法(SRT):如果A进程的剩余执行时间短于当前正在执行的进程的剩余时间,则允许CPU资源被A进程抢占。

3. 最高响应比优先算法(HRRN)

在短进程优先算法中,会因为长进程等的时间而出现而出现饥饿问题。就出现了这种算法

在这里插入图片描述


4. 时间片轮转算法(RR)

在该算法中,首先约定一个进程调度的基本时间单位:时间片,它是处理机进行资源分配的基本单位。其基本思路就是按照各个进程按照时间片轮流的占用CPU资源。

  1. 工作原理
    ==14==
  2. 示例
    ==15==
  3. 时间片的长度选择问题
    ==16==

在前面的算法中,每个进程占用CPU多长时间定下来了,排队的先后顺序也定下来了。但是这仍然无法满足应用程序的所有要求。所以为了综合前面的算法,就出现了下面的几种算法。

5. 多级队列调度算法(MQ)

基本思路

  1. 就绪队列被划分为多个独立的子队列,比如说前台需要交互,那么可以用时间轮转算法(时间片设置短些),后台主要是批处理,就可以用先来先服务。
  2. 各个队列拥有自己的调度策略
  3. 队列间的调度采用下图的策略

==17==

6. 多级反馈队列算法(MLFQ)

在多级队列调度算法中,各个队列之间是没有交互的,也就是进程不能在队列间移动,这就出现了该算法。注意,下图中的高优先级对应的是第1级;
==18==
算法特征: CPU密集型进程的优先级会下降很快(这样也就相当于执行时间越长的进程,切换的频率就会越低,开销越小)。I/O密集型的进程会停留在高优先级(因为每次算的时间都很短,时间片没用完)

7. 公平共享算法(FFS)

==19==
==20==


4. 实时调度+多处理器调度

实时调度是对时间有要求的调度算法,多处理器调度是指在有多个处理器的系统里的调度算法

1. 实时调度

  1. 实时操作系统
    时间约束的可预测性就是说在什么情况下,时间约束是可以达到的。
    ==21==

  2. 实时任务以及周期实时任务
    ==22==
    ==23==
    ==24==

  3. 可调度性
    在下图的示例中,系统在执行这三个周期实时任务时是可调度的么?
    ==25==

  4. 实时调度的两种算法
    ==26==


2. 优先级反置

注意:在Unix和Linux系统中,优先级越高,值越小。在Windows中,优先级越高,值越大。这里采用第2种。
基于优先级的可抢占调度算法会出现优先级反置。

  1. T1优先级为40,它正在运行状态中,占用资源L1
  2. 然后,另一个进程T2(优先级为50)进入运行状态,在T2的运行过程中,需要申请T1已占用的资源L1,此时,由于T1已经占用了资源L1,所以T2就处于等待状态。
  3. 假设这时T3抢占CPU进入运行状态,而T1被迫停止了(且资源也没有释放),那么T2就会一直等待T1的资源,就产生了优先反置现象。
    ==29==
  1. 优先级继承
    下图中,在时刻t3,T3进入了阻塞。在时刻t4,占用资源的T3继承了申请资源T1的优先级,T3就会继续执行,释放资源后,T3的优先级就会变为原来的。
    ==30==
  2. 天花板协议
    ==31==

3. 多处理器调度

==27==
==28==

猜你喜欢

转载自blog.csdn.net/lililuni/article/details/83746396