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

Linux——进程优先级/切换/调度

1.进程优先级

1.进程优先级是什么:进程获取CPU资源的先后顺序

2.为什么要有进程优先级:因为一般CPU只有一块,资源短缺,所以就需要优先级来确定谁先谁后的问题

3.值越低 进程的优先级越高   ps -l进行查看

UID:user id

RPI 进程可被执行的优先级 值越小越早被执行 默认值80

NI 进程优先级的修正数据 我们在后面想要修改进程的优先级就需要使用这个nice值

优先级修改  建议不要随便修改 会限制次数 进程真实优先级 = PRI (默认)+ NI  top  r + pid 进行修改,频繁的修改可能会破坏公平性

 

 nice值范围[-20,19]    Linux优先级范围[60,99]    幅度不能太大 考虑公平性

优先级设计不合理 会导致优先级低的进程,长时间得不到CPU资源,导致进程饥饿

2.进程切换

一个进程在CPU上跑,一般不会直接跑完,会跑一个时间段,这个时间段就是一个时间片,每个进程跑完一个时间片,就需要继续去排队

相信大家都写过死循环的代码,我们的系统会卡死吗?不会的,是因为这个代码跑完一个时间片,然后就需要去排队等待,排到这个进程再去跑一个时间片,所以这也是为什么我们写死循环系统不会卡死 ,也证明了一个进程不会一直占有CPU

2.1CPU 寄存器

寄存器:CPU中有很多的寄存器 寄存器有很多功能 这里我们先不做详细了解,只需要知道寄存器是CPU的一个临时空间,用来存储正在调度进程的临时信息,只是一个空间,并不等于寄存器里面的内容

当一个进程跑完一个时间片,就将寄存器的对应的上下文数据拷贝一份,给进程让其保存起来,保存到task_struct中 有一个tss结构体 里面保存的就是上下文数据,保证下次进程执行可以将上下文数据恢复到寄存器中,这个时候寄存器就可以在上次的历史位置继续运行了 

 进程切换本质核心就是保存和恢复当前硬件的上下文数据,就是CPU寄存器的内容 

Linux内核进程O(1)调度队列

选择进程

调度和切换共同构成调度器

我们可以通过下面的图片来看,一个CPU有一个运行队列,就是我们的runqueue,我们来理解一下为什么要这样设计,active指向活跃队列,expired指向过期队列,nr_active来确定队列中的进程总数,如果是0证明队列中没有进程,bitmap是位图,来判断140个优先级队列是否为空,因为他们是一一映射的,所以可以提高运行效率,下面有为什么是bitmap[5]的解释,queue,其中100个优先级队列是实时调度,40个优先级队列是分时调度,当进程被CPU调度,按照进程的优先级,进入到对应的优先级队列进行排队,当这个进程被调度完以后,就会进到过期队列当中,并且更新它的优先级,这样活跃队列的进程就会越来越少,当活跃队列里没有进程了,过期队列就会和活跃队列进行交换,然后再去调用活跃队列的进程,直到所有的进程都跑完

结语 

进调度器由切换和调度组成,我们学习了要选择哪个进程让CPU调度,如何去切换,了解Linux切换调度是如何实现的,增强自己的知识储备!!

http://www.xdnf.cn/news/99577.html

相关文章:

  • Elasticsearch 堆内存使用情况和 JVM 垃圾回收
  • Maven 项目中引入本地 JAR 包
  • LinkedList与链表
  • 论文阅读 | 大模型工具调用控制的策略优化
  • Centos9安装docker
  • (20)VTK C++开发示例 --- 读取 DEM(高程地图)文件
  • 科学养生,拥抱健康生活
  • 电脑如何监控?六个电脑监控方法分享,请查收
  • 基于大模型的胃食管反流病全周期预测与诊疗方案研究
  • 【重学Android】03.高版本 Android Studio 不能使用引用库资源ID的问题
  • 服务器上部署Nginx的几种方式
  • vant Dialog组件调用的坑
  • Linux : 理解文件系统
  • CentOS 系统 DeepSeek 部署
  • [java八股文][Java基础面试篇]设计模式
  • VR 全景看车的独特优势​
  • 封装 element-ui 二次弹框
  • 详解:中兴新支点操作系统智慧政务信创解决方案
  • Prometheus定义主机监控告警实例
  • 【Amazing晶焱科技高速 CAN Bus 传输与 TVS/ESD/EOS 保护,将是车用电子的生死关键无标题】
  • 【Java设计模式及实践学习-第4章节-结构型模式】
  • HCIA-Access V2.5_18_网络管理基础_2_SNMP协议简介
  • GeoJsonLayer|BusineDataLayer|graphicLayer数据修改点位层级
  • JVM考古现场(二十五):逆熵者·时间晶体的永恒之战(进阶篇)
  • 生物计算安全攻防战:从DNA存储破译到碳基芯片防御体系重构
  • 【工程开发】LLMC准确高效的LLM压缩工具(三)——AWQ算法量化
  • 机器人雅克比Jacobian矩阵程序
  • 【go】go run-gcflags常用参数归纳,go逃逸分析执行语句,go返回局部变量指针是安全的
  • 深度学习--卷积神经网络调整学习率
  • MVCWebAPI使用FromBody接受对象的方法