【操作系统】第八章处理机调度

简介: 【操作系统】第八章处理机调度

8.1背景


1、上下文切换:

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


2、CPU调度

从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程

调度程序:挑选进程/线程的内核函数(通过一些调度策略)

什么时候进程调度?调度算法实现

问题:在进程/线程的生命周期中的什么时候进行调度?

image.png


3、内核运行调度程序的条件(满足一条即可)

1)一个进程从运行状态切换到等待状态

2)一个进程被终结了


4、是否可以抢占

不可抢占:

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

可以抢占:(常用,针对用户态的)

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


抢占使得系统程序更加的灵活和高效。


8.2调度原则


根据什么原则去选择一个进程去执行,这个就是调度的原则

1、执行模型

程序在CPU突发和I/O中交替

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


2、评价的指标

1)CPU利用率:CPU处于忙碌状态所占时间的百分比

  • cpu利用率越高,可以认为当前系统的效率比较好。进程调度进行得好。

2)吞吐量:在单位时间内完成的进程数量

  • 吞吐量越高,说明进程的效率越好。当然希望当操作系统跑一堆进程时,吞吐率都很高。

3)周转时间:一个进程从初始化到结束,包括所有等待时间所花费的时间。

  • 周转时间越断越好。

4)等待时间:进程在就绪队列中的总时间

  • 指的是出于就绪态的时间越短,就越快被cpu执行

5)响应时间:从一个请求被提交到产生第一次响应所花费的总时间

  • 同样也是越短越好

以上可以对cpu调度的指标有一个分析。

人们通常都需要“更快”的服务


什么是更快:

  • 传输文件时的高带宽
  • 玩游戏时的低延迟
  • 这两个因素是独立的


和水管类比:

  • 低延迟:喝水的时候想要一代开水龙头水就流出来
  • 高带宽:给游泳池充水时希望从水龙头里同时流出大量的水,并且不介意是否存在延迟


3、算法需达到的效果

1)减少响应时间

及时处理用户的输出并且尽快将输出提供给用户

2)减少平均响应时间的波动

在交互系统中,可虞可预测性比高差异低平均更重要

3)增加吞吐量–两个方面

减少开销(操作系统开销,上下文切换)

系统资源的高效利用(CPU,I/O设备)

4)减少等待时间

减少每个进程的等待时间

其实很难满足以上的全部效果,只能泽中或者在特定场合中选择某种特定效果。


4、公平性

公平的定义:

  • 保证每个进程都占用相同的cpu时间
  • 保证每个进程都等待相同的时间
  • 公平通常会增加平均响应时间


8.3调度算法


调度算法有三类:

1)通常操作系统设计的基本调度算法

2)嵌入式设备实时的调度算法

3)针对多处理器的调度算法与考虑


一、常用系统的调用算法

  • FCFS (先来先服务) (First Come, First Served)
  • SPN(SJF)SRT (短进程优先(短作业优先)剩余时间优先) Shortest Process Next(Shortest Job First) Shortest Remaining Time
  • HRRN (最高响应比优先) Highest Response Ratio Next
  • Round Robin (轮循) 使用时间切片和抢占来轮流执行任务
  • Multilevel Feedback Queues (多级反馈队列) 优先级队列中的轮循

Fair Share Scheduling (公平共享调度)


二、先来先服务调度(FCFS)

image.png

如图所示,如果前面的进程越长,后面的进程等待的时间就越长,从而会影响整个系统的周转时间。

优点:

简单

缺点:

1)平均等待时间波动较大,平均的周转时间也会比较大

2)花费时间少的任务可能排在花费时间长的任务后面,没有考虑抢占

3)可能导致I/O和CPU之间的重叠处理(cpu密集型进程会导致I/O设备闲置时,I/O密集型进程也在等待)


三、短任务优先算法

image.png

当一个更短时间进程来了之后,有两种策略:

1)不理,将这个时间更短的程序排在前面,但是继续执行本来在执行的进程,这种是非抢占性的。(SPN)

2)将这个时间更短的程序与正在执行的程序剩余所需要执行的时间进行比较,如果跟多,这打断正在执行的程序,这种是可抢占的。(SRT)


优点:

平均等待时间最短

image.png


缺点:

1)可能导致饥饿

  • 连续的短任务流会使长任务饥饿
  • 短时间可用时的任何长任务的CPU时间都会增加平均等待时间

2)需要预知未来

  • 怎么预估下一个CPU突发的持续时间
  • 简单的解决方法:询问用户
  • 如果用户欺骗就杀死进程
  • 如果用户不知道就采用预估方法


根据过去,预测未来,大致的预测方法如下:

image.png

结果大致的相同

image.png


四、最高响应比优先算法

在SPN调度的基础上改进

image.png

R值越高表示等待的时间越长,就会优先的调度这种进程。

image.png

优点:

充分的考虑到了进程的等待时间,所有之前的饥饿现象会得到有效的化解。

缺点:

1)不可抢占

2)依然需要知道执行的时间是多长,所以还是要预估


五、轮循算法

各个cpu轮流占用cpu去执行,在叫做量子(或时间切片)的离散单元中分配处理器,时间片结束后,切换到下一个准备好的进程。

每一个进程都有机会去被cpu执行

例子:

image.png

可见,轮流算法的平均等待时间是比较大的。

特点:

1)会比较到的切换时间,进程上下文的切换,确保公平

2)时间片太大(有可能退化为先来先服务)

  • 等待时间过长
  • 极限情况退化成FCFS

3)时间片太小(切换过于频繁)

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


目标:

  • 选择一个合适的时间量子
  • 经验规则:维持上下文切换开销处于1%以内,这样的情况下99%的时间都是在

进程的执行过程中

与先来先服务算法 进行比较:


六、多级反馈队列

首先完成高优先级的进程,待其完成了所以的任务之后,再去完成第优先级的进程,这样通过分层不同级别的队列,可以实现调度的区分,使得调度的策略更加的合适。

而且进程在不同阶段的特点是不同的,所以调度算法可以考虑到进程各阶段的特点来调整其在队列中的级别。这个就是多级反馈队列可以体现。

image.png

特点:

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

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

3)能够区分进程在动态执行过程中动态的调整进程优先级,使得IO密集型的任务可以很快的执行,而CPU密集型的任务放在优先级较低位置。


七、公平共享调度

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

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

image.png


八、小结

1)FCFS先来先服务

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

2)SPN/SRT段进程优先

  • 不公平,但是平均等待时间最小
  • 需要精确预测计算时间
  • 可能导致饥饿

3)HRRN最好响应比优先

  • 基于SPN调度改进(考虑了等待时间)
  • 不可抢占

4)Round Robin轮循

  • 公平,但是平均等待时间较差
  • 每一个进程有固定的时间片,但是上下文开销较大

5)MLFQ舵机反馈对列

  • 和SPN类似
  • 动态调整进程优先级

6)公平共享调度

  • 公平是第一要素


8.4实时调度


面向的是实时的系统,更多的是工业控制(火车,机床等等)

1、定义

正确性依赖于其时间和功能两个方面的一种操作系统


2、性能指标

1)时间约束的及时性(deadlines)

2)速度和平均性能相对不重要


3、主要特征

时间约束的可预测性


4、分类

1)强实时系统

需要在保证的时间内完成重要的任务,必须完成

2)弱实时系统

要求重要的进程的优先级更高,尽量完成,并非必须

image.png

Released :让进程处于就绪态的时间

Execution time:执行时间

Absolute deadline:绝对的截止时间,任务的执行不可以操作这个时间

Relative deadline:相对截止时间,因为任务是间隔的,一段时间完成一个任务

image.png

(周期是5,执行的时间就是蓝色的区域)


5、特点

硬时限:

  • 如果错过了最后的期限,可能会发生灾难性或非常严重的后果
  • 必须验证:在最坏的情况下也能够满足时限
  • 保证确定性


软时限:

  • 理想情况下,时限应该被最大满足。如果有时限没有被满足,那么就相应地降低要求
  • 尽量大努力去保证


表示一个实时系统是否能够满足deadline要求

  • 决定实时任务执行的顺序
  • 静态优先级调度
  • 动态优先级调度


6、实时系统中的两类调度算法:

1)RM(Rate Monotonic)速率单调调度

  • 最接静态优先级调度
  • 通过周期安排优先级
  • 周期越短优先级越高
  • 执行周期最短的任务


2)EDF(Earliest Deadline First)最早期限调度

  • 最佳的动态优先级调度
  • Deadline越早优先级越高
  • 执行Deadline最早的任务


8.5多处理器调度与优先级反转


一、多处理器调度

1、多处理器的cpu调度更加复杂

  • 多个相同的单处理器组成一个多处理器
  • 负载平衡状态


2、对称多处理器(SMP)

  • 每个处理器运行自己的调度程序
  • 需要在调度程序中同步

image.png


二、优先级反转

出现的原因:

T1的执行时间受制于T2的执行时间,因为T2抢占了T3的cpu时间去执行,而T1的执行有必须等待T3处理完共享内容,所以T1的执行时间被T2延长了。从而导致T1不能及时的完成其任务,导致系统处于不稳定状态而重启。

image.png

特点:

可以发生在任何基于优先级的可抢占的调度机制中。

当系统内的环境强制性使高优先级任务等待低优先级任务时发生。


解决方法:

1、优先级继承(将问题发生时,提升T3的优先级)

低优先级继承高优先级任务的优先级依赖于他们共享的资源

image.png

2、天花板优先级

1)“资源”的优先级和“所有可以锁定该资源的任务中优先级最高的那个任务”的优先级相同。

2)除非优先级高于系统中所有被锁定的资源的优先级上限,否则任务尝试执行临界区的时候会被阻塞

3)持有最高优先级上限信号量锁的任务,会继承被该锁所阻塞的任务的优先级


参考链接:https://www.bilibili.com/video/av6538245

目录
相关文章
|
1月前
|
算法 调度 UED
深入理解操作系统:进程调度与优先级队列
【10月更文挑战第31天】在计算机科学的广阔天地中,操作系统扮演着枢纽的角色,它不仅管理着硬件资源,还为应用程序提供了运行的环境。本文将深入浅出地探讨操作系统的核心概念之一——进程调度,以及如何通过优先级队列来优化资源分配。我们将从基础理论出发,逐步过渡到实际应用,最终以代码示例巩固知识点,旨在为读者揭开操作系统高效管理的神秘面纱。
|
23天前
|
存储 算法 调度
深入理解操作系统:进程调度的奥秘
在数字世界的心脏跳动着的是操作系统,它如同一个无形的指挥官,协调着每一个程序和进程。本文将揭开操作系统中进程调度的神秘面纱,带你领略时间片轮转、优先级调度等策略背后的智慧。从理论到实践,我们将一起探索如何通过代码示例来模拟简单的进程调度,从而更深刻地理解这一核心机制。准备好跟随我的步伐,一起走进操作系统的世界吧!
|
1月前
|
消息中间件 算法 调度
深入理解操作系统:进程管理与调度
操作系统是计算机系统的核心,负责管理和控制硬件资源、提供用户接口以及执行程序。其中,进程管理是操作系统的重要组成部分,它涉及到进程的创建、调度、同步和通信等方面。本文将深入探讨进程管理的基本概念、进程调度算法以及进程间的同步和通信机制。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程管理的基本技能。
48 11
|
29天前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
操作系统作为计算机系统的核心,其进程管理和调度策略对于系统性能和用户体验至关重要。本文将通过直观的代码示例和浅显易懂的语言,带领读者了解操作系统如何有效管理进程以及常见的进程调度算法。我们将从进程的基本概念出发,逐步深入到进程状态、进程控制块(PCB)的作用,最后探讨不同的调度算法及其对系统性能的影响。无论您是初学者还是有一定基础的开发者,都能从中获得有价值的信息。
|
28天前
|
负载均衡 算法 调度
深入理解操作系统:进程管理与调度
在数字世界的心脏,操作系统扮演着至关重要的角色。它如同一位精明的指挥家,协调着硬件资源和软件需求之间的和谐乐章。本文将带你走进操作系统的核心,探索进程管理的艺术和调度策略的智慧。你将了解到进程是如何创建、执行和消亡的,以及操作系统如何巧妙地决定哪个进程应该在何时获得CPU的青睐。让我们一起揭开操作系统神秘的面纱,发现那些隐藏在日常计算背后的精妙机制。
|
29天前
|
调度 开发者
深入理解操作系统之进程调度
在计算机科学领域,操作系统是核心的一环,它管理着计算机硬件资源,并提供接口供上层软件运行。本文将通过深入浅出的方式,探讨操作系统中至关重要的一个概念——进程调度。我们将从基础理论出发,逐步展开讲解进程调度的原理和实现,并配以实际代码示例,旨在帮助读者更好地理解和掌握这一主题。文章不仅适合初学者建立基础,也适合有一定基础的开发者深化理解。
|
1月前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第40天】在数字世界中,操作系统是连接硬件与软件的桥梁,它管理着计算机资源和提供用户服务。本文将深入探讨操作系统中的进程管理与调度策略,揭示它们如何协调多任务运行,保证系统高效稳定运作。通过代码示例,我们将展示进程创建、执行以及调度算法的实际应用,帮助读者构建对操作系统核心机制的清晰认识。
|
1月前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第34天】本文旨在探讨操作系统中至关重要的一环——进程管理及其调度策略。我们将从基础概念入手,逐步揭示进程的生命周期、状态转换以及调度算法的核心原理。文章将通过浅显易懂的语言和具体实例,引导读者理解操作系统如何高效地管理和调度进程,保证系统资源的合理分配和利用。无论你是初学者还是有一定经验的开发者,这篇文章都能为你提供新的视角和深入的理解。
45 3
|
1月前
|
算法 调度 UED
深入浅出操作系统调度策略
【10月更文挑战第33天】在数字时代的心脏,操作系统扮演着至关重要的角色。本文将探讨操作系统的核心功能之一——进程调度策略的设计与影响。我们将从理论到实践,通过浅显易懂的语言和具体代码示例,揭示如何通过不同的调度算法来优化系统性能和用户体验。无论你是技术新手还是资深开发者,这篇文章都将为你提供新的视角和深入的理解。
|
1月前
|
算法 Linux 调度
深入理解操作系统之进程调度
【10月更文挑战第31天】在操作系统的心脏跳动中,进程调度扮演着关键角色。本文将深入浅出地探讨进程调度的机制和策略,通过比喻和实例让读者轻松理解这一复杂主题。我们将一起探索不同类型的调度算法,并了解它们如何影响系统性能和用户体验。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇理解操作系统深层工作机制的大门。
39 0