进程调度

简介: 进程调度

调度算法


背景



cpu调度


  • 从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程
  • 调度程序: 挑选进程/线程的内核函数(通过一些调度策略)
  • 什么时候进行调度?


上下文切换


  • 切换CPU的当前任务, 从一个进程/线程到另一个
  • 保存当前进程/线程在PCB/TCB中的执行上下文(CPU状态)
  • 读取下一个进程/线程的上下文


调度的条件(满足一个即可)


  • 一个进程从运行状态切换到等待状态
  • 一个进程被终结


不可抢占


  • 调度程序必须等待事件结束


可以抢占


  • 调度程序在中断被相应后执行
  • 当前的进程从运行切换到就绪, 或者一个进程从等待切换到就绪
  • 当前运行的进程可以被换出


调度准则



调度策略


  • 人们通常都需要”更快”的服务什么是更快?

传输文件时的高带宽

玩游戏时的低延迟

这两个因素是独立的


  • 和水管类比

低延迟: 喝水的时候想要一打开水龙头水就流出来

高带宽: 给游泳池充水时希望从水龙头里同时流出大量的水,并且不介意是否存在延迟


我们的目标:


  • 减少响应时间: 及时处理用户的输出并且尽快将输出提供给用户
  • 减少平均响应时间的波动: 在交互系统中,可预测性比高差异性低平均更重要
  • 增加吞吐量: 减少开销(操作系统开销,上下文切换);系统资源的高效率用(CPU,IO设备)
  • 减少等待时间: 减少每个进程的等待时间


公平的目标举例:


  • 保证每个进程占用相同的CPU时间
  • 这公平嘛?如果一个用户比其他用户运行更多的进程怎么办
  • 举例:
  • 保证每个进程都等待相同的时间
  • 公平通常会增加平均响应时间


程序执行模型执行模型 :


1687953410411-e68bfe53-256e-42ad-9317-ee583042d39b.png


程序在CPU突发和IO中交替


  • 每个调度决定都是关于在下一个CPU突发时将哪个工作交给CPU
  • 在时间分片机制下,线程可能在结束当前CPU突发前被迫放弃CPU


评价指标


  1. **CPU使用率: **CPU处于忙状态所占时间的百分比
  2. **吞吐量: **在单位时间内完成的进程数量
  3. **周转时间: **一个进程从初始化到结束,包括所有等待时间所花费的时间
  4. **等待时间: **进程在就绪队列中的总时间
  5. **响应时间: **从一个请求被提交到产生第一次相应所花费的总时间
  6. 各指标在操作系统上的表现: 低延迟调度增加了交互式表现(如果移动了鼠标,但是屏幕中的光标却没动,我们可能会重启电脑)
  7. 操作系统需要保证低吞吐量不受影响(我想要结束长时间的编程,所以操作系统必须不时进行调度,即使存在许多交互任务)
  8. 吞吐量是操作系统的计算带宽
  9. 响应时间是操作系统的计算延迟


调度算法


FCFS(先来先服务)First come, First Served


如果进程在执行中阻塞,队列中的下一个会得到CPU


优点: 简单


缺点:


  • 平均等待时间波动较大
  • 花费时间少的任务可能排在花费时间长的任务后面
  • 可能导致IO和CPU之间的重叠处理(CPU密集型进程会导致IO设备闲置时,IO密集型进程也在等待)

1687954526984-d2d601e2-7443-4149-8d70-420e1622b68d.png


SPN(SJF) SRT(短进程优先(短作业优先)短剩余时间优先)


[最优平均等待时间]Shortest Process Next(Shortest Job First) Shortest Remaining Time选择预测的完成时间来将任务入队可以是抢占的或者是不可抢占的可能导致饥饿


  • 连续的短任务流会使场任务饥饿
  • 短任务可用时的任何场任务的CPU时间都会增加平均等待时间
  • 需要预测未来


怎么预估下一个CPU突发的持续时间

简单的解决: 询问用户

如果用户欺骗就杀死进程

如果不知道怎么办?1687954569021-d035846a-4dd1-488b-b2ae-83ab382fbbd7.png1687955310340-49b88b6b-a207-4176-b066-774693a82246.png


预估执行时间的算法: T(n+1) = atn + (1- a)at(n-1) + (1-a)(1-a)at(n-2) + ….

1687955214281-efd4c7e1-5e63-4460-8947-20f17cdade2f.png


HRRN(最高响应比优先)Highest Response Ratio Next

  • 在SPN调度的基础上改进
  • 不可抢占
  • 关注进程等待了多长时间
  • 防止无限期推迟
  • R = (w + s ) / s


1687955475868-2b1a40e1-5473-45b1-8407-e1f0ae7d00f2.png

Round Robin(轮循)


举例 :

1687955523352-a45e13c5-4558-4367-b3e6-27a213849c44.png


使用时间切片和抢占来轮流执行任务


在叫做量子(或者时间切片)的离散单元中分配处理器。 时间片结束时,切换到下一个准备好的进程

花销: 额外的上下文切换

时间量子太大:


  • 等待时间过长
  • 极限情况退化成FCFS
  • 时间量子太小:


反应迅速

吞吐量由于大量的上下文切换开销受到影响


  • 目标:


选择一个合适的时间量子

经验规则: 维持上下文切换开销处于1%以内


Multilevel Feedback Queues(多级反馈队列)


优先级队列中的轮循就绪队列被划分成独立的队列: 比如前台(交互),后台(批处理)每个队列拥有自己的调度策略: 比如前台(RR),后台(FCFS)调度必须在队列间进行:


  • 固定优先级: 先处理前台,然后处理后台;可能导致饥饿
  • 时间切片: 每个队列都得到一个确定的能够调度其进程的CPU总时间;比如80%使用RR的前台,20%使用FCFS的后台
  • 一个进程可以在不同的队列中移动例如,n级优先级-优先级调度在所有级别中,RR在每个级别中


时间量子大小随优先级级别增加而增加

如果任务在当前的时间量子中没有完成,则降到下一个优先级


  • 优点: CPU密集型任务的优先级下降很快;IO密集型任务停留在高优先级


Fair Share Scheduling(公平共享调度)


FSS控制用户对系统资源的访问


  • 一些用户组比其他用户组更重要
  • 保证不重要的组无法垄断资源
  • 未使用的资源按照每个组所分配的资源的比例来分配
  • 没有达到资源使用率目标的组获得更高的优先级


实时调度



多处理器调度



优先级反转




目录
相关文章
|
7天前
|
算法 调度
深入理解操作系统的进程调度策略
【5月更文挑战第27天】 在现代操作系统中,进程调度策略的选择对系统性能有着至关重要的影响。本文将探讨操作系统中常见的进程调度算法及其优缺点,并分析如何根据不同的应用场景选择合适的调度策略。通过对比先来先服务(FCFS)、短作业优先(SJF)和轮询调度(RR),我们深入了解每种策略背后的设计哲学及其在实际应用中的表现。
|
5天前
|
负载均衡 算法 调度
深入理解操作系统:进程管理与调度策略
【5月更文挑战第29天】 在现代计算机系统中,操作系统的核心职能之一是高效地管理和调度进程。本文旨在探讨操作系统中进程管理的基础概念、调度算法的重要性以及它们如何影响系统的整体性能。我们将从进程的生命周期入手,解析创建、执行、暂停、终止等过程,并深入讨论不同的调度策略如先来先服务(FCFS)、短作业优先(SJF)和多级反馈队列(MLQ)。通过比较这些策略在不同场景下的表现,本文将提供一个全面的视角,帮助读者理解操作系统如何在保证公平性和效率间取得平衡。
|
6天前
|
算法 调度
深入理解操作系统之进程调度算法的设计与实现
【5月更文挑战第27天】 在多任务处理的现代操作系统中,进程调度算法是核心组件之一,负责决定哪个进程将获得CPU资源。本文不仅探讨了几种经典的进程调度算法,包括先来先服务(FCFS)、短作业优先(SJF)和轮转调度(RR),还分析了各自的优势、劣势及适用场景。此外,文章将深入讨论如何根据系统需求设计自定义调度算法,并提供了基于伪代码的实现示例。最后,通过模拟实验比较了这些算法的性能,以指导读者在实际操作系统设计时的选择与优化。
|
7天前
|
机器学习/深度学习 人工智能 负载均衡
深入理解操作系统之进程管理与调度优化
【5月更文挑战第27天】 本文旨在探索操作系统的核心机制之一——进程管理,特别是进程调度的策略与优化。通过分析不同调度算法的特点、性能指标和应用场景,我们揭示了现代操作系统在多核处理器环境下面临的挑战及应对策略。文章不仅总结了经典的调度理论,还讨论了实时性、能效比以及用户体验等维度下的调度优化方法。此外,结合最新的研究动态,探讨了机器学习技术如何被整合进进程调度策略中,以实现更为智能和自适应的资源管理。
|
4天前
|
算法 调度 UED
深入理解操作系统之进程调度策略
【5月更文挑战第30天】 在操作系统的核心功能中,进程调度策略扮演着至关重要的角色。它决定了处理器资源如何高效合理地分配给众多竞争的进程。本文将深入探讨几种常见的进程调度算法,包括先来先服务(FCFS)、短作业优先(SJF)以及多级反馈队列(MLQN),并分析它们在不同场景下的性能表现和适用性。通过模拟实验数据和性能对比,我们将揭示各调度策略的优势与局限,为系统设计者提供选择指南。
|
4天前
|
监控 算法 调度
深入理解操作系统的进程调度策略
【5月更文挑战第30天】 在现代操作系统中,进程调度策略是其核心功能之一,它直接关系到系统资源的利用效率和用户体验。本文将详细解析几种常见的进程调度算法——从简单的先来先服务(FCFS)到复杂的多级反馈队列(MLFQ),并探讨各自的优劣及适用场景。通过比较它们在不同工作负载下的表现,我们旨在为系统设计者提供选择合适调度策略的参考依据。
|
4天前
|
算法 API 调度
深入理解操作系统:进程调度与性能优化
【5月更文挑战第30天】在多任务操作系统中,进程调度是核心功能之一,它直接影响系统的整体性能和用户体验。本文深入探讨了操作系统中的进程调度机制,包括调度策略、调度算法以及它们对系统性能的影响。同时,提出了几种性能优化技术,旨在提高系统的响应速度和资源利用率。通过分析不同场景下的调度需求,本文还讨论了如何根据具体应用定制进程调度策略,以达到最优的系统表现。
|
4天前
|
算法 Linux 调度
深入理解操作系统:进程管理与调度策略
【5月更文挑战第30天】 在现代计算环境中,操作系统的进程管理是确保多任务高效运行的关键。本文将详细探讨操作系统中进程的概念、进程状态转换以及进程调度策略。通过对这些概念的分析,我们能够更好地理解操作系统如何协调和管理多个进程,以实现资源的有效利用和系统的稳定运行。
|
5天前
|
负载均衡 算法 Linux
深入理解操作系统:进程调度的策略与实现
【5月更文挑战第29天】在多任务操作系统中,进程调度是核心功能之一,它决定了哪个进程将获得CPU时间以及何时获得。有效的调度策略能够显著提升系统性能、降低响应时间并增强用户体验。本文将探讨操作系统中常用的几种进程调度算法,包括先来先服务(FCFS)、短作业优先(SJF)、轮转调度(RR)以及多级反馈队列,分析各自的优势和局限性。同时,文章还将讨论如何在现代操作系统如Linux中实现这些调度策略,并通过实际案例展示调度策略对系统行为的影响。
|
5天前
|
负载均衡 算法 调度
深入理解操作系统之进程调度策略
【5月更文挑战第29天】 在多任务操作系统中,进程调度策略是核心机制之一,负责决定哪些可运行的进程将获得处理器时间以及分配多少时间。本文深入探讨了几种经典的进程调度算法,包括先来先服务(FCFS)、短作业优先(SJF)、轮转调度(RR),并分析了各自的性能指标如响应时间、等待时间和吞吐量。文章还将讨论现代操作系统中实现这些策略时的优化技术,如多级队列和多核处理。最后,我们评估了各种策略在现实世界操作系统中的应用与表现,为系统设计者提供理论参考。