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

news2024/11/26 9:57:12

操作系统入门 – 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进程有利可能

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

外链是否会增加流量?

外链确实可以间接地帮助增加网站流量,不过要了解的是这不是直接影响,首先,外链主要是提升你的网站在搜索引擎中的整体权重。简单地说,当你的网站被很多其他的网站通过dofollow链接指向时,搜索引擎会认为你的网站内容质…

TCP三次握手和四次挥手过程简介(抓包分析,简单易懂,小白)

接上篇 传输层部分 链路层、网络层、传输层和应用层协议详解分析-CSDN博客文章浏览阅读689次,点赞10次,收藏15次。wireshark抓包分析-CSDN博客wireshark是网络包分析工具网络包分析工具的主要作用是尝试捕获网络包,并尝试显示包的尽可能详细…

SQL Server数据库安装

原文:https://blog.c12th.cn/archives/26.html SQL Server数据库安装 测试:笔记本原装操作系统:Windows 10 家庭中文版 资源分享链接:提取码:qbt2 注意事项: 请严格按照步骤安装,SQL软件安装较…

单片机 PWM输入捕获【学习记录】

前言 学习是永无止境的,就算之前学过的东西再次学习一遍也能狗学习到很多东西,输入捕获很早之前就用过了,但是仅仅是照搬例程没有去进行理解。温故而知新! 定时器 定时器简介 定时器的分类 高级定时器 通用定时器 基本定时器…

用TensorRT-LLM进行LLama的推理和部署

Deploy an AI Coding Assistant with NVIDIA TensorRT-LLM and NVIDIA Triton | NVIDIA Technical BlogQuick Start Guide — tensorrt_llm documentation (nvidia.github.io) 使用TensorRT-LLM的源码,来下载docker并在docker里编译TensorRT-LLM; 模型…

LabVIEW回热系统热经济性分析及故障诊断

开发了一种利用LabVIEW软件的电厂回热系统热经济性分析和故障诊断系统。该系统针对火电厂回热加热器进行优化,通过实时数据监控与分析,有效提高机组的经济性和安全性,同时降低能耗和维护成本。系统的实施大幅提升了火电厂运行的效率和可靠性&…

【调试笔记-20240617-Linux- frp 结合 nginx 实现内网网站在公网发布】

调试笔记-系列文章目录 调试笔记-20240617-Linux- frp 结合 nginx 实现内网网站在公网发布 文章目录 调试笔记-系列文章目录调试笔记-20240617-Linux- frp 结合 nginx 实现内网网站在公网发布 前言一、调试环境操作系统:Windows 10 专业版调试环境调试目标 二、调试…

CSS-0_2 CSS和继承(inherit initial)

文章目录 CSS的层叠和继承inheritinitial很多你以为的样式初始值,其实是用户代理样式 碎碎念 CSS的层叠和继承 在上一篇 CSS和层叠、样式优先级 里已经讲过了层叠和优先级之间的关系,但是在CSS中的层叠除了体现在争抢露脸机会的优先级之外,还…

HTML/CSS Xiaomi综合案例day 6.13-6.16

ok了家人们今天不做别的,今天浅做一个小米网站,话不多说看看怎么事 一.顶部 我们先看看代码 1,html 2,css代码 1.我们先消除浏览器自带的内外边距,添加一个总背景颜色为浅灰色,设置顶部盒子的大小&#x…

【电脑小白】装机从认识电脑部件开始

前言 在 B 站上刷到了一个很牛逼的电脑装机视频,很适合电脑小白学习,故用文本记录下。 推荐对组装台式电脑有兴趣的小伙伴都去看看这个视频: 原视频链接:【装机教程】全网最好的装机教程,没有之一_哔哩哔哩_bilibil…

JVM-GC-常用调优命令和GC参数

定位问题常用命令 top:查看内存/CPU占用情况top -Hp pid: 查看进程内线程情况jsp:查看java进程情况jstack 线程pid:查看进程内线程信息,一般查看线程状态,判断是否死锁。重点观察:WAITING、BLOCKED的线程,另外查看wait…

【网络安全】网络安全威胁及途径

1、网络安全威胁的种类及途径 (1)网络安全威胁的主要类型 网络安全面临的威胁和隐患种类繁多,主要包括人为因素、网络系统及数据资源和运行环境等影响。网络安全威胁主要表现为:黑客入侵、非授权访问、窃听、假冒合法用户、病毒…

【读博日记】拓扑结构(待修正)

Topology 拓扑学 内容来源于互联网,还在甄别中——20240617 拓扑结构指把实体抽象成与其形状大小无关的点,把连接实体的线路抽象成线,再研究这些电线之间的关系。 所谓相似的拓扑结构: 例如一个圆环变成正方形、长方形、三角形…

基 CanMV 的 C 开发环境搭建

不论是使用 CanMV 提供的基于 C 语言和 FreeRTOS 的应用开发方式开发应用程序或是编译 CanMV 固件,都需要搭建基于 CanMV 的 C 开发环境,用于编译 CanMV 源码。 1. 开发环境搭建说明 CanMV 提供了基于 C 语言和 FreeRTOS 的应用开发…

读AI新生:破解人机共存密码笔记04计算的极限

1. 计算的极限 1.1. 光靠速度是无法给我们带来人工智能的 1.1.1. 在速度更快的计算机上运行糟糕的算法并不会使算法变得更优秀,这只意味着你会更快地得到错误的答案 1.1.2. 数据越多,错误答案出现的机会就越大 1.…

EE trade:现货黄金杠杆比例的计算方法

现货黄金杠杆交易是一种利用保证金进行交易的方式,允许投资者用较少的资金控制较大的交易量,从而放大收益或损失。杠杆比例的计算方法相对简单,主要取决于交易所需的保证金和实际交易金额之间的关系。 杠杆比例的计算公式 杠杆比例 实际交…

使用插件永久解决IDEA使用Shift+F10失效问题(不需要换老版本输入法)

在日常编程中,使用快捷键可以大大提高开发效率。然而,有时候我们会遇到IDEA 中,ShiftF10 快捷键失效。这个蛋疼的问题现在终于可以得到解决,上个月在逛V2EX的时候看见一位大佬做的插件。 大佬链接:https://www.v2ex.c…

物联网技术-第4章物联网通信技术-4.1计算机网络

目录 1.1计算机网络拓扑与组成 (1)全连通式网络 (2)星型网 (3)环形网 (4)总线网 (5)不规则型网 1.2数据交换类型 (1)电路交换网 &…

STM32单片机DMA存储器详解

文章目录 1. DMA概述 2. 存储器映像 3. DMA框架图 4. DMA请求 5. 数据宽度与对齐 6. DMA数据转运 7. ADC扫描模式和DMA 8. 代码示例 1. DMA概述 DMA(Direct Memory Access)可以直接访问STM32内部的存储器,DMA是一种技术,…

C++ | Leetcode C++题解之第162题寻找峰值

题目&#xff1a; 题解&#xff1a; class Solution { public:int findPeakElement(vector<int>& nums) {int n nums.size();// 辅助函数&#xff0c;输入下标 i&#xff0c;返回一个二元组 (0/1, nums[i])// 方便处理 nums[-1] 以及 nums[n] 的边界情况auto get …