操作系统入门 -- CPU调度算法

操作系统入门 – CPU调度算法

在了解完进程和线程的概念后,我们就需要了解当一个进程就绪后系统会进行怎样的资源分配并运行进程,因此我们就需要了解CPU的调度算法


1.CPU调度

1.1概念

CPU调度即按照某种算法将CPU资源分配给某个就绪的进程。

1.2调度层次

  • 高级调度(作业调度)
    • 内存空间有限,可能无法将用户提交的全部作业放入内存,只能挑选一个或几个放入。
    • 建立PCB,获得竞争权利。
    • 每个作业只调入一次,调出一次。
    • 作业调入时创建PCB,调出时释放PCB。
  • 中级调度(内存调度)
    • 为提高系统运行效率,将暂时不能执行的进程调出内存在外存中等待。
    • 进程被调入外存后会进入挂起状态。
    • 将数据段调入外存,而PCB则常驻内存。
    • 一个进程可能会被多次调入调出。
  • 低级调度(进程调度)
    • 宏观层面上实现并发。
    • 从就绪队列中选择一个进程并分配CPU资源。
    • 调度频率很高。
层次任务调度发生频率进程及状态变化
高级调度调度处于后备队列中的作业,创建进程外存->内存最低无->创建态->就绪态
中级调度调度处于挂起队列中的进程外存->内存中等就绪挂起->就绪/阻塞挂起->阻塞
低级调度调度处于就绪队列中的进程内存->CPU最频繁就绪态->运行态

1.3 七种状态模型

七种状态模型就是上一篇文章所说的创建、就绪、执行、阻塞、终止以及就绪挂起和阻塞挂起七种状态。本节将会对就绪挂起状态和阻塞挂起状态进行重点介绍。

  • 就绪挂起与就绪、阻塞挂起与阻塞,之间的状态可以相互转换。
  • 当等待事件出现时“阻塞挂起”可以变为“就绪挂起”。
  • PCB创建完成,无内存时,可以将进程调入外存成为“就绪挂起”。
  • 当进程没有分配CPU资源时可以直接调入外存,此时由“运行”变为“就绪挂起”。


    提示:判断进程是否被挂起可以查看进程是否被调入外存中。

2.进程调度的时机与方式

2.1 调度与切换

进程调度简单来说可以视为对某一个进程的选择,但其中包括了进程的选择和切换两个步骤,在切换过程中,需要对当前执行的进程进行上下文保存,并恢复下一个即将执行进程的数据并执行。

2.2调度的时机

2.2.1 主动放弃CPU

当任务执行完成、运行时发生异常以及进程主动进入阻塞状态时会主动放弃CPU。

2.2.2 被动放弃CPU

分给进程的时间片用完 或有更紧急的事情需要处理(I/O中断)、以及有其他更高优先级的进程进入就绪队列时,当前执行的进程会被动放弃CPU。


3.CPU调度算法

接下来讲解常见的几个CPU调度算法

3.1 先来先服务(FCFS)

该算法为非抢占式调度,选择就绪队列中等待时间最长的进程。进程按照进入就绪队列的先后顺序依次执行。

  • 评价:系统开销小、对长进程有优势;更利于多CPU处理的进程

  • 例子:在下图中可以看出,5个进程按时间先后依次进入就绪队列,因此系统按照进程的到达时间依次执行。

alt text

3.2 短作业优先(SJF)

短作业优先即选择下一个期望最短处理时间的进程运行。

3.2.1 抢占式SJF

进程主动离开CPU时调度运行时间最短的进程。即当新的进程执行所需时间小于当前进程执行所需的时间时,CPU就会执行那个后到的但执行时间更短的进程。

  • 缺点:需要知道或估计进程会执行多长时间;可能史长进程产生饥饿;因为没有剥夺,所以不适合在实时系统中实现。
  • 例子:P1先进入就绪队列,因而先执行P1。在P1执行过程中P2到达了,由于P2执行时间比P1长,因此P1并不会离开CPU而是继续执行。当P1运行结束后,就绪队列中只剩下P2,因此开始执行P2。在P2执行过程中P3到达,且P3预估执行时间比P2短,因此P2离开CPU,开始执行P3。此时P2剩余执行时间为5。到6时刻,P4进入就绪队列,P3运行时间还剩2,但P4执行时间大于P3,因此继续执行P3。8时刻P3运行结束,此时P5到达,在任务列中剩余P2、P4、P5,执行所需时间分别为5、5、2,因此先执行P5。当P5执行结束后按照先来先到的原则执行剩下的进程,也就是先执行P2,最后执行P4.

alt text

3.2.2 非抢占式SJF

非抢占式SJF即当运行进程主动放弃CPU控制权时的进程调度。

  • 例子:0时刻P1到达,开始执行P1。当P1执行到2时刻时P2到达,此时依然执行P1。3时刻P1执行完毕,开始执行P2。从P2开始执行到结束的时间为12,此时P3、P4、P5陆续到达,但都处于等待执行状态。直到12时刻P2执行结束后,由于P5执行时间最短,因此先执行P5,随后按照进程执行长度依次执行P3和P4。

alt text

3.3优先级调度算法

每个进程有一个优先级,优先级由优先数来表示。优先级不同时调度优先权最高的进程,优先级相同时按照FCFS顺序调度。

3.3.1非抢占式

注:数字越小,优先级越高

  • 例子:0时刻P1到达开始运行,2时刻P2到达,优先级比P1低,继续运行P1。P1运行结束后开始运行P2。由于P2运行时间较长,P3、P4、P5相继到达。此时P2未结束,但P5的优先级为当前所有进程最高,因此在P2运行完成后先运行P5,最后按优先级依次运行P3和P4。

alt text

3.3.2抢占式

新进程到达就绪队列是,若优先级比当前执行的进程高,则优先运行新进程。

3.4时间片轮转算法(RR)

时间片轮转算法会为每个执行的进程分配固定的执行时间,当时间一到则当前执行的进程将会转入就绪队列中,与此同时按照FCFS算法从就绪队列中取出新的进程执行。该调度算法也是目前主流操作系统使用的进程调度算法。

  • 例子:假设系统的时间片为4,P1先到达,先执行P1。在执行过程中P2到达,由于P1执行时长为3,未使用完时间片,因此P1顺利完成并开始执行P2。在第二个时间片中,P3和P4先后到达。由于P2执行时间为6,大于时间片,因此在第7时刻时P2中断并进入就绪队列(此时P2未顺利完成),系统开始执行P3。在P3运行过程中P5到达。到11时刻时P3顺利完成,开始运行P4。由于P4运行时长超过时间片长度,因此在15时刻时P4中断。此时就绪队列中进程顺序为P2、P5、P4,三个进程执行时间小于时间片,按FCFS执行。

alt text

3.4多级队列调度

将就绪队列分为多个队列,每个队列都有不同优先级。当进程进入系统后根据具体情况如内存大小、优先级等分批进入不同队列中。队列之间使用优先级调度,同一队列使用自己的调度算法。

  • 例子:前台交互优先级比后台批处理高,因此前台使用RR,后台使用FCFS。高优先级进程未运行完,低优先级进程无法运行,在低优先级进程运行时若高优先级进程到达,则可以抢占CPU。

alt text

4.总结

以下是各个算法的比较

调度算法占用CPU方式吞吐量响应时间开销对进程影响饥饿问题
FCFS非抢占不强调可能很慢,尤其进程执行时间差别很大时最小短进程不利;I/O进程不利
RR抢占(时间片用完)时间片很小时吞吐量很低为短进程提供很好响应时间最小公平对待
SJF非抢占为短进程提供很好响应时间可能较大对长进程不利可能
SRTN抢占(到达时)提供很好响应时间可能较大对长进程不利可能
HRRN非抢占提供很好响应时间可能较大很好的平衡
FeedBack抢占(时间片用完)不强调不强调可能较大对I/O进程有利可能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/716951.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【无标题】Pycharm执行报错

file 读取未指定utf-8编码,加上就好了 疑问:为什么 有的电脑可以直接跑呢?该电脑、Pycharm、工程,已经做了修改设置默认值,但是到新的电脑上,就需要重新设置,所以 file 读、写,最好…

超声波清洗机洗眼镜干净吗?四大珍藏高分超声波清洗机分享!

超声波清洗机就是一种方便快捷且高效的一种智能清洁工具,作为清洁领域的功能集成产品给人们带来了更高质的清洁体验。无论你是注重生活品质还是追求性价比,又或者是探索智能科技产品的爱好者,超声波清洗机肯定不会让你失望的!毕竟…

常见的安全测试漏洞

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、SQL注入攻击 SQL 注入攻击主要是由于程序员在开发过程中没有对客户端所传输到服务器端的参…

来自红队大佬的经验之谈---命令执行过滤绕过-Windows篇

感谢来自老流氓大佬的投稿,本次文章介绍的是在windows环境下,过滤的“点”和“空格”等符号,导致在写入webshell时会受限。以下是针对该目标的绕过记录。 首先是命令执行和过滤验证,如下:​ 执行dir命令,…

Windows CSC服务特权提升漏洞(CVE-2024-26229)

文章目录 前言声明一、漏洞描述二、漏洞成因三、影响版本四、漏洞复现五、CVE-2024-26229 BOF六、修复方案 前言 Windows CSC服务特权提升漏洞。 当程序向缓冲区写入的数据超出其处理能力时,就会发生基于堆的缓冲区溢出,从而导致多余的数据溢出到相邻的…

生产 的mybatisplus 日志输入到日志文件

默认是输出到控制台.不输出到日志文件 输出到日志文件.需要修改配置 第一步. logging:config: classpath:logback-wshoto.xml第二步 mybatis-plus:configuration:cache-enabled: truedefault-executor-type: reuselog-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl第三步…

Mathtype与word字号对照+Mathtype与word字号对照

字体大小对照表如下 初号44pt 小初36pt 一号26pt 小一24pt 二号22pt 小二18pt 三号16pt 小三15pt 四号14pt 小四12pt 五号10.5pt 小五9pt 六号7.5pt 小六6.5pt 七号5.5pt 八号5pt 1 保存12pt文件 首选选择第一个公式,将其大小改为12pt 然后依次选择 “预置”—…

SaaS产品运营|一文讲清楚为什么ToB产品更适合采用PLG模式?

在数字化时代,ToB(面向企业)产品市场的竞争愈发激烈。为了在市场中脱颖而出,许多企业开始转向PLG(产品驱动增长)模式。这种模式以产品为核心,通过不断优化产品体验来驱动用户增长和业务发展。本…

DPDK环境配置

DPDK环境配置 DPDK(Data Plane Development Kit)是一个开源的软件框架,最初由Intel开发,旨在提升数据包处理性能,尤其是在Intel架构的处理器上。它允许开发者在用户空间(user space)而不是传统…

个人在家如何获取World Scientific文献的经验分享

今天有位同学求助一篇World Scientific文献,他的学校虽然有这个数据库,但订购的该数据库资源内容有限,这位同学所需的文献不在学校订购范围内所以下载不了。今天小编就分享一个在家就可获取各个数据库文献的方法。本文以这篇求助文献为例&…

Linux服务器上激活conda环境conda: error: argument COMMAND: invalid choice: ‘activate‘

正常我们使用如下来流程: 创建环境:conda create -n 环境名称 激活环境:conda activate 环境名称 但是,在Linux服务器上,使用conda activate 环境名称,出现如上图所示的报错。conda: error: argument CO…

一文看懂人工智能、机器学习、深度学习是什么、有什么区别!

引言:走进智能的世界 曾经,人工智能(AI)是科幻小说中的概念,与飞船、外星人并肩而立。 然而,随着时间的推移,AI不再仅仅是幻想的产物,它已经成为我们日常生活中不可或缺的一部分。 在…

虚拟机Ping不通主机

1.问题描述 虚拟机IP: 192.168.3.133 主机ip:192.168.3.137 虚拟机Ping不通主机 主机可以ping通虚拟机 2.解决方案 设置桥接模式 控制面板找到网络和Internet设置 3.问题解决

如何用Xcode创建你的第一个项目?学起来

前言 上一期,咱们已经有安装XCode的教程了。有小伙伴说建议跳过,嗯。。。如果你对开发很熟悉,那可以。但如果不熟悉,建议还是按照教程一步步来哦! 毕竟统一了开发工具,咱们后续讲的内容学习起来也会简单一…

第二十章 迭代器模式

目录 1 迭代器模式介绍 2 迭代器模式原理 3 迭代器模式实现 4 迭代器模式应用实例 5 迭代器模式总结 1 迭代器模式介绍 迭代器模式(Iterator pattern)又叫游标(Cursor)模式,它的原始定义是:迭代器提供一种对容器对象中的各…

基于Matlab的BP神经网络的车牌识别系统(含GUI界面)【W7】

简介: 本系统结合了图像处理技术和机器学习方法(BP神经网络),能够有效地实现车牌的自动识别。通过预处理、精确定位、字符分割和神经网络识别,系统能够准确地识别各种车牌图像,并在智能交通管理、安防监控等…

tyflow线相关教程二

线条生长一 生长静脉二 绳索动画三 两个球线连接四 扫帚五

SRAM和DRAM

1.SRAM(静态RAM) 把存放一个二进制位的物理器件称为存储元,它是存储器最基本的构件。 地址码相同的多个存储元构成一个存储单元。 存储单元的集合构成存储体。 静态RAM的存储元是用双稳态触发器(六晶体管MOS)来记忆…

4.华为三层交换机 配置VLAN 基于全局开启DHCP

目的:PC1 PC2 PC3三个网段通过 DHCP获取自己对应网段的IP地址 LSW1配置 [Huawei]vlan batch 10 20 30 [Huawei]int g0/0/1 [Huawei-GigabitEthernet0/0/1]port link-type trunk [Huawei-GigabitEthernet0/0/1]port trunk allow-pass vlan all [Huawei]dhcp enable …

1V升3V升压LED驱动WT7013

1V升3V升压LED驱动WT7013 WT7013是一款专业的高亮度LED驱动芯片,其具备提供1A驱动电流以支持3W的LED设备运行的能力。此款芯片以其高效率和低功耗的特性,使其在适用于使用1到2个碱性电池或者锂电池供电的LED照明设备中表现卓越。 WT7013 还配备有开路保…