Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >处理器是如何调度进程的?

处理器是如何调度进程的?

作者头像
陆道峰
发布于 2020-06-16 09:19:16
发布于 2020-06-16 09:19:16
1.9K0
举报

本文是操作系统系列第四篇文章,介绍处理机调度进程相关算法。调度进程的算法和调度框架(Kubernetes)类似,可以相互借鉴。

概念

发生进程切换时,本质是CPU资源占用者间的切换。此时需要保存当前进程在PCB中的执行上下文(CPU状态),然后恢复下一个进程的执行上下文。

处理机调度涉及两个方面,一是选择进程:从就绪队列中挑选下一个占用CPU运行的进程。二是选择CPU资源:从多个可用CPU中挑选就绪进程可使用的CPU资源。

准则

调度策略是指确定如何从就绪队列中选择下一个执行进程,可以理解为调度算法。评价算法的基准有以下几个:

1.CPU使用率:CPU处于忙状态的时间百分比2.吞吐量:单位时间内完成的进程数量3.周转时间:进程从初始化到结束(包括等待)的总时间4.就绪等待时间:进程在就绪队列中的总时间5.响应时间:从提交请求到产生响应所花费的总时间

另外,处理机调度需要保证公平:

1.保证每个进程占用相同的CPU时间2.保证每个进程的等待时间相同

算法

先来先服务算法(FCFS: First Come, First Served)

FCFS依据进程进入就绪状态的先后顺序排列,它简单、易于实现。

但是也存在一些缺点,以上图为例,进程到达次序不同,对周转时间影响较大。总结如下:

1.平均等待时间波动较大:短进程可能排在长进程后面2.I/O资源和CPU资源的利用率较低:CPU密集型进程会导致I/O设备闲置时,I/O密集型进程也等待

短进程优先算法(SPN)

SPN是FCFS算法的改进,它选择预期执行时间最短进程占用CPU进入运行状态。SPN算法的优点是具有最优平均周转时间。缺点:

1.可能导致饥饿:连续的短进程流会使长进程无法获得CPU资源2.需要预知未来:如何评估进程执行时间的长短?一个方法是基于历史数据估计

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

选择就绪队列中响应比R值最高的进程,R计算方法如下: R=(w+s)/s w: 等待时间(waiting time) s: 执行时间(service time)

时间片轮转算法(RR: Round Robin)

RR算法是对FCFS的改进,在FCFS的基础上加入对进程执行时间(CPU时间片)的限制。当进程的时间片用完后,按照FCFS的规则选择下一个进程。

上图是RR算法的示意图,三个进程按照P1、P2和P3的顺序到达,执行时间分别为53、16和68。基准数据如下:

1.等待时间•P1=(56-20)+(96-76)=56•P2=(20-0)=20•P3=(36-0)+(76-56)+(109-96)=56+13=692.平均等待时间:(56+20+69)/3=48.33

RR算法主要开销在进程的上下文切换,重点是选择合适的时间片(delta)。

•delta过大,进程的等待时间过长,易退化成FCFS•delta过小,反应快,但是上下文切换频繁,影响系统吞吐量

根据经验规则,delta应保证上下文切换开销处于1%以内。

多级队列调度算法(MQ)

该算法的思想是把就绪队列根据更细的维度划分成不同的子队列,不同队列选择不同的算法。如前台交互就绪队列后台批处理就绪队列,前台使用RR,后台使用FCFS。

多级反馈队列算法(MLFQ: Multi Level Feedback Queues)

将就绪队列中进程按照不同的优先级分成不同的队列,优先级越高时间片反而越小,进程可以在不同的队列间移动,如进程在当前的时间片没有完成,则降到下一个优先级。

MLFQ算法中,CPU密集型进程的优先级下降很快,I/O密集型进程停留在高优先级。

公平共享调度算法(FSS: Fair Share Scheduling)

FSS强调资源的公平分配,对用户进行分组。用户组比其他用户组更重要,则分配更多的资源。未使用的资源按比例分配,没有达到资源使用率目标的组获得更高的优先级,这样就避免不重要的用户垄断资源。

传统算法总结

算法

特点

先来先服务算法(FCFS)

不公平,平均等待时间较差

短进程优先算法(SPN)

不公平,平均等待时间较差需要精确预测计算时间可能导致饥饿

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

可能导致饥饿不可抢占

时间片轮转算法(RR)

可能导致饥饿

多级反馈队列算法(MLFQ)

多种算法的集成

公平共享调度算法(FSS)

强调公平

实时调度

对时间的要求很严格,要求操作系统在一定时间内完成相应功能。它的性能指标有两个:

•时间约束的及时性(deadlines)•速度和平均性能相对不重要

实时操作系统可分为两类:

•强实时操作系统:指定的时间内必须完成重要的任务•弱实时操作系统:重要进程有高优先级,要求尽量但非必须完成

实时调度算法:

1.速率单调调度算法(RM, Rate Monotonic)•通过周期安排优先级•周期越短优先级越高•执行周期最短的任务2.最早截止时间优先算法(EDF, Earliest Deadline First)•截止时间越早优先级越高•执行截止时间最早的任务

多处理机调度

即多个处理机组成一个多处理机系统,处理机间可负载共享。

对称多处理器(SMP, Symmetric multiprocessing)调度

该调度中,每个处理器运行自己的调度程序,调度程序对共享资源的访问需要进行同步。在分配进程时有静态进程分配和动态进程分配。

1.静态进程分配•进程从开始到结束都被分配到一个固定的处理机上执行•每个处理机有自己的就绪队列•调度开销小•各处理机可能忙闲不均2.动态进程分配•进程在执行中可分配到任意空闲处理机执行•所有处理机共享一个公共的就绪队列•调度开销大•各处理机的负载是均衡的

优先级反置

优先级反置是一种现象,发生在基于优先级的调度算法中,即高优先级进程等待低优先级进程的现象。主要原因是资源的占用现象,低优先级占用资源,等待资源使用结束后才能释放资源,需要相同资源的高优先级进程就需要等待。

下面介绍两个解决方法。

1.优先级继承(Priority Inheritance):简单说就是升高占用资源的低优先级进程的优先级,升高成等待资源的高优先级进程。2.优先级天花板协议(priority ceiling protocol):占用资源进程的优先级和所有可能申请该资源的进程的最高优先级相同。

总结

本文介绍了操作系统中调度进程的算法,包括单处理器和多处理器。调度算法的应用很广泛,从操作系统中的进程到Kubernetes中的Pod调度等,值得深入学习,顺便给自己埋个坑,希望完成调度算法系列...

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与系统 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
13-常见调度算法
综上即FCFS算法对长作业有利,对短作业不利(例如上面例题种P3作业的带权周转时间达到了很大的8)
Ywrby
2022/10/27
2.3K0
13-常见调度算法
进程调度
[最优平均等待时间]Shortest Process Next(Shortest Job First) Shortest Remaining Time选择预测的完成时间来将任务入队可以是抢占的或者是不可抢占的可能导致饥饿
用户11097514
2024/05/31
2010
进程调度
操作系统学习笔记-9:调度
调度研究的问题是:面对有限的资源,如何处理任务执行的先后顺序。对于处理机调度来说,这个资源就是有限的处理机,而任务就是多个进程。故处理机调度研究的问题是:面对有限的处理机,如何从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,从而实现进程的并发执行。处理机调度共有三个层次,这三个层次也是一个作业从提交开始到完成所经历的三个阶段。
Chor
2020/04/20
1.2K0
操作系统学习笔记-9:调度
操作系统中进程调度算法详解及例题解释「建议收藏」
用于作业调度时,考虑的是哪个作业先到达后备队列;用于进程调度时,考虑的是哪个进程先到达就绪队列
全栈程序员站长
2022/11/10
1.7K0
操作系统中进程调度算法详解及例题解释「建议收藏」
进程调度
CPU调度是操作系统的基本功能。每当CPU空闲的时候,操作系统就会从就绪队列中选择一个程序来执行。进程选择由短期调度程序执行。
zy010101
2019/07/10
1K0
操作系统:第三章 处理机调度与死锁
高级调度: 又称作业调度或长程调度。调度对象是作业,按照进程调度算法,决定作业的调度时机,主要用于多道批处理系统。
Here_SDUT
2022/08/08
9540
操作系统:第三章 处理机调度与死锁
操作系统第四篇【处理机调度】
处理机调度基本概念 在处理机调度上可以分为三个层次,级别从低到高 哪些资源分给CPU(低) 选择哪些进程到外存中(中) 哪些作业放入内存(高) 处理机的调度实际上就是用不同的算法来将我们的作业合理分配,提高CPU的利用率。达到公平性、平衡性。 先来先服务算法FCFS 按照作业提交或进程变为就绪状态的先后次序,分派CPU; 当前作业或进程占用CPU,直到执行完或阻塞,才出让CPU(非抢占方式)。 在作业或进程唤醒后(如I/O完成),并不立即恢复执行,通常等到当前作业或进程出让CPU。是最简单的算法。 谁先来,
Java3y
2018/06/11
1.7K0
作业调度算法
  在多道程序环境中,主存中有着多个进程,其数目往往多于处理机数量。这就要求系统能按照某种算法动态地把处理机分配给就绪队列中的一个进程,使之执行,分配处理机的任务是由处理机调度程序完成的。 处理机调度   在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对于批量型作业而言,通常需要经历作业调度(也称为高级调度)和进程调度(也称为低级调度)两个过程才能获得处理机;而对于终端型作业而言,通常只需要经过进程调度就可以获得处理机。除了上述两种调度,操作系统中往往也设置了中级调度,用来提
Mister24
2018/05/14
4.2K0
操作系统之调度
调度研究的问题:当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是调度研究的问题。
kif
2023/02/27
8930
进程的调度算法有哪些
进程的调度算法是操作系统用来决定哪个进程可以执行的一种策略,常见的进程调度算法包括:
程序员朱永胜
2023/12/05
7350
操作系统笔记【处理机调度知识】
CPU 在计算机系统中是非常重要的,但是早期的时候非常简单,是因为它像其他资源一样被一个作业所独占,不存在什么处理及分配或者调度的问题,但是随着各种多道程序的设计以及不同类型的操作系统的出现,不同的CPU的管理方法将会为用户提供不同性能的操作系统
BWH_Steven
2020/06/03
1.4K0
进程调度算法
**高响应比优先算法规则**:在每次调度时先计算各个作业/进程的*相应比*,选择*相应比最高的*作业/进程为其服务
用户3906509
2020/06/12
2.1K0
操作系统概念学习笔记 10 CPU调度
多道程序操作系统的基础。通过在进程之间切换CPU,操作系统可以提高计算机的吞吐率。
种花家的奋斗兔
2020/11/12
1.4K0
常用进程调度算法_进程调度算法例题
所谓进程调度方式,是指当某个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,此时应如何分配处理机。通常有以下两种进程调度方式:
全栈程序员站长
2022/11/10
1.6K0
常用进程调度算法_进程调度算法例题
操作系统-进程和线程
进程线程的区别 1、进程是什么? 是具有一定独立功能的程序、它是系统进行资源分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独立运行的一段程序。 当进程激活时,操作系统就将系统的资源包括内存、I/O和CPU等分配给它,使它执行。 2、线程又是什么? 线程进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源。每一个线程对应于它在进程中的一个函数,也就是内存中的代码段,多个线程执行时CPU会根据它们的优先级分配时间,使它们完成自己的功能。 一般来说,进程中至少一个线程,一个主线程和其他线程组成一个进程。多个线程的目的在于分享CPU的时间片,从而完成并行任务。
用户2909867
2018/08/22
1.1K0
处理机调度及常用的几个调度算法
当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是 “调度” 研究的问题。
wsuo
2020/11/03
2.8K0
处理机调度及常用的几个调度算法
三分钟基础:有哪些经典的进程调度算法?
想当初,操作系统创造我时,只是打算让我用 FCFS 调度算法,简单维护下进程的秩序。但我后来的发展,远远超过了他的想象。
帅地
2019/12/05
6K0
三分钟基础:有哪些经典的进程调度算法?
操作系统精髓与设计原理--单处理器调度
        在多道程序设计系统里,内存有多个进程,且或者在处理器上运行,或者在等待某种事件的发生(如I/O完成)。当处理器(或组)通过执行某个进程而保持忙状态,则其他的进程处于等待状态。
学徒漠筱歌
2022/07/17
5560
进程调度算法
在多道程序系统中,进程的数量往往多于处理机的个数,因此进程争用处理机的情况在所难免。处理机调度是对处理机进行分配,即从就绪队列中按照一定的算法(公平、高效)选择一个进程并将处理机分配给它运行,以实现进程并发执行。
薄荷冰
2024/11/14
3830
进程调度算法
xv6(16) 进程二:调度算法
调度是操作系统里面一个很重要的概念,进程中有调度,页面置换有调度,磁盘访问也有调度,本文讲述的是进程之间的调度,以及多处理器之间的调度策略。废话不多时直接来看,先来简单了解各种概念:
rand_cs
2023/12/07
5140
相关推荐
13-常见调度算法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档