处理机调度

坚强是说给别人听的谎言 提交于 2019-12-21 23:26:36

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

背景


在多道程序环境下,内存中存在着多个进程,其数目往往多于处理机数目。这就要求系统能按某种算法,动态地将处理机分配给处于就绪状态的一个进程,分配处理机的任务就是由处理机调度程序完成的。调度的实质是一种资源分配

调度的层次


1. 高级调度

又称长程调度或作业调度,调度对象是作业。主要用于多道批处理系统中,而在分时和实时系统中不设置高级调度

2. 低级调度

又称短程调度或进程调度,调度对象是进程(或内核级线程)。进程调度是最基本的一种调度,在多道批处理、分时和实时三种类型的OS中,都必须配置。

3. 中级调度

又称内存调度。引入中级调度的主要目的是:提高内存利用率和系统吞吐量。

调度的目标


共同目标

1. 资源利用率

CPU的利用率 = CPU有效工作时间 / (CPU有效工作时间 + CPU空闲等待时间)

2. 公平性

诸进程都能获得合理的CPU时间,不会发生进程饥饿现象

3. 平衡性

4. 策略强制执行

批处理系统的目标

1. 平均周转时间短

周转时间:从作业被提交给系统开始,到作业完成为止的这段时间间隔(作业周转时间)

它包括四部分:

  1. 作业在外存后备队列上等待调度的时间;

  2. 进程在就绪队列上等待进程调度的时间;

  3. 进程在CPU上执行的时间;

  4. 进程等待I/O操作完成的时间

平均周转时间

带权周转时间:作业周转时间 / 作业实际运行时间

2. 系统吞吐量高

吞吐量:在单位时间内系统所完成的作业数

如果单纯为了获得高的系统吞吐量,应尽量多地选择短作业运行

3. 处理机利用率高

如果单纯为了获得高的处理机利用率,应尽量多地选择计算量大地作业运行

分时系统的目标

1. 响应时间短

2. 均衡性

实时系统的目标

1. 截止时间的保证

2. 可预测性

作业调度算法


在批处理系统中,是以作业为基本单位从外存调入内存的

先来先服务(FCFS)调度算法

该算法既可用于作业调度,也可用于进程调度。

该算法按照作业到达的先后次序来进行调度,优先考虑在系统中等待时间最长的作业,而不管改作业所需执行时间的长短。

缺陷:假设一个短作业前面先到达了一个长作业,那么就导致短作业的响应时间太长了,用户交互的体验会变差

短作业优先(SJF)调度算法

以作业的长短来计算优先级,作业越短,其优先级越高。

这样一来,短作业得到了很好的照顾,但是也引发了一系列的问题

缺点:

  1. 必须预知作业的运行时间
  2. 对长作业非常不利,更严重的是,该算法完全忽视作业的等待时间,可能出现进程饥饿现象,使得长作业得不到CPU资源
  3. 在采用SJF算法时,人机无法实现交互
  4. 完全未考虑作业的紧迫程序,故不能保证紧迫性作业得到及时处理

优先级调度算法(PSA)

该算法既可用于作业调度,也可用于进程调度。

在优先级调度算法中,是基于作业的紧迫程度,由外部赋予作业相应的优先级,调度算法是根据该优先级进行调度的,这样就保证了紧迫性作业优先运行

高响应比优先调度算法(HRRN)

该算法综合考量作业的两个属性:等待时间、要求服务时间,因此既照顾了短作业,又不致使长作业的等待时间过长

实现思路:为每个作业引入一个动态优先级,即优先级随着等待时间的延长而增加

优先权 = (等待时间 + 要求服务时间) / 要求服务时间

由于等待时间与服务时间之和就是系统对该作业的响应时间

顾:

优先权 = 响应时间 / 要求服务时间

缺陷:虽然这个算法实现了较好的折中处理,但是系统的开销也随之增大了,因为每次调度前,都需要重新计算所有等待作业的响应比

进程调度


进程调度机制的三个基本部分:

  1. 排队器
  2. 分派器
  3. 上下文切换器

进程调度方式

  1. 非抢占方式

不会因为时钟中断或者其他原因去抢占当前正在运行进程的处理机,直至该进程完成,或者因发生某事件而被阻塞时,才会把处理机分配给其他进程

在采用非抢占调度方式时,可能引起进程调度的因素可归结为:

  1. 正在执行的进程运行完毕,或因某事件而无法再继续运行
  2. 正在执行的进程因提出I/O请求而暂停执行
  3. 在进程通信或同步过程中,执行了某种原语操作

优点: 实现简单,系统开销小,适合于大多数的批处理系统

缺点: 不能用于分时系统和大多数实时系统

  1. 抢占方式

在现代OS中广泛采用抢占方式

抢占不是一种任意性的行为,必须遵循一定的原则,主要原则有:

  1. 优先权原则
  2. 短进程优先原则
  3. 时间片原则

进程调度算法

时间片轮转调度算法(RR)

每个进程轮流使用CPU资源,且每次都最多只能使用一个CPU时间片,进程的选择就按照FCFS

面临的问题:时间片的长度如何设计?

在RR算法中,时间片的大小对系统性能有很大的影响。时间片越短,固定时间里可运行的进程就越多,可是切换进程是需要消耗指令周期的,也就是说时间片过短会导致大量CPU资源浪费在切换上下文上;而时间片过长,短交互指令响应就会变慢,RR算法便退化为FCFS算法,无法满足短作业和交互式用户的需求。

优先级调度算法

在RR中,做了一个隐含的假设,即系统中所有进程的紧迫性是相同的,但为了能满足实际情况的需要,在进程调度算法中引入优先级,从而形成了优先级调度算法。

优先级调度算法也分抢占式和非抢占式,所谓抢占式,即在处理机执行一个进程时,出现了另一个优先级更高的进程,则调度程序会将处理机分配给新到的优先级高的进程

优先级的类型可分为静态优先级和动态优先级

多队列调度算法

该算法将系统中的进程就绪队列从一个拆分为若干个,将不同类型或性质的进程固定分配在不同的就绪队列,不同的就绪队列采用不同的调度算法,一个就绪队列中的进程可以设置不同的优先级,不同的就绪队列本身也可以设置不同的优先级

多级反馈队列调度算法

目前公认的一种较好的进程调度算法

设置多个就绪队列,并为每个队列赋予不同的优先级。每个队列都采用FCFS算法,在第n队列中采取按RR方式运行。按队列优先级调度,仅当高优先级队列为空时才会运行下一个队列

基于公平原则的调度算法

实时调度


实时调度算法

最早截止时间优先(EDF)算法
最低松弛度优先(LLF)算法
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!