操作系统-进程调度

进程调度

文章目录

  • 进程调度
    • 前言
    • 进程和作业区别
      • CPU调度程序
      • 抢占调度
      • 调度程序
      • 上下文切换
    • 调度准则
    • 调度算法

前言

对于单处理器系统,同一时间只能有一个进程可以运行,其他的进程都应该等待,知道CPU空闲可以调度为止。

多道程序的目标是:CPU始终允许一个进程运行并以最大的CPU利用率。

一个进程执行直到他应等待为止,通常等待某个I/O请求的完成,而这时CPU就会处于闲置状态。

多个进程同时处于内存中时,当一个进程等待时,操作系统会从该进程接管CPU控制,并将CPU 交给另外一个进程

来使用。

  • 长期调度程序

    • 长期调度就行一个阀门,用于限制系统中真正被短期调度的进程数量,避免短期调度的开销过大。当长期调度为某个程序创建了进程 并将其状态设置为就绪状态后,会由短期调度进一步管理该进程。因此,长期调度决定了当前真正可被调度的进程的数量。
    • 长期调度可以根据当前系统中的CPU、I/O利用率情况,选取合适的计算密集型或I/O密集型进程,交由短期调度管理。如此,可以有效地控制系统中的资源利用情况,避免出现激烈的资源竞争或某项资源的利用率过低的情况。
  • 短期调度程序(CPU调度程序)

​ 短期调度主要进程在就绪状态、运行状态、阻塞状态间的转换

进程和作业区别

  • 作业是用户需要计算机完成某项任务而要求计算机所做的工作的集合,一个作业的完成需要经历作业提交、作业收容、作业执行和作业完成四个阶段。而进程是已提交的作业的执行过程,是资源分配的基本单位
  • 作业是用户向计算机提交的任务实体。在用户向计算机提交作业之后,系统将他放入外存中的作业等待队列中等待执行,而进程则是完成用户任务的执行实体,是向系统分配资源的基本单位。任一进程,只要被创建,就会有一部分存在在内存当中
  • 一个作业可由一个以上的进程构成,而一个进程却不能构成多个作业

CPU调度程序

每当CPU空闲时,操作系统就应从就绪队列中选择一个进程来执行,进程选择采用短期调度程序,调度程序从内存中选择一个能执行的进程,并为其分配CPU。

就绪队列不必时先进先出队列,也可以时优先队列、树、简单的无序链表等,

抢占调度

需要CPU调度的情况可分为四种情况:

  • 当一个进程从运行状态切换到等待状态(例如:I/O请求,或者wait()调用)
  • 当一个进程从运行状态切换到就绪状态(例如:发生中断)
  • 当一个进程从等待状态切换到就绪状态(例如:I/O完成)
  • 当一个进程终止。

如果调度只能发生在第一个和第四种情况,则调度方案称为 非抢占的,否则称为抢占的

调度程序

与CPU调度功能有关的另一个组件就是调度程序,调度程序是一个模块,用来将CPU控制交给由短期调度程序选择的进程,这个功能包括:

  • 切换上下文
  • 切换到用户模式
  • 跳转到用户程序的合适位置,以便重新启动程序。

这个过程应该尽可能块,因为使用比较频繁,调度程序停止一个进程转而启动另一个进程所花费的时间称为调度延迟

上下文切换

切换CPU到另一个进程需要保存当前进程状态和恢复另一个进程状态,这个任务称为上下文切换。

在进行上下文切换时,内核会将旧进程的状态保存在PCB 中。

调度准则

  • CPU利用率
  • 系统吞吐量

​ 一个时间单元内进程的完成数量

  • 周转时间

​ 从进程提交到进程完成的时间称为周转时间,周转时间是所有时间段之和,包括等待进入内存、在就绪队列中等待、在CPU上执行和I/O执行。

  • 等待时间

​ 在就绪队列中所花的时间之和

  • 响应时间

​ 提交请求到产生第一次响应的时间

调度算法

  • 先来先服务(FCFS)调度算法   该算法用于作业调度也可用于进程调度,FCFS算法属于非抢占调度算法,主要特点是:算法简单、但效率底,对长作业有利,而不利于短作业。
  • 短作业优先(SJF)调度算法   短作业优先调度算法是指对段作业(进程)优先调度的算法。SJF也有以下特点:
  1. 该算法对长作业不利,可能使得长作业长期不被调度,出现讥饿现象。
  2. 该算法完全没有考虑作业的紧迫程度,因而不能保证紧迫性的作业被及时处理。
  3. SJF调度算法的平均等待时间和平均周转时间最少。
  • 优先级调度算法   在作业调度中,优先级调度算法每次从后备作业队列中选择优先级别最高的一个或者几个将他们装入内存,并分配资源创建进程放入就绪队列。在进程调度中,优先级调度算法从就绪队列中选择优先级别最高的进程,为其分配处理机,使之运行。根据调度方式,可以将优先级调度算法分为:
  1. 非抢占式优先级调度算法。
  2. 抢占式优先级调度算法。
  • 时间片轮转调度算法   时间片轮转算法主要用于分时系统。进程调度算法按照先到先服务的规则选择就绪队列的第一个进程执行,但是仅能执行一个时间片,当使用完时间片后,即使进程没有完成运行也必须释放CPU,返回到就绪队列的尾部。该算法主要特点是时间片的长短对系统性能影响很大:
  1. 如果时间片比较长,则时间片轮转调度算法就退化为FCFS调度算法。
  2. 如果时间片比较短,那么处理机将在进程间过于频繁的切换,系统开销很大。
  • 多级队列调度算法   它将就绪队列分为多个独立的队列,例如系统进程队列、交互进程队列…。根据进程属性,一个进程被永久的分配到一个队列中,每个队列都有自己的调度算法。另外,队列之间必须有调度,通常采用固定优先级抢占调度。每个队列与更低层队列相比具有绝对的优先级。每个进程永远只在一种队列中,这种调度的优点是低调度开销,缺点是不够灵活。
  • 多级反馈队列调度算法   它的主要思想是根据不同的CPU区间特点来区分进程,如果进程使用过多的CPU时间,那么他会被转移到更低优先级队列,此外在较低优先级队列中等待时间较长的进程会被移动到更高优先级队列。这种调度方式可以阻止讥饿的发生

此部分摘取自:https://blog.csdn.net/TuxedoLinux/article/details/85232496

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

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

相关文章

lua的GC

关于lua的gc云风大佬在 Lua GC 的源码剖析 系列文章中讲得很清楚,这里做一下简单的记录。 分步gc lua使用的是一种三色标记清除算法(tri-color incremental mark & sweep),大体步骤如下: 初始阶段,所…

【FreeRTOS】估算栈的大小

参考《FreeRTOS入门与工程实践(基于DshanMCU-103).pdf》 目录 估算栈的大小回顾简介计算说明估计函数用到的栈有多大合计 估算栈的大小 回顾 上一篇文章链接:http://t.csdnimg.cn/Cc8b4 传送门: 上一篇文章 上一篇文章创建的三个任务 /* 创建任务:声 *…

22.HandlerPipeline

ChannelHandler用来处理Channel上的各种事件,分为入站和出站两种。 所有的ChannelHandler被连成一串,就是Pipeline。 入站处理器通常是ChannelInboundHandlerAdapter的子类,主要用来读取客户端数据,写回结果。 出站处理器通常是ChannelOutboundHandlerAdapter的子类,主…

Uni-app x

uni-app x,是下一代 uni-app,是一个跨平台应用开发引擎。 uni-app x 是一个庞大的工程,它包括uts语言、uvue渲染引擎、uni的组件和API、以及扩展机制。 uts是一门类ts的、跨平台的、新语言。uts在iOS端编译为swift、在Android端编译为kotli…

LabVIEW开发为何仿制(致敬)经典成熟软件

​仿制(致敬)成熟软件进行LabVIEW开发更方便,因其提供了稳定的架构和结构、优化的用户体验和界面设计、技术规范和标准、稳定性和可靠性。结合用户手册和现有操作进行仿制,就像小米致敬保时捷一样,可以提高开发效率、降…

vivado SITE

描述 SITE是一个设备对象,表示许多不同类型的逻辑资源之一 可在目标Xilinx FPGA上获得。 SITE包括SLICE/CLB,它们是基本逻辑元件(BEL)的集合,如 查找表(LUT)、触发器、多路复用器,携…

QT/基于TCP的服务端实现

代码 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),p(new QTcpServer(this))//给服务器指针申请空间 {ui->setupUi(this); }Widget::~Widget() {delete ui; }void W…

实测:三款垃圾CPU推理Llama3 8B

经常有一些朋友问我本地运行大模型的电脑需要什么样的配置。其实一些常用大模型的运行需要的硬件并不像我们想象的那样高不可攀。不要被那些复杂的技术术语所吓倒,关键在于亲自动手尝试。 “不试,怎么知道呢?” 这句话道出了真理。今天&#…

【Linux】基础IO_1

文章目录 六、基础IO1. C语言的文件接口2. 系统文件I/O 未完待续 六、基础IO 1. C语言的文件接口 我们知道 文件 文件内容 文件属性 。即使是一个空文件,仍然会在磁盘中占据空间。那打开文件是什么意思呢?其实文件打开的意思就是:将文件从…

package cmp is not in GOROOT (/usr/local/go/src/cmp)

具体错误 env CGO_ENABLED0 go build -trimpath -ldflags "-s -w" -tags frpc -o bin/frpc ./cmd/frpcclient/admin_api.go:18:2: package cmp is not in GOROOT (/usr/local/go/src/cmp)pkg/util/util/util.go:23:2: package math/rand/v2 is not in GOROOT (/usr/…

力扣每日一题 6/19 排序+动态规划

博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 2713.矩阵中严格递增的单元格数【困难】 题目: 给你一个下标从…

【学习DayNa】信息系统开发整理

✍🏻记录学习过程中的输出,坚持每天学习一点点~ ❤️希望能给大家提供帮助~欢迎点赞👍🏻收藏⭐评论✍🏻指点🙏 结构化方法 结构是指系统内各个组成要素之间的相互联系、相互作用的框架。结构化开发方法就是…

Java应用打包成Docker镜像

# 使用官方的OpenJDK17镜像作为基础镜像 FROM openjdk:17 # 设置工作目录 WORKDIR /app # 复制本地的Java应用程序文件到镜像中的指定目录 COPY target/bear-module-system-0.0.1-SNAPSHOT.jar /app/bear-module-system-0.0.1-SNAPSHOT.jar # 暴露API端口 EXPOSE 8888 …

shell中的流程控制

条件判断在流程控制中的重要性 有了条件判断才能进行if判断即分支流程,才能进行case的多分支流程,才能进行for循环和while循环。 单分支流程判断 如上图所示,在shell编程中常使用英文状态下的分号来在Linux控制台一次性执行多条命令&#x…

小米SU7遇冷,下一代全新车型被官方意外曝光

不知道大伙儿有没有发现,最近小米 SU7 热度好像突然之间就淡了不少? 作为小米首款车型,SU7 自上市以来一直承载着新能源轿车领域流量标杆这样一个存在。 发售 24 小时订单量破 8 万,2 个月后累计交付破 2 万台。 看得出来限制它…

运算放大器(运放)缓冲器(跟随器)电路

运算放大器(Operational Amplifier) 运算放大器(Operational Amplifier)是一种差分放大器,具有高输入电阻、低输出电阻、高开放增益(开环增益),并具有可放大输入引脚与-输入引脚间的电压差的功能。 设计目标 输入输入输出输出频…

“打卡展示”后遗症如何解决

最近看了一本书,里边提到的学习打卡,健身打卡,早期打卡,不管是在家里,在学校,上班族,都在抓紧一切时间提升自己,为了实现目标出现了形形色色的打卡,只要你能想得到的领域…

HTML李峋同款跳动的爱心代码(双爱心版)

目录 写在前面 跳动的爱心 完整代码 代码分析 系列推荐 最后想说 写在前面 在浩瀚的网络世界中,总有一些小惊喜能触动我们的心弦。今天,就让我们用HTML语言,探索既神秘又浪漫的李峋同款跳动的爱心代码吧。 首先,让我们一起…

基于Pytorch框架的深度学习Swin-Transformer神经网络食物分类系统源码

第一步:准备数据 5种鸟类数据:self.class_indict ["苹果派", "猪小排", "果仁蜜饼", "生牛肉薄片", "鞑靼牛肉"] ,总共有5000张图片,每个文件夹单独放一种数据 第二步&…

分布式锁(4):jedis基于Redis setnx、get、getset的分布式锁

1 实现原理 setnx(lockkey, 当前时间+过期超时时间) ,如果返回1,则获取锁成功;如果返回0则没有获取到锁,转向步骤(2)get(lockkey)获取值oldExpireTime ,并将这个value值与当前的系统时间进行比较,如果小于当前系统时间,则认为这个锁已经超时,可以允许别的请求重新获取,…