操作系统的几种调度算法

相关时间计算
周转时间 = 作业完成时刻 - 作业到达时刻
等待时间 = 周转时间 - 运行时间
带权周转时间 = 周转时间 / 服务时间
平均周转时间 = 作业周转时间之和 / 作业个数
平均带权周转时间 = 带权周转时间之和 / 作业个数
服务时间:作业的运行时间

调度&分配
1、调度:
调度实现进程/线程选择算法,选中者获得处理器。
2、分配:
分派实现处理器的分配和绑定工作,将处理器分配给被选中的进程或线程,处理进程或线程上下文交换细节。

剥夺式(抢占式)& 非剥夺式(非抢占式)
1、剥夺式(抢占式)优先级调度算法。当一个进程正在处理机上运行时,若有某个更为重要或紧迫的进程进入就绪队列,则立即暂停正在运行的进程,将处理机分配给更重要或紧迫的进程。
2、非剥夺式(非抢占式)优先级调度算法。当一个进程正在处理上运行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在进行的进程继续运行,直到由于其自身原因而主动让出处理机(任务完成或等待事件),才把处理机分配给更为重要或紧迫的进程。

操作系统的任务调度算法用于决定系统中多个进程的执行顺序,不同的调度算法在性能、响应时间等方面表现不同。以下是几种常见的任务调度算法及其特点、优缺点、适用场景:

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

  • 类型:非抢占式调度算法
  • 优先级类型:无优先级
  • 调度依据:按照进程到达的顺序进行调度
  • 核心思想:按照进程到达的顺序进行调度,先到先执行。
  • 适用场景:适用于进程的处理时间相对均匀、资源争用较小的场景。
  • 优点
    • 简单易实现。
    • 没有复杂的计算和管理。
  • 缺点
    • 可能导致“饥饿”现象,即长作业可能一直被短作业抢占。
    • 不适合响应时间要求较高的系统。
    • 会产生较长的平均等待时间,尤其是进程处理时间差异大的情况下。

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

  • 类型:非抢占式调度算法
  • 优先级类型:根据进程的预计执行时间进行优先级排序
  • 调度依据:根据进程的执行时间(Burst Time)进行排序,最短的先执行
  • 核心思想:短作业优先执行,减少平均等待时间。
  • 适用场景:适用于处理时间可以预测且短作业较为常见的场景。
  • 优点
    • 可以最小化平均等待时间。
    • 高效,尤其在大多数作业较短时。
  • 缺点
    • 需要准确知道每个进程的执行时间,这在实际中通常不容易实现。
    • 长作业可能一直无法得到调度(“饥饿”现象)。
    • 不适用于实时性要求高的系统。

三、最短剩余时间优先调度算法(SRTF)

  • 类型:抢占式调度算法
  • 优先级类型:根据进程剩余执行时间进行优先级排序
  • 调度依据:每当新进程到达时,都重新评估剩余执行时间,选择剩余时间最短的进程执行。
  • 核心思想:进程执行过程中若有更短作业到达,则会抢占当前执行的进程。
  • 适用场景:适用于大多数进程执行时间不等且可以精确估算执行时间的场景。
  • 优点
    • 相比于FCFS,能够减少平均等待时间。
    • 对短作业非常有利。
  • 缺点
    • 长作业可能永远无法得到执行(“饥饿”问题)。
    • 实现复杂,需要不断更新剩余时间,增加系统开销。
    • 需要对进程剩余时间进行估算,实际应用中可能不准确。

四、响应比最高者优先调度算法(HRRF)

  • 类型:非抢占式调度算法
  • 优先级类型:动态优先级
  • 调度依据:根据响应比(响应比 = (等待时间 + 服务时间) / 服务时间)来决定执行顺序,响应比高的进程优先执行。
  • 核心思想:通过响应比来平衡进程等待时间与服务时间,综合考虑长作业和短作业。
  • 适用场景:适用于需要在短作业和长作业之间平衡的系统。
  • 优点
    • 比SJF能更好地处理长作业,减少饥饿现象。
    • 响应比高的进程能迅速得到执行,响应时间较短。
  • 缺点
    • 相对复杂,需要计算响应比。
    • 在负载较重的情况下,可能导致系统效率降低。

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

  • 类型:抢占式调度算法
  • 优先级类型:无优先级
  • 调度依据:每个进程被分配一个时间片,当时间片用完后,进程被抢占,调度下一个进程。
  • 核心思想:为每个进程分配一个固定的时间片,使得进程公平共享CPU时间。
  • 适用场景:适用于对响应时间要求较高的多任务环境,如操作系统中的时间共享系统。
  • 优点
    • 公平,保证每个进程都有机会获得CPU时间。
    • 系统响应较快,适用于需要高响应的环境。
  • 缺点
    • 如果时间片过长,则类似于FCFS。
    • 如果时间片过短,则频繁上下文切换导致系统效率低。
    • 对长作业不友好,可能导致较高的平均等待时间。

六、优先级调度算法(PSA)

  • 类型:可以是抢占式或非抢占式调度算法
  • 优先级类型:静态优先级或动态优先级
  • 调度依据:根据进程的优先级进行调度,优先级高的进程优先执行。
  • 核心思想:根据进程的优先级来决定调度顺序,优先级高的进程先执行。
  • 适用场景:适用于需要根据进程的重要性进行调度的场景,如实时操作系统。
  • 优点
    • 能够保证高优先级进程的及时响应,适用于重要任务的调度。
    • 可灵活定义优先级,满足不同需求。
  • 缺点
    • 可能导致低优先级进程饥饿,尤其是在优先级较为固定的情况下。
    • 需要有效的优先级管理策略。

七、多级反馈队列调度算法 (MLFQ)

  • 类型:抢占式调度算法
  • 优先级类型:动态优先级
  • 调度依据:进程根据历史执行情况在多个队列之间移动,通常优先执行处于高优先级队列的进程。
  • 核心思想:根据进程的行为(如CPU使用情况)动态调整优先级,以此提供公平性和响应时间的平衡。
  • 适用场景:适用于多种负载和任务特性的综合性操作系统。
  • 优点
    • 动态调整进程的优先级,适应不同类型的任务。
    • 可以有效平衡长短作业之间的执行,减少饥饿现象。
  • 缺点
    • 实现复杂,需要管理多个队列。
    • 对于实时性要求极高的应用,可能不如专门的实时调度算法。

总结

操作系统的几种调度算法_第1张图片

不同的任务调度算法适用于不同类型的系统和应用。选择合适的调度算法需要根据系统的需求,如响应时间、吞吐量、公平性、任务的性质(长任务与短任务)等因素进行综合考虑。在现代操作系统中,通常采用多种调度策略结合的方式,以平衡不同需求。

你可能感兴趣的:(linux,服务器,大数据)