当前位置: 首页 > news >正文

Linux:进程的优先级 进程切换

文章目录

  • 前言
  • 一、进程优先级
    • 1.1 基本概念
    • 1.2 查看系统进程
    • 1.3 PRI和NI
    • 1.4 调整优先级
      • 1.4.1 top命令
      • 1.4.2 nice命令
      • 1.4.3 renice命令
  • 二、进程切换
    • 2.1 补充概念
    • 2.2 进程的运行和切换步骤(重要)
  • 二、Linux2.6内核进程O(1)调度队列(重要)
    • 2.1 基本过程


前言

本文主要介绍了进程的优先级及其调度算法:


一、进程优先级

我们计算机里面一般只有一个cpu用来处理进程数据,所以对于进程获得CPU的使用权需要一种重要调度指标,而进程优先级就是这种指标,它用来决定一个进程能够优先获得CPU时间、内存等系统资源。

1.1 基本概念

  • cpu资源分配的先后顺序,就是指进程的优先权(priority)。
  • 优先权⾼的进程有优先执⾏权利。配置进程优先权对多任务环境的linux很有⽤,可以改善系统性
    能。
  • 还可以把进程运⾏到指定的CPU上,这样⼀来,把不重要的进程安排到某个CPU,可能会改善
    系统整体性能。

1.2 查看系统进程

在linux或者unix系统中,⽤ps ‒l 命令则会类似输出以下⼏个内容:
在这里插入图片描述

ps -l命令用于显示当前终端上的所有进程的详细信息。
ps -al命令则更加全面,它显示了系统中所有用户的所有进程(包括其他用户的进程)的详细信息。与ps -l相比,ps -al的输出包含了更多进程的信息,并且不受当前终端的限制。

我们很容易注意到其中的⼏个重要信息,有下:
• UID : 代表执⾏者的⾝份
• PID : 代表这个进程的代号
• PPID :代表这个进程是由哪个进程发展衍⽣⽽来的,亦即⽗进程的代号
• PRI :代表这个进程可被执⾏的优先级,其值越⼩越早被执⾏默认为80
• NI :代表这个进程的nice值

1.3 PRI和NI

• PRI也还是⽐较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执⾏的先后顺序,此
值越⼩进程的优先级别越⾼
• 那NI呢?就是我们所要说的nice值了,其表⽰进程可被执⾏的优先级的修正数值
• PRI值越⼩越快被执⾏,那么加⼊nice值后,将会使得PRI变为:PRI(new)=PRI(oldest)+nice(这意味着我们修改进程优先级的时候,无论中间的PRI怎么改变,都会会以最开始的PRI值作为基准值去改变)
• 这样,当nice值为负值的时候,那么该程序将会优先级值将变⼩,即其优先级会变⾼,则其越快
被执⾏
所以,调整进程优先级,在Linux下,就是调整进程nice值
•nice其取值范围是-20⾄19,⼀共40个级别。(当我们调整的nice值超过这个区间的时候,会以区间里面的最低或最高值作为nice值)

• 需要强调⼀点的是,进程的nice值不是进程的优先级,他们不是⼀个概念,但是进程nice值会影响到进程的优先级变化。可以理解nice值是进程优先级的修正数据


1.4 调整优先级

虽然一般情况下我们是不需要调整优先级的,不过我们仍然需要了解如何调整优先级。使用下面的命令都需要管理者的身份。

1.4.1 top命令

⽤top命令更改已存在进程的nice:

  • top
  • 进⼊top后按“r”‒>输⼊进程PID‒>输⼊nice值
  • 按”q“退出,及修改完成

1.4.2 nice命令

nice命令用于在启动一个新进程时指定其优先级,即进程的“nice值”。Nice值是一个整数,范围从-20(最高优先级)到19(最低优先级),默认情况下,大多数进程的nice值为0。

  • 语法:nice [选项] [nice值] 命令 [参数]
  • 参数:
    -n 或 --adjustment:指定nice值的增量或减量。
    -h 或 --help:显示帮助信息。
    -V 或 --version:显示版本信息。

1.4.3 renice命令

renice命令用于修改已经运行的进程的优先级。

  • 语法:renice [选项] 优先级 进程ID
  • 选项:
    -n:指定要改变的优先级值,取值范围为-20到19。
    -g:指定要调整优先级的进程组ID。
    -u:指定要调整优先级的用户名。
    -p:指定要调整优先级的进程ID(默认)。
    -h 或 --help:显示帮助信息。
    -V 或 --version:显示版本信息。

二、进程切换

2.1 补充概念

• 竞争性:系 统进程数⽬众多,⽽CPU资源只有少量,甚⾄1个,所以进程之间是具有竞争属性的。为
了⾼效完成任务,更合理竞争相关资源,便具有了优先级
• 独⽴性: 多进程运⾏,需要独享各种资源,多进程运⾏期间互不⼲扰
• 并⾏: 多个进程在多个CPU下分别,同时进⾏运⾏,这称之为并⾏
•并发: 多个进程在⼀个CPU下采⽤进程切换的⽅式,在⼀段时间之内,让多个进程都得以推进,称
之为并发

在这里插入图片描述

2.2 进程的运行和切换步骤(重要)

在进程运行的过程中会有个时间片的概念,是操作系统进行进程调度时分配给每个进程的一段固定时间。这么做一部分上是为了防止某个进程卡死的情况,例如某个进程调度的时候代码内部有个while(1)函数导致一直运行。及时的切换到运行队列里其它进程是很有必要的

时间片内,进程可以执行其代码、访问内存和进行输入输出操作。当进程的时间片用完时,操作系统会暂停该进程的执行,并将其保存到某种状态(通常是通过进程控制块PCB),然后切换到另一个进程的时间片。

切换步骤:

  1. 一个时间片结束的进程但是还没被cpu执行完其内部的所有代码数据,从cpu内被剥离下来
  2. 此时进程内临时运行的数据(比如执行到代码的哪一行了,其中变量的一些数据等)会被保存下来(通常是保存到进程的私有堆栈,也就是保存在task_struct本身,及task_struct里面会定义一个或多个变量或指针来存储自己寄存器里面的信息),及cpu内寄存器里面的内容(当前进程的上下文数据)会被保存到某个指定的地方
  3. 这样子寄存器就可以处理新的进程的数据了,而旧的进程可以重新链入运行队列
  4. 当恢复到这个进程的时候,就会把前一次本进程被中止时的中间数据再恢复到cpu寄存器里面去
    在这里插入图片描述

二、Linux2.6内核进程O(1)调度队列(重要)

操作系统是如何根据优先级来开展的调度呢?
一个cpu一个运行队列
在这里插入图片描述
其中queue的类型为struct task_struct队列中的[0-99]为实时优先级我们不做考虑,而[100-139]则是我们进程的优先级序列。

2.1 基本过程

在Linux2.6内核中,每个CPU都拥有一个独立的运行队列(run_queue)。
运行队列用于管理和调度该CPU上的所有可运行进程。

task_struct结构体:
在Linux内核中,每个进程都有一个对应的task_struct结构体,用于存储该进程的所有信息。
它会被链入运行队列中,在运行队列中,task_struct结构体通过指针数组来维护不同优先级的进程队列。
其下的run 对应上面active ,wait对应expired ,running对应活跃进程,waiting对应过期进程
在这里插入图片描述

这是一个类似哈希链地址法的指针数组,遍历这个指针数组从上到下,从左到右就完成了对进程的优先级的调度!!!
除此之外我们在running下设计了个waiting,这么做的目的是

当我们遍历这个指针数组的时候,可能会有新的task_struct插入进来,或者一个进程时间片结束后进程还没被cpu处理完,那么此时就会进入到waiting里面,当running这个指针数组遍历完的时候,利用位图(bitmap)判断指针数据这个队列是否为空然后只需要交换上面图片中的run和wait两者指向指针的地址,就能继续调度未处理完数据或者新的task_struct了!


相关文章:

Linux:进程的优先级 进程切换

文章目录 前言一、进程优先级1.1 基本概念1.2 查看系统进程1.3 PRI和NI1.4 调整优先级1.4.1 top命令1.4.2 nice命令1.4.3 renice命令 二、进程切换2.1 补充概念2.2 进程的运行和切换步骤(重要) 二、Linux2.6内核进程O(1)调度队列(重要&#x…...

web应用安全和信息泄露

使用springboot开发的应用可能存在各种使用不当导致的信息泄露和漏洞,在此记录 1:spring actuator导致的信息泄露 使用spring actuator你可以选择通过使用HTTP端点或使用JMX来管理和监控你的应用程序。 审计、健康和指标收集也可以自动应用于你的应用程…...

创建vue3项目步骤

脚手架创建项目: pnpm create vue Cd 项目名称安装依赖:Pnpm iPnpm Lint:修复所有文件风格 ,不然eslint语法警告报错要双引号Pnpm dev启动项目 拦截错误代码提交到git仓库:提交前做代码检查 pnpm dlx husky-in…...

尽量通俗易懂地概述.Net U nity跨语言/跨平台相关知识

本文参考来自唐老狮,Unity3D高级编程:主程手记,ai等途径 仅作学习笔记交流分享 目录 1. .Net是什么? 2. .Net框架的核心要点? 跨语言和跨平台 .Net x Unity跨平台发展史 Net Framework 2002 Unity跨平台之 Mono 2004 Unity跨平台之 IL2CPP 2015 二者区别 .NET Core …...

【AlphaFold3】开源本地的安装及使用

文章目录 安装安装DockerInstalling Docker on Host启用Rootless Docker 安装 GPU 支持安装 NVIDIA 驱动程序安装 NVIDIA 对 Docker 的支持 获取 AlphaFold 3 源代码获取基因数据库获取模型参数构建将运行 AlphaFold 3 的 Docker 容器 参考 AlphaFold3: https://github.com/goo…...

vue2/vue3中使用的富文本编辑器vue-quill

前言: 整理下常用的富文本编辑器工具。 vue3: 实现效果: 实现步骤: 1、安装插件, 编辑器核心插件 vueup/vue-quill yarn add pnpm i npm i cnpm i vueup/vue-quill vueup/vue-quill 2、安装选择性插件 &a…...

论文阅读《BEVFormer v2》

BEVFormer v2: Adapting Modern Image Backbones to Bird’s-Eye-View Recognition via Perspective Supervision 目录 摘要1 介绍2 相关工作2.1 BEV三维目标检测器 摘要 我们提出了一种具有透视监督的新型鸟瞰图(BEV)检测器,其收敛速度更快…...

自动化运维(k8s):一键获取指定命名空间镜像包脚本

前言:脚本写成并非一蹴而就,需要不断的调式和修改,这里也是改到了7版本才在 生产环境 中验证成功。 该命令 和 脚本适用于以下场景:在某些项目中,由于特定的安全或政策要求,不允许连接到你的镜像仓库。然而…...

HarmonyOS ArkUI(基于ArkTS) 开发布局 (上)

一 ArkUI(基于ArkTS)概述 基于ArkTS的声明式开发范式的方舟开发框架是一套开发极简、高性能、支持跨设备的UI开发框架,提供了构建应用UI所必需的能力 点击详情 特点 开发效率高,开发体验好 代码简洁:通过接近自然语义的方式描述UI&#x…...

第九部分 :1.STM32之通信接口《精讲》(USART,I2C,SPI,CAN,USB)

本芯片使用的是STM32F103C8T6型号 STM32F103C8T6是STM32F1系列中的一种较常用的低成本ARM Cortex-M3内核MCU,具有丰富的通信接口,包括USART、SPI、I2C等。下面是该芯片上通信接口的管脚分布、每个接口的工作模式、常用应用场景和注意事项。 1. USART (通…...

5. langgraph中的react agent使用 (从零构建一个react agent)

1. 定义 Agent 状态 首先,我们需要定义 Agent 的状态,这包括 Agent 所持有的消息。 from typing import (Annotated,Sequence,TypedDict, ) from langchain_core.messages import BaseMessage from langgraph.graph.message import add_messagesclass …...

uniapp vue3的下拉刷新和上拉加载

开启页面的下拉刷新,注意这个不是可滚动视图的下拉刷新. 一般页面建议使用页面外的,不要使用scroll-view里面的下拉刷新. pages: "pages": [ {"path": "pages/index/index","style": {"navigationBarTitleText": "首…...

STM32设计井下瓦斯检测联网WIFI加Zigbee多路节点协调器传输

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 本系统基于STM32微控制器和Zigbee无线通信技术,设计了…...

Vue 3 中的原生事件监听与组件事件处理详解

Vue 3 中的原生事件监听与组件事件处理完全指南 在 Vue 3 中,事件监听和事件处理是组件交互中的关键部分。Vue 提供了一套简单而强大的事件处理机制,可以方便地监听 DOM 原生事件和组件自定义事件。本篇文章将详细介绍 Vue 3 中事件的使用,包…...

Flink Source 详解

Flink Source 详解 原文 flip-27 FLIP-27 介绍了新版本Source 接口定义及架构 相比于SourceFunction,新版本的Source更具灵活性,原因是将“splits数据获取”与真“正数据获取”逻辑进行了分离 重要部件 Source 作为工厂类,会创建以下两…...

2024年了,TCP分析工具有哪些?

TCP分析工具广泛应用于网络调试、性能分析和协议学习。以下是一些常用的TCP分析工具,它们各有特点,适用于不同的场景: Wireshark - 这是一个非常强大的网络协议分析器,支持图形界面,可以捕获和分析TCP流量,…...

SRP 实现 Cook-Torrance BRDF

写的很乱! BRDF(Bidirectional Reflectance Distribution Function)全称双向反射分布函数。辐射量单位非常多,这里为方便直观理解,会用非常不严谨的光照强度来解释说明。 BRDF光照模型,上反射率公式&#…...

MySQL慢日志

慢查询日志顾名思义就是查询慢的sql语句可以记录到一个日志文件里,至于有多慢才会被记录,默认是10秒,但也可以通过系统配置来更改,慢日志在做系统优化时是一个非常好用的工具 #是否开启慢日志 show variables like slow_query_log…...

Flutter网络通信-封装Dio

前言 dio 是一个强大的 Dart HTTP 请求库,支持全局配置、Restful API、FormData、拦截器、 请求取消、Cookie 管理、文件上传/下载、超时以及自定义适配器等。 Dio的pub地址为:dio | Dart package 封装要求 能够使用get、post、put、patch、delete、…...

matlab 读取csv

需要跳过第一行表头等信息 1、读取整个文件 csvread(FILENAME)%文件路径 文件名2、指定起始位置 csvread(FILENAME, R, C)%从文件的第R行和第C列开始读取数据 逗号分开3、指定数据范围 csvread(FILENAME, R, C, [R1 C1 R2 C2])%读取从(R1, C1)到(R2, C2)范围内的数据注意&am…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

测试markdown--肇兴

day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...