Linux:进程:进程调度

news2025/7/7 16:49:33

进程在CPU上运行具有以下特性:

竞争、独⽴、并⾏、并发

竞争性:系统进程数⽬众多,⽽CPU资源很少甚至只有一个,所以进程之间是具有竞争属性的。为 了⾼效完成任务,更合理竞争相关资源,便具有了优先级

独⽴性:

为了避免一个进程出问题而导致其他进程出现连锁反应,进程之间在一定程度上相互独立,即使是父进程和子进程也是如此

并⾏:有同时多个进程被多个CPU调度运行,这种关系就叫做并行

并发:多个进程在⼀个CPU下采⽤进程切换的⽅式,在⼀段时间之内,让多个进程都得以推进,称 之为并发

基于以上特性,我们要对进程进行调度

进程调度依赖于进程优先级,要了解进程是如何调度的,我们需要先了解进程优先级的规则:

时间片

即CPU分配给该进程允许运行的时间,使各个进程从表面上看是同时进行的。

如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。

如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。

在宏观上:我们可以同时运行多个进程,每个进程并行不悖,同时运行。

但在微观上:由于只有一个CPU,一段时间内只能运行一个进程,如何处理公平,一种方法就是引入时间片,让每个进程轮流运行。

进程切换

首先,CPU的构成中有许多的寄存器,这些寄存器保存着当前运行的进程的数据。

寄存器被所有进程共享,寄存器内的数据,是属于当前运行进程的,这个数据也被称为 — 上下文数据

当操作系统想要运行一个进程,会将对应进程PCB地址传给CPU的某一个寄存器。让CPU能找到这个进程PCB,从而找到对应代码和数据。

当进程运行将指令传给CPU,CPU靠指令集分析指令运行对应代码,当进程的时间片结束后,操作系统将保存此时CPU中寄存器内的数据,当再次轮到这个进程后操作系统将原本数据加载到寄存器中,eip就可以通过下一条指令地址让代码继续运行。

进程退出CPU,操作系统保留寄存器里的数据,进程回到CPU,操作系统将原本数据恢复到寄存器中。这就完成了进程切换。

进程优先级

Linux进程的优先级是用来确定在多个进程同时运行时,哪个进程会获得更多的CPU时间片

Linux进程的优先级分为实时优先级和普通优先级。

我们不需要关心实时优先级,只需关注普通优先级即可

查看系统进程

在linux系统中,⽤ps ‒l命令则会输出以下内容:

  

• UID:代表执⾏者的⾝份

• PID:代表这个进程的代号

• PPID:代表⽗进程的代号

• PRI:代表这个进程可被执⾏的优先级,其值越⼩越早被执⾏,普通进程的PRI的范围为[60,99]

• NI:代表这个进程的nice值

nice值

nice值用于调整PRI,其方法为:PRI(old)=PRI(new)+nice(PRI默认为80)

所以,在Linux系统中,调整进程优先级,就是调整进程nice值

nice其取值范围是-20⾄19,⼀共40个级别,对应了普通进程的PRI范围

实例:修改进程11835的nice值,进而改变PRI

 

普通进程向用户显示的PRI的范围为[60,99],经内核处理为[100,139]:

​ 

下面介绍如何通过优先级来调度进程

Linux2.6内核:进程O(1)调度队列

在内核中有一个名为runqueue的数据结构负责进程的调度,

其中有一个类型为task_struct的指针数组queue[140]

而queue[i]为PRI为i的task_struct链表的头节点

CPU空闲时,就可以遍历这个指针数组,找到第一个不为空的节点并沿着这条链表执行

当然,遍历数组效率较低,所以实际是通过位图(bitmap)来实现的:

即bitmap[5]是一个整形数组,大小为160bit,我们只需要前120个bit,每一个bit对应一个queue[i],1表示queue[i]不为空,0表示为空,这样我们可以通过高效的位运算来找到PRI最低的task_struct链表

饥饿问题

刚才的调度队列存在一个问题:

如果一个进程的PRI很高,而此时又不断地有PRI较低的进程被创建,那么新创建的进程总是会

先于该进程被CPU运行,导致该进程一直无法被执行,这就是进程的饥饿问题

为了解决这个问题,Linux在一个runqueue里维护了两个队列:活动队列和过期队列,具体实现是将表示队列内进程数量的nr_active和queue[140]和bitmap[5]组成一个新的数据结构struct q,并在runqueue内定义一个struct q数组array[2], 

其中array[0]为活跃队列,由指针active维护,而array[1]为过期队列,由指针expired维护

CPU通过active指针和expired指针来访问活动队列和过期队列

CPU空闲时,总是从活动队列中寻找优先级最高的进程来执行

当活动队列为空时,会直接将active指针和expired指针交换

新进程或是在CPU上执行时时间片用完,被CPU剥离的进程会进入过期队列

这就在很大程度上避免了饥饿问题

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

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

相关文章

Stable Diffusion 图像生成 GUI 应用:图像缩放等五个优化——SD界面学习记录

本篇续前面Stable DiffusionPyqt5实现图像生成和管理界面,链接如下: Stable DiffusionPyqt5: 实现图像生成与管理界面(带保存 历史记录 删除功能)——我的实验记录(结尾附系统效果图)-CSDN博客…

职坐标解码互联网行业转型发展新动能

当前,互联网行业正以前所未有的速度重塑全球产业格局。工信部最新数据显示,我国互联网企业营收连续三年保持双位数增长,其中百强企业在人工智能、物联网等领域的投入强度同比提升40%,展现出强劲的技术引领力。与此同时&#xff0c…

【含文档+PPT+源码】基于微信小程序的非遗文化黄梅戏宣传平台的设计与实现

课程目标: 教你从零开始部署运行项目,学习环境搭建、项目导入及部署,含项目源码、文档、数据库、软件等资料 课程简介: 本课程演示的是一款基于微信小程序的非遗文化黄梅戏宣传平台的设计与实现,主要针对计算机相关…

Causal Attention的底层原理

Causal Attention Transformer的Decoder中最显著的结构是Casual Attention。 通过本篇文章,你将学会 Casual Attention的机制原理 Casual Attention在TensorFlow中的实现原理 如何快速地保存并打印TensorFlow中模型已经训练好的参数 如何实现Transformer的Dec…

CyberAgentAILab 开源数字人项目TANGO,heygen的开源版来了~

简介 TANGO 是 CyberAgentAILab 开源的一项前沿研究成果,其初衷在于探索高效生成模型在实际应用场景中的表现。项目诞生于 CyberAgent 在整合创意与人工智能的实践中,旨在为数字内容生成、交互和实时渲染等领域提供一个高性能、模块化、可扩展的解决方案…

ROS ROS2 机器人深度相机激光雷达多传感器标定工具箱入门教程(一)

系列文章目录 目录 系列文章目录 前言 一、安装 1.1 ROS 2 官方软件包 二、教程 2.1 标定配置器 2.1.1 机器人选项 2.1.2.1 外参相机-激光雷达标定 2.1.2.2 外参激光雷达-激光雷达标定 2.1.2.3 外参相机参照标定 2.1.2.4 外参激光雷达-参考标定 2.2 外参照相机-激…

【HDFS入门】HDFS与Hadoop生态的深度集成:与YARN、MapReduce和Hive的协同工作原理

目录 引言 1 HDFS核心架构回顾 2 HDFS与YARN的集成 3 HDFS与MapReduce的协同 4 HDFS与Hive的集成 4.1 Hive架构与HDFS交互 4.2 Hive数据组织 4.3 Hive查询执行流程 5 HDFS在生态系统中的核心作用 6 性能优化实践 7 总结 引言 在大数据领域,Hadoop生态系统…

用 AI 十天开发小程序:探秘 “幸运塔塔屋” 之 “解惑指南书” 功能

在当今软件开发领域,AI 技术正以前所未有的速度改变着我们的开发方式。我仅用十天时间,借助 AI 成功开发出 “幸运塔塔屋” 小程序,其中 “解惑指南书” 功能别具一格。今天,就为大家详细剖析这个功能从构思到落地的全过程。 十天…

直流电源基本原理

整流电路 在构建整流电路时,要选择合适参数的二极管 If是二极管能够通过电流的能力,也是最大整流的平均电流。 还要考虑二极管的反向截至电压。 脉动系数电压交流幅值/直流平均电压(越小越好) 三相整流电路优点: …

osu ai 论文笔记 DQN

e https://theses.liacs.nl/pdf/2019-2020-SteeJvander.pdf Creating an AI for the Rhytm Game osu! 20年的论文 用监督学习训练移动模型100首歌能达到95准确率 点击模型用DQN两千首歌65准确率 V抖用的居然不是强化学习? 5,6星打96准确度还是有的东西的 这是5.…

MapReduce实验:分析和编写WordCount程序(对文本进行查重)

实验环境:已经部署好的Hadoop环境 Hadoop安装、配置与管理_centos hadoop安装-CSDN博客 实验目的:对输入文件统计单词频率 实验过程: 1、准备文件 test.txt文件,它是你需要准备的原始数据文件,存放在你的 Linux 系…

Windows Acrobat Pro DC-v2025.001.20435-x64-CN-Portable便携版

Windows Acrobat Pro 链接:https://pan.xunlei.com/s/VOO1nMjQ1Qf53dyISGne0c_9A1?pwdsfgn# Acrobat Pro 2024 专业增强版特色 ● 创建和编辑 PDF 文件:可以将各种类型的文档转换为 PDF 格式,并进行编辑和修改。 ● 合并和拆分 PDF&#…

Oracle 12.1.0.2补丁安装全流程

第一步,先进行备份 tar -cvf u01.tar /u01 第二步,更新OPatch工具包 根据补丁包中readme信息汇总提示的信息,下载对应版本的OPatch工具包,本次下载的版本为: p6880880_122010_Linux-x86-64.zip opatch版本为最新的…

【SpringBoot+Vue自学笔记】003 SpringBoot Controll

跟着这位老师学习的:https://www.bilibili.com/video/BV1nV4y1s7ZN?vd_sourceaf46ae3e8740f44ad87ced5536fc1a45 这段话的意思其实是:Spring Boot 简化了传统 Web 项目的搭建流程,让你少折腾配置,直接开搞业务逻辑。 &#x1f52…

探索Web3平台的数据安全和保护机制

在数字化时代,Web3 平台以其去中心化、透明性和用户主权等特点,正逐渐成为互联网技术的新宠。然而,随着数据价值的日益凸显,Web3 平台的数据安全和保护机制变得尤为重要。本文将深入探讨 Web3 平台的数据安全和保护机制&#xff0…

《基于神经网络实现手写数字分类》

《基于神经网络实现手写数字分类》 一、主要内容: 1、通过B站陈云霁老师的网课,配合书本资料,了解神经网络的基本组成和数学原理。 2、申请云平台搭建实验环境 3、基于5个不同的实验模块逐步理解实验操作步骤,并实现不同模块代码…

1 cline 提示词工程指南-架构篇

cline 提示词工程指南-架构篇 本篇是 cline 提示词工程指南的学习和扩展,可以参阅: https://docs.cline.bot/improving-your-prompting-skills/prompting 前言 cline 是 vscode 的插件,用来在 vscode 里实现 ai 编程。 它使得你可以接入…

代理模式简述

目录 一、主要角色 二、类型划分 三、静态代理 示例 缺点 四、动态代理 JDK动态代理 示例 缺点 CGLib动态代理 导入依赖 示例 五、Spring AOP 代理模式是一种结构型设计模式,通过代理对象控制对目标对象的访问,可在不改变目标对象情况下增强…

【Docker】运行错误提示 unknown shorthand flag: ‘d‘ in -d ----详细解决方法

使用docker拉取Dify的时候遇到错误 错误提示 unknown shorthand flag: d in -dUsage: docker [OPTIONS] COMMAND [ARG...]错误原因解析 出现 unknown shorthand flag: d in -d 的根本原因是 Docker 命令格式与当前版本不兼容,具体分为以下两种情况: 新…

【AI插件开发】Notepad++ AI插件开发实践:实现对话窗口功能

引言 之前的文章已经介绍实现了AI对话窗口,但只有个空壳,没有实现功能。本次将集中完成对话窗口的功能,主要内容为: 模型动态切换:支持运行时加载配置的AI模型列表交互式输入处理:实现多行文本输入与Ctrl…