操作系统(2) (进程调度/进程调度器类型/三种进程调度/调度算法)
目录
1. 介绍进程调度(Introduction to Process Scheduling)
2. 优先级调度(Priority Scheduling)
3. CPU 利用率(CPU Utilization)
4. 吞吐量(Throughput)
5. 周转时间(Turnaround Time)
6. 等待时间(Waiting Time)
7. 响应时间(Response Time)
8. 公平性(Fairness)
2. 进程调度器的类型(Types of Process Schedulers)
1. 长期调度(Long-term Scheduling)
2. 中期调度(Medium-term Scheduling)
3. 短期调度(Short-term Scheduling,Dispatcher)
3. 典型的进程调度算法(Typical Process Scheduling Algorithms)
先来先服务(First-Come, First-Served, FCFS): 按照进程到达的顺序进行调度。简单易实现,但可能导致较长的等待时间,尤其是出现长作业时。
短作业优先(Shortest Job Next, SJN): 优先调度预计执行时间最短的进程,可以减少平均等待时间,但需要估计执行时间,可能导致“饥饿”问题。
时间片轮转(Round Robin, RR): 为每个进程分配固定的时间片(time slice),时间片耗尽后,切换到下一个进程。适用于多任务环境,能提供较好的响应时间。
优先级调度(Priority Scheduling): 按照进程的优先级进行调度,优先级高的进程先执行。可能导致低优先级进程饥饿。
1. 介绍进程调度(Introduction to Process Scheduling)
- 进程调度是操作系统的核心功能之一,负责管理多个进程对 CPU 的争用,以实现多任务处理。调度程序决定哪个进程在何时获得 CPU 资源,从而最大化系统性能和资源利用率。
2. 优先级调度(Priority Scheduling)
- 概念: 为每个进程分配一个优先级,优先级越高,越早得到 CPU 的调度。优先级可以由系统或用户指定,也可以根据进程行为和系统状态动态变化。
- 目标: 确保关键任务或时间敏感任务能优先得到处理,从而满足任务的紧急性需求。
- 注意: 优先级调度可能导致低优先级进程饥饿(一直得不到 CPU 资源),需要结合其他策略来确保公平性。
3. CPU 利用率(CPU Utilization)
- 目标: 提高 CPU 利用率,使 CPU 尽可能保持忙碌状态,减少闲置时间。高 CPU 利用率意味着更有效的资源使用。
- 调度算法的作用: 通过优化进程的执行顺序,减少 CPU 的空闲时间,确保系统能处理更多任务。
4. 吞吐量(Throughput)
- 概念: 吞吐量是指在一定时间内完成的进程数量。更高的吞吐量意味着系统在单位时间内处理了更多的任务。
- 目标: 调度算法应尽量最小化进程完成时间,以此来提高系统的吞吐量。尤其在批处理系统中,吞吐量是评估调度性能的重要指标。
5. 周转时间(Turnaround Time)
- 定义: 周转时间是从进程提交到完成所需的总时间,包括等待时间、执行时间和 I/O 操作时间。
- 目标: 进程调度应尽量最小化平均周转时间,以提升系统的响应性和用户满意度。
- 适用场景: 在多任务系统中,较短的周转时间意味着用户请求可以更快得到处理和完成。
6. 等待时间(Waiting Time)
- 定义: 等待时间是指一个进程在就绪队列中等待执行的总时间。
- 目标: 调度策略应尽量减少进程的等待时间,以避免资源的低效利用和系统性能的下降。
- 重要性: 长时间的等待会导致用户体验变差,特别是在交互式系统中。
7. 响应时间(Response Time)
- 定义: 响应时间是指从进程提交到产生第一次响应(如输出)的时间。
- 目标: 在交互式系统中,调度算法应最小化响应时间,确保系统能够及时反馈用户操作,提供良好的用户体验。
- 调度算法: 如时间片轮转(Round Robin),旨在提供低响应时间以满足交互式应用的需求。
8. 公平性(Fairness)
- 定义: 公平的调度算法确保所有进程都能公平地获得 CPU 时间,不会出现某个进程一直得不到执行的情况。
- 重要性: 公平性在多用户或多任务系统中特别重要,以保证不同用户或应用程序在竞争资源时都有机会得到合理的执行时间。
2. 进程调度器的类型(Types of Process Schedulers)
1. 长期调度(Long-term Scheduling)
- 作用:
- 控制系统中的多道程序程度(Degree of Multiprogramming): 决定哪些新进程可以进入系统。长期调度器通过选择一组新进程,来保持一个合适的 CPU 和 I/O 绑定进程的组合,以充分利用系统资源。
- 平衡资源使用: 为了让 CPU 和 I/O 设备都保持忙碌状态,长期调度器会选择合适的 CPU-bound 和 I/O-bound 进程的组合进入系统。
- 触发:
- 较少触发: 仅在创建新进程或系统负载发生显著变化时触发。这种调度发生不频繁,因为它主要决定哪些进程可以被“引入”到系统中。
- 目的:
- 通过选择合适数量和类型的进程进入系统,优化整体系统性能,避免资源浪费或过载。
2. 中期调度(Medium-term Scheduling)
- 作用:
- 控制多道程序程度和内存利用: 主要负责内存管理,决定哪些进程需要被**交换(Swapping)**到内存外,以缓解内存压力或调整多道程序的数量。
- 交换(Swapping): 当系统内存不足或系统负载过高时,中期调度器可以将某些进程暂时从主内存中移出(交换到硬盘),以腾出空间给其他进程。
- 触发:
- 根据内存压力触发: 当系统内存紧张或需要调整多道程序程度时触发。这样可以确保系统在内存使用方面保持平衡,提高系统的响应速度。
- 目的:
- 提高内存利用率,维持系统的响应性,确保在内存资源有限的情况下,进程可以顺利执行。
3. 短期调度(Short-term Scheduling,Dispatcher)
- 作用:
- 管理就绪队列(Ready Queue): 负责选择就绪队列中的下一个进程并将其分配给 CPU 执行。短期调度器(也叫调度器或分派器)是进程调度中最频繁的一部分。
- 响应各种事件:
- 时钟中断(Clock interrupts): 例如,在抢占式系统中,当一个时间片到期时,调度器会被触发。
- I/O 中断(I/O interrupts): 当 I/O 操作完成时,调度器选择下一个进程。
- 系统调用(System calls): 当进程发出阻塞调用时,调度器决定哪个进程应立即获得 CPU。
- 信号量操作(Semaphore operations): 当资源变得可用时,调度器会唤醒等待中的进程。
- 触发:
- 非常频繁: 在进程调度中触发频率最高,因此必须高效快速。
- 目的:
- 最小化响应时间: 快速选择和分配进程,确保系统保持高效运转,提供及时的响应。
- 最小化响应时间: 快速选择和分配进程,确保系统保持高效运转,提供及时的响应。
3. 典型的进程调度算法(Typical Process Scheduling Algorithms)
-
先来先服务(First-Come, First-Served, FCFS): 按照进程到达的顺序进行调度。简单易实现,但可能导致较长的等待时间,尤其是出现长作业时。
- 优点:
- 位置公平性(Positional Fairness): 简单易实现,进程按照它们的到达顺序被执行,不会跳过任何一个进程。
- 缺点:
- 倾向长进程: FCFS 倾向于长时间运行的进程,短进程可能要等待很长时间(类似超市结账时,一个顾客带着大量商品结账)。
- 倾向 CPU-bound 进程: CPU-bound 进程容易占用更多的 CPU 时间,导致 I/O-bound 进程长时间等待,降低系统的整体效率。
- 优点:
-
短作业优先(Shortest Job Next, SJN): 优先调度预计执行时间最短的进程,可以减少平均等待时间,但需要估计执行时间,可能导致“饥饿”问题。
- 优点:
- 最优周转时间: 在已知各进程执行时间的情况下,SJF 能够实现最优的平均周转时间,是一种非常高效的调度策略。
- 缺点:
- 饥饿问题(Starvation): 在 SJF 中,长进程可能因为不断有新的短进程到达而得不到 CPU 资源,导致“饥饿”。
- 公平性和可预测性不足: SJF 偏向于短进程,长进程的用户无法预测进程何时能够获得 CPU 资源。
- 需要知道执行时间: SJF 要求预先知道或估计每个进程的运行时间,但在实际中,准确估计执行时间并不总是容易实现。
- 优点:
-
时间片轮转(Round Robin, RR): 为每个进程分配固定的时间片(time slice),时间片耗尽后,切换到下一个进程。适用于多任务环境,能提供较好的响应时间。
-
2. 时间片(Quantum)选择的重要性 时间片的大小直接影响系统的响应性和效率:
- 小时间片:
- 提高响应时间: 确保每个进程都能迅速获得 CPU 时间,适合交互式系统,需要快速响应用户输入。
- 增加上下文切换: 频繁的抢占会导致更多的上下文切换,增加系统开销,降低 CPU 效率。
- 大时间片:
- 提高吞吐量: 减少上下文切换的次数,进程可以长时间占用 CPU,更好地完成长时间的计算任务。
- 增加响应时间: 可能导致进程长时间等待,尤其在多进程系统中,进程必须等更长时间才能再次获得 CPU。
- 小时间片:
-
3. 优点
- 改善响应时间:
- RR 可以确保每个进程在一段时间内都会得到执行机会,防止进程被“饿死”,适用于交互式系统,保证及时的用户反馈。
- 适合多用户的时间共享系统:
- 每个进程都有均等的机会使用 CPU,非常适合多用户、多任务的操作系统,确保资源公平分配。
- 公平性:
- 每个进程都有平等的机会获得 CPU,防止任何进程垄断 CPU 时间。与基于优先级的调度不同,低优先级进程不会被饿死。
- 改善响应时间:
- 缺点
- 频繁的上下文切换:
- 可能退化为 FCFS:
- 如果时间片过大,RR 会变得类似于先来先服务(FCFS),因为进程在时间片内有足够的时间完成执行,不会被抢占。
- 倾向于 CPU-bound 进程:
- 因为 CPU-bound 进程可以充分利用整个时间片,它们会被重新排入队列等待执行。而 I/O-bound 进程通常需要短暂的 CPU 时间来发起 I/O 操作,因此它们在队列中等待的时间较长,获得 CPU 时间的机会相对减少。
- 当时间片较小时,上下文切换频率会增加,导致 CPU 资源用于保存和恢复进程状态的开销增加,降低系统效率。
- 可能退化为 FCFS:
- 频繁的上下文切换:
-
-
-
优先级调度(Priority Scheduling): 按照进程的优先级进行调度,优先级高的进程先执行。可能导致低优先级进程饥饿。
-
优点
- 改善重要任务的响应性:
- 该算法确保高优先级或重要的进程能够尽快被执行,从而提高了对关键任务的响应时间。例如,实时任务或紧急 I/O 操作可以获得更高的优先级。
- 灵活性:
- 通过为不同进程分配不同的优先级,操作系统可以灵活地处理多种类型的任务。实时进程可以被分配更高的优先级,而后台任务可以分配较低的优先级。
- 适合实时系统:
- 优先级队列调度特别适用于实时系统(如嵌入式系统或多媒体应用),这些系统需要确保高优先级任务能够及时执行,避免延迟。
-
3. 缺点
- 可能发生饥饿(Starvation):
- 如果系 统中不断有高优先级的进程到达,低优先级进程可能一直得不到执行机会,陷入“饥饿”状态。这在抢占式优先级调度中尤为严重,因为低优先级进程随时可能被抢占。
- 低优先级进程的响应时间增加:
- 虽然高优先级任务能获得低响应时间,但低优先级进程可能需要等待很长时间。如果新的高优先级进程不断到达,低优先级进程将被反复抢占,导致其响应时间显著增加。
- 抢占式优先级调度的高开销:
- 当高优先级进程到达时,正在运行的低优先级进程会被抢占,这需要频繁的上下文切换,增加了系统开销。尤其是当高优先级进程的 CPU 运行时间很短但到达频率较高时,系统效率会受到明显影响。
- 改善重要任务的响应性:
-
- 总结
- FCFS: 简单易实现,按到达顺序调度,具有位置公平性,但可能导致长进程或 CPU-bound 进程垄断资源。
- SJF: 提供最优的平均周转时间,优先处理短进程,但可能引发长进程的“饥饿”问题,而且需要准确的执行时间估计。
- 这两种算法都是非抢占式的,每种都有其适用场景。选择调度算法时,需要权衡系统的需求和进程特性。
- RR 调度算法通过固定的时间片轮流分配 CPU 时间,确保每个进程都能公平地获得 CPU 资源,是多用户、多任务操作系统中常用的调度策略。
- 时间片的选择至关重要:过小的时间片会导致频繁的上下文切换;过大的时间片会增加响应时间,并使 RR 退化为 FCFS。
- RR 的公平性使其适用于交互式系统,但必须在系统响应性和上下文切换开销之间找到平衡。
- 优先级队列调度算法是一种通过分配进程优先级来控制调度顺序的算法,适用于需要对关键任务进行及时响应的系统,特别是实时操作系统。
- 它在提高重要任务响应性和系统灵活性方面表现优异,但可能导致低优先级进程的“饥饿”和较高的上下文切换开销,因此需要权衡优先级分配策略,或者引入防止饥饿的机制(如老化(Aging))。
相关文章:

操作系统(2) (进程调度/进程调度器类型/三种进程调度/调度算法)
目录 1. 介绍进程调度(Introduction to Process Scheduling) 2. 优先级调度(Priority Scheduling) 3. CPU 利用率(CPU Utilization) 4. 吞吐量(Throughput) 5. 周转时间…...

鸿蒙--知乎评论
这里我们将采用组件化的思想进行开发 在开发中默认展示的是首页也就是 pages/Index.ets页面 这里存放的是所有页面的配置文件,类似与uniapp中的pages.json 如果我们此时要更改默认显示Zh...

2024 - 两台CentOS服务器上的1000个Docker容器(每台500个)之间实现UDP通信(C语言版本)
两台CentOS服务器上的1000个Docker容器(每台500个)之间实现UDP通信(C语言版本) 给女朋友对象写得,她不会,我就写了一个 为了帮助您在两台CentOS服务器上的1000个Docker容器(每台500个)之间实现UDP通信&…...

小程序该如何上架
小程序的上架流程通常包括准备工作、代码审核、人工审核以及上线发布等关键步骤。以下是一个详细的小程序上架指南: 一、准备工作 注册开发者账号: 在微信小程序平台或支付宝开放平台等相应的小程序发布平台上注册开发者账号。 开发小程序: …...

XMOJ3065 旅游线路
10分钟没啥思路就去看题解了,结果发现很蠢。 题目大意 有一条河,河的东侧和西侧分别有 n , m n,m n,m 个景点,每个景点有个权值。有 k k k 条船,每条船连接东侧和西侧的一个景点。定义一个旅游线路是通过船连接起来的景点序列…...

量化之一:均值回归策略
文章目录 均值回归策略理论基础数学公式 关键指标简单移动平均线(SMA)标准差Z-Score 交易信号实际应用优缺点分析优点缺点 结论 实践backtrader参数:正常情况:异常情况: 均值回归策略 均值回归(Mean Rever…...

NVIDIA Bluefield DPU上的启动流程4个阶段分别是什么?作用是什么?
文章目录 Bluefield上的硬件介绍启动流程启动流程:eMMC中的两个存储分区:ATF介绍ATF启动的四个阶段:四个主要步骤:各个阶段依赖的启动文件一次烧录fw失败后的信息看启动流程综述Bluefield上的硬件介绍 本文以Bluefield2为例,可以看到RSHIM实际上是Boot相关的集合。也能看…...

最优美公式-欧拉公式,轻松理解版
Alan Becker创作的火柴人大战数学的打斗视频,风靡一时,并在B站荣耀斩获了“金知奖”。下面是网友对此视频的部分评价截图。 视频原址:火柴人 vs 数学,后续又一口气看完了“火柴人vs 几何”与“火柴人vs 物理”,通过火柴…...

【力扣 | SQL题 | 每日3题】力扣1107,1112, 1077
今天三道mid题都可以用窗口函数轻松秒杀。 1. 力扣1107:每日新用户统计 1.1 题目: Traffic 表: ------------------------ | Column Name | Type | ------------------------ | user_id | int | | activity | enum …...

计算机网络(十一) —— 数据链路层
目录 一,关于数据链路层 二,以太网协议 2.1 局域网 2.2 Mac地址 2.3 Mac帧报头 2.4 MTU 三,ARP协议 3.1 ARP是什么 3.2 ARP原理 3.3 ARP报头 3.4 模拟ARP过程 3.5 ARP周边问题 四,NAT技术 4.1 NAT技术背景 4.2 NAT转…...

使用PyTorch从0实现Fashion-MNIST数据集分类
完整代码: from d2l import torch as d2l import torch from torchvision import transforms from torchvision import datasets from torch.utils.data import DataLoader import matplotlib.pyplot as plt from IPython import displaydef get_fashion_mnist_la…...

Java数组的值拷贝和地址拷贝
在Java中,数组的值拷贝和地址拷贝是两种不同的操作。 值拷贝是指将一个数组的值复制到另一个新的数组中。这意味着新数组和原数组独立存在,修改其中一个数组不会影响另一个数组。Java中的数组是对象,所以通过值拷贝操作实际上是复制了数组对…...

类与对象 中(剩余部分) 以及 日历
运算符重载 • 当运算符被⽤于类类型的对象时,C语⾔允许我们通过运算符重载的形式指定新的含义。C规定类类型对象使⽤运算符时,必须转换成调⽤对应运算符重载,若没有对应的运算符重载,则会编译报错。 • 运算符重载是具有特名字的…...

iOS 14 自定义画中画悬浮窗 Custom AVPictureInPictureController 实现方案
iOS 14,基于 AVPictureInPictureController,实现自定义画中画,涵盖所有功能与难点。 市面上的各种悬浮钟和提词器的原理都是基于此。 Demo源码在文末。 使用 iOS 画中画的要求: 真机,不能使用模拟器;iO…...

【C#生态园】完整解读C#网络通信库:从基础到实战应用
探索C#网络通信库:功能、用途和最佳实践 前言 随着互联网的快速发展,网络通信在现代软件开发中扮演着至关重要的角色。C#作为一种流行的编程语言,拥有多个优秀的网络通信库,为开发人员提供了丰富的选择。本文将深入探讨几种常用…...

js面试题---事件委托是什么
事件委托是JavaScript中的一种事件处理模式,通过将事件处理程序绑定到父元素,而不是直接绑定到每个子元素,从而优化事件管理和提高性能。 1 工作原理 事件冒泡:当一个事件在某个元素上发生时,它会从该元素向上冒泡到…...

谷歌浏览器 文件下载提示网络错误
情况描述: 谷歌版本:129.0.6668.90 (正式版本) (64 位) (cohort: Control)其他浏览器,比如火狐没有问题,但是谷歌会下载失败,故推断为谷歌浏览器导致的问题小文件比如1、2M会成功,大…...

【记录】PPT|PPT 箭头相交怎么跨过
众所周知,在PPT中实现“跨线”效果并非直接可行,这一功能仅存在于Visio中。然而,通过一些巧妙的方法,我们可以在PPT中模拟出类似的效果。怎么在PPT中画交叉但不重叠的线-百度经验中介绍了一种方法,而本文将介绍一种改进…...

Linux中如何修改root密码
在 Linux 中,修改 root 用户密码可以通过以下步骤进行。你需要具有超级用户权限才能执行这些操作。 方法一:使用 passwd 命令修改 root 密码 使用具有超级用户权限的账户登录 如果你已经以 root 身份登录,或者你当前账户具备超级用户权限&am…...

中间件:SpringBoot集成Redis
一、Redis简介 Redis是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)…...

数据中心建设方案,大数据平台建设,大数据信息安全管理(各类资料原件)
第一章 解决方案 1.1 建设需求 1.2 建设思路 1.3 总体方案 信息安全系统整体部署架构图 1.3.1 IP准入控制系统 1.3.2 防泄密技术的选择 1.3.3 主机账号生命周期管理系统 1.3.4 数据库账号生命周期管理系统 1.3.5 双因素认证系统 1.3.6 数据库审计系统 1.3.7 数据脱敏…...

TDD(测试驱动开发)是否已死?
Rails 大神、创始人 David Heinemeier Hansson 曾发文抨击TDD。 TDD is dead. Long live testing. (DHH) 此后, Kent Beck、Martin Fowler、David Hansson 三人就这个观点还举行了系列对话(辩论) Is TDD Dead? 笔者作为一个多年在软件测试领域摸索的人&…...

Debezium系列之:实时从TDengine数据库采集数据到Kafka Topic
Debezium系列之:实时从TDengine数据库采集数据到Kafka Topic 一、认识TDengine二、TDengine Kafka Connector三、什么是 Kafka Connect?四、前置条件五、安装 TDengine Connector 插件六、启动 Kafka七、验证 kafka Connect 是否启动成功八、TDengine Source Connector 的使用…...

数据结构(一)顺序表
顺序表的概念及结构 线性表 线性表是具有相同特征的数据结构的集合 物理结构 不一定连续 逻辑结构 连续 顺序表 顺序表是线性表的一种,顺序表的底层是数组 物理结构 连续 逻辑结构 连续 顺序表分类 静态顺序表 struct SeqList {int a…...

如何在 Jupyter Notebook 执行和学习 SQL 语句(中)
1. 基础SQL操作 创建数据库和表,插入数据: import sqlite3# 创建SQLite数据库并连接 conn sqlite3.connect(example.db) cursor conn.cursor()# 创建用户表 cursor.execute(CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT…...

AutosarMCAL开发——基于EB Wdg驱动
目录 一、Wdg原理以及作用1.看门狗类型2.看门狗功能特点3.看门狗工作模式4.看门狗超时响应5.看门狗寄存器 二、WDG模块EB配置(TC3X系列MCU)1.WDG通用配置:2.WDG设置:3.时钟资源分配4.配置STM IRQ中断5.配置触发执行动作࿱…...

Linux(1. 基本操作_命令)
目录 关于超级用户root: root用户可以做什么? 避免灾难: 格式约定: 浏览硬盘: 命令行补全和通配符: 命令行补全: 通配符: 常用基本命令: 查看目录和文件ÿ…...

难点:Linux 死机定位(进程虚拟地址空间耗尽)
死机定位(进程虚拟地址空间耗尽) 一、死机现象 内存富裕,但内存申请失败。 死机时打印: 怀疑是: 1、内存碎片原因导致。 2、进程虚拟地址空间耗尽导致。 3、进程资源限制导致。 二、内存碎片分析 1、理论知识:如何分析内存碎片化情况 使用 /proc/buddyinfo: /proc/…...

小米路由器刷机istoreOS,愉快上网
istoreOS与openwrt openwrt是一个开源的路由器系统,市场上所有小米路由器的内部系统都是基于openwrt进行二次开发形成的,做了硬件适配和功能上的阉割,不太好用。 istoreos是小宝团队基于openwrt制作的一个发行版,更适合中国宝宝体质。页面简约华丽,完全兼容开源openwrt的…...

微信小程序 - 01 - 一些补充和注意点(补充ing...)
目录 一、节流二、在一个发请求的函数中,只有发生下拉动作,才执行关闭下拉代码 最近在学微信小程序,把学习过程中的一些补充和注意点总结一下,内容会比较简单,因为只涉及基础知识,供个人参考 一、节流 情…...