Linux下的进程切换与调度

news2025/2/14 4:53:34

目录

1.进程的优先级

优先级是什么

Linux下优先级的具体做法

优先级的调整为什么要受限

2.Linux下的进程切换

3.Linux下进程的调度


1.进程的优先级

我们在使用计算机的时候,通常会启动多个程序,这些程序最后都会变成进程,但是我们的硬件设备都只有一套,当多个进程需要使用同一个硬件设备的时候,就必须进行排队,那进程按照什么来排队呢?就是按照优先级来排队的。也就是说,Linux系统是通过优先级的方式来决定进程享受资源的先后顺序的。

优先级是什么

优先级和标识符一样,也是进程的属性,进程的属性包含在task_struct结构体中,所以,进程的优先级其实就是task_struct结构体中的一个变量。

Linux下优先级的具体做法

Linux系统通过 PRI 和 NI 共同决定优先级的大小:

  • PRI 表示进程的优先级,PRI的初始值为80。
  • NI表示进程优先级的修正数据,NI的初始值为0。
  • PRI = PRI(old)+ NI。

我们可以通过 ps -l 命令查看进程的优先级:

  • 注意:PRI的值越小,优先级越高。

如果我们想调整进程的优先级,我们只能通过修改nice值NI来修改,而不能直接修改PRI,修改优先级的步骤如下:

  • 输入top命令并回车
  • 输入r并回车
  • 输入要修改进程的pid并回车
  • 输入nice值并回车

Linux的优先级是有范围的,从60到99,一共40个优先级;NI的取值范围就是[-20, 19]。NI 更像是进程优先级的修正数据。

优先级的调整为什么要受限

如果优先级的调整不加限制,用户就可能会将自己进程的优先级调整的非常高,把别人的进程的优先级调整的非常低,优先级较高的进程优先得到资源,后续还有源源不断的进程产生,常规进程就很难享受到资源,这样一来就会造成一些进程饥饿

2.Linux下的进程切换

当程序加载到内存形成进程之后,会以双链表的形式组织起来,CPU的运行队列的指针会指向其中一个task_struct,CPU就会从运行队列中拿进程去执行,当代计算机系统都有一个时间片,也就是进程占有CPU的最大时间,当时间片结束之后,就需要把当前正在执行的进程从CPU上剥离下来,换另一个进程去占有CPU,但是进程在运行过程中,会产生大量的临时数据,这些临时数据存放在CPU上的寄存器中,CPU内部所有的临时数据,我们称之为进程的上下文,剥离当前进程的时候,我们需要对进程的上下文进行保存,保存在task_struct结构体中的一个结构体变量中,保存好当前进程的上下文之后,操作系统才能够选择一个新的进程放在CPU上执行,当再次执行到保存好上下文的进程的时候,操作系统会先将该进程的上下文恢复,然后从上一次执行的结束位置开始执行。

  • 进程的切换始终遵守上述过程。

3.Linux下进程的调度

在CPU的运行队列中,有一个struct q array[2],array[0]是活动队列,array[1]是过期队列,struct q 类型的结构如下:

  • task_struct queue[140]:表示存放 task_struct 的数组,一个元素就是一个进程队列,相同优先级的进程按照FIFO规则进行排队调度,所以,数组下标就是优先级,但是[0,99]号下标我们不用,我们只使用[100,139]下标,一共40个,和进程的优先级对应起来了
  • nr_active:表示总共有多少个运行状态的进程。
  • bitmap[5]:一共140个优先级,一共140个进程队列,为了提高查找非空队列的效率,就可以用5*32个比特位表示队列是否为空,这样,便可以大大提高查找效率。

运行队列中的 *active = &array[0], *expired = &array[1] 。

操作系统每次调度的时候,只会检查活动队列中的内容,先看nr_active是否为0,不为0的话,表示有运行的进程,然后通过bitmap按顺序判断进程在queue中所处的下标,通过下标直接找到当前优先级的所有进程的PCB,然后依次将当前优先级的所有进程运行一定的时间后,继续寻找下一个优先级的所有进程。

所有运行之后的进程会按照优先级以及先后顺序放到过期队列中,此时可能还会有新的进程到来,当活动队列中的进程全部运行结束之后,交换*active和*expired中的内容,这样一来,过期队列中的内容就到活动队列中去了,然后操作系统继续调度活动队列中的内容,这就是Linux操作系统中关于进程调度的O(1)调度算法。

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

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

相关文章

anolis os 8.9安装jenkins

一、系统版本 # cat /etc/anolis-release Anolis OS release 8.9 二、安装 # dnf install -y epel-release # wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo # rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.…

Java基础知识总结(四十八)--TCP传输、TCP客户端、TCP服务端

**TCP传输:**两个端点的建立连接后会有一个传输数据的通道,这通道称为流,而且是建立在网络基础上的流,称之为socket流。该流中既有读取,也有写入。 **tcp的两个端点:**一个是客户端,一个是服务…

【python】http.server内置库构建临时文件服务

需要从linux开发机上下载一个文件到本地,约700M比较大,通过sz命令下载较慢且传输过程不稳定连续失败,后采用下面方式解决。 cd到一个目录下执行python -m http.server port,port为服务的端口号: 启动后浏览器中访问…

网络安全ids是什么意思

1、 简述IPS和IDS的异同点; 入侵检测系统(IDS) IDS(Intrusion Detection Systems,入侵检测系统),专业上讲就是依照一定的安全策略,对网络、系统、运行状况进行监视,尽可能…

优选驾考小程序

第2章 系统分析 2.1系统使用相关技术分析 2.1.1Java语言介绍 Java语言是一种分布式的简单的 开发语言,有很好的特征,在安全方面、性能方面等。非常适合在Internet环境中使用,也是目前企业级运用中最常用的一个编程语言,具有很大…

42.水果销售系统(springbootvue的Java项目[含微信小程序])

目录 1.系统的受众说明 2.开发环境与技术 2.1 MYSQL数据库 2.2 Java语言 2.3 微信小程序技术 2.4 SpringBoot框架 2.5 B/S架构 2.6 Tomcat 介绍 2.7 HTML简介 2.8 MyEclipse开发工具 3.系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作…

ffmpeg所有版本下载地址

地址如下:Index of /releaseshttps://ffmpeg.org/releases/

记PasteSpider部署工具的Windows.IIS版本开发过程之草稿-效果展示(4)

如果有人给你一串JSON数据,你需要编辑他,对于有开发基础的人来说,可能会好处理下,而对于没有开发基础的人来说,那就是灾难了! 那么有没有一个东西,可以让这个编辑更顺畅呢? 贴代码案例中的DynamicForm你值得拥有!本次展示作者在本机上操作IIS的示例,如下 IIS展示 先…

3D文档控件Aspose.3D实用教程: 在 Java 中创建 FBX 文件并无缝将圆柱体转换为网格

概述 创建FBX文件并将圆柱体转换为网格是 3D 建模和动画中的基本任务。这些过程在游戏、电影和建筑等行业中至关重要。通过使用Aspose.3D for Java ,开发人员可以高效地管理 3D 场景和对象。这个强大的 Java 3D API 简化了 3D 模型的创建和操作。它的易用性和灵活性…

软考高级《系统架构设计师》知识点(一)

计算机硬件 校验码 码距:就单个编码A:00而言,其码距为1,因为其只需要改变一位就变成另一个编码。在两个编码中,从A码到B码转换所需要改变的位数称为码距,如A:00要转换为B:11,码距为2。一般来说,…

HTML 学习记录

HTML 学习记录 html是超文本标记语言&#xff0c;是一种标记语言 超文本&#xff1a;链接 标记&#xff1a;也叫标签&#xff0c;带尖括号的文本 标签语法 1.标签成对出现&#xff0c;中间包裹内容 2.<>里面放英文字母 3.结束标签比开始标签多一个 / 例如 <s…

Mac之JDK安装

Mac之JDK安装 一.安装 jdk 打开终端输入命令:java -version 查看是否已安装 JDK Oracle 官方下载地址 根据自己Mac 系统安装 查看 Mac 系统&#xff0c;打开中断命令&#xff0c;输入: uname -a Compressed Archive 是压缩文档&#xff0c;下载的是一个 .tar.gz 压缩包 D…

centos 10 离线安装dnf 和 设置dnf镜像源

离线安装dnf可用kimi搜索, centos 使用curl 下载dnf 的rpm包 mkdir ~/dnf_packages cd ~/dnf_packages# CentOS 7 示例 curl -O http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-0.6.4-2.sdl7.noarch.rpm curl -O http://springdale.math.ias.edu/data/pu…

【cocos creator】拖拽排序列表

DEMO下载 GameCtrl.ts import ItemCtrl from "./ItemCtrl";const { ccclass, property } cc._decorator;ccclass export default class GameCtrl extends cc.Component {property(cc.Node)content: cc.Node null;property(cc.Node)prefab: cc.Node null;arr []…

设备智能化无线通信,ESP32-C2物联网方案,小尺寸芯片实现大功能

在科技飞速发展的当下&#xff0c;我们的生活正被各类智能设备悄然改变&#xff0c;它们如同一位位无声的助手&#xff0c;渗透到我们生活的每一个角落&#xff0c;让生活变得更加便捷和丰富多彩。 智能插座、智能照明和简单家电设备在家居领域的应用&#xff0c;为我们的生活…

Unity 增量打包AssetBundle

背景 打包太慢了&#xff0c;想要没改动的资源不重新打包浪费时间。 来源 官方文章&#xff1a;https://forum.unity.com/threads/about-incremental-build-and-asset-bundle-hashes.1436032/ 官网AB介绍&#xff1a;https://learn.unity.com/tutorial/assets-resources-and…

MindStudio制作MindSpore TBE算子(四)算子测试(ST测试-Ascend910B/ModelArts)--失败尝试

上一节&#xff0c;MindStudio制作MindSpore TBE算子&#xff08;三&#xff09;算子测试&#xff08;ST测试&#xff09;&#xff0c;因此缺乏对应的硬件环境导致无法进行ST测试&#xff0c;导致难以自安&#xff0c;今天搞来Ascend910B服务器来填坑&#xff0c;看看是否是硬件…

transformer 基础知识

概要&#xff1a;简要记录 Encoder-Decoder 架构、seq2seq 模型、Attention 机制 Encoder & Decoder encoder 接收输入&#xff0c;生成一个固定长度的上下文向量&#xff08;编码器生成的最终隐藏状态&#xff09;&#xff1b;decoder 接收上下文向量&#xff08;或状态…

机器学习(李宏毅)——self-Attention

一、前言 本文章作为学习2023年《李宏毅机器学习课程》的笔记&#xff0c;感谢台湾大学李宏毅教授的课程&#xff0c;respect&#xff01;&#xff01;&#xff01; 二、大纲 何为self-Attention&#xff1f;原理剖析self-Attention VS CNN、RNN、GNN 三、何为self-Attenti…

实现限制同一个账号最多只能在3个客户端(有电脑、手机等)登录(附关键源码)

如上图&#xff0c;我的百度网盘已登录设备列表&#xff0c;有一个手机&#xff0c;2个windows客户端。手机设备有型号、最后登录时间、IP等。windows客户端信息有最后登录时间、操作系统类型、IP地址等。这些具体是如何实现的&#xff1f;下面分别给出android APP中采集手机信…