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

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

⼀个CPU拥有⼀个runqueue

如果有多个CPU就要考虑进程个数的负载均衡问题

优先级

  • 普通优先级:100〜139(我们都是普通的优先级,想想nice值的取值范围,可与之对应!)
  • 实时优先级:0〜99(不关心)

活动队列

时间⽚还没有结束的所有进程都按照优先级放在该队列

nr_active: 总共有多少个运⾏状态的进程

queue[140]:⼀个元素就是⼀个进程队列,相同优先级的进程按照FIFO规则进⾏排队调度,所以, 数组下标就是优先级!

从该结构中,选择⼀个最合适的进程,过程是怎么的呢?

  • 1. 从0下表开始遍历queue[140]
  • 2. 找到第⼀个⾮空队列,该队列必定为优先级最⾼的队列
  • 3. 拿到选中队列的第⼀个进程,开始运⾏,调度完成!
  • 4. 遍历queue[140]时间复杂度是常数!但还是太低效了!

bitmap[5]:⼀共140个优先级,⼀共140个进程队列,为了提⾼查找⾮空队列的效率,就可以⽤ 5*32个⽐特位表⽰队列是否为空,这样,便可以⼤⼤提⾼查找效率!

过期队列

  • 过期队列和活动队列结构⼀模⼀样
  • 过期队列上放置的进程,都是时间⽚耗尽的进程
  • 当活动队列上的进程都被处理完毕之后,对过期队列的进程进⾏时间⽚重新计算

active指针和expired指针

  • active指针永远指向活动队列
  • expired指针永远指向过期队列
  • 可是活动队列上的进程会越来越少,过期队列上的进程会越来越多,因为进程时间⽚到期时⼀直 都存在的。
  • 没关系,在合适的时候,只要能够交换active指针和expired指针的内容,就相当于有具有了⼀批 新的活动进程!

在系统当中查找⼀个最合适调度的进程的时间复杂度是⼀个常数,不随着进程增多⽽导致时间成 本增加,我们称之为进程调度O(1)算法!

少年没有乌托邦,心向远方自明朗!

如果这个博客对你有帮助,给博主一个免费的点赞就是最大的帮助
欢迎各位点赞,收藏关注
如果有疑问或有不同见解,欢迎在评论区留言
后续会继续更新大连理工大学相关课程和有关Linux的内容和示例
点赞加关注,学习不迷路,好,本次的学习就到这里啦!!!

ok,我们下次再见!


http://www.kler.cn/a/592186.html

相关文章:

  • HTML 图像与多媒体元素:拓展学习边界的进度记录(一)
  • LinkedList 底层源码深度解析
  • 【蓝桥杯每日一题】3.17
  • 基于springboot的房屋租赁系统(008)
  • Mysql相关知识:存储引擎、sql执行流程、索引失效
  • AI 大模型统一集成|微服务 + 认证中心:如何保障大模型 API 的安全调用!
  • Elasticsearch 索引
  • 言简意赅 Linux部署elasticsearch7.15.2
  • C语言:编程设计猜数游戏
  • Deflate和Gzip压缩在HTTP响应中的作用与实现
  • NLP高频面试题(六)——decoder-only、encoder-only和encoder-decoder的区别与联系
  • laravel 对 数据库 json 字段的查询方式汇总
  • Post-Training Quantization, PTQ
  • nginx性能优化有哪些方式?
  • Bash 脚本基础
  • numpy学习笔记15:模拟100次随机游走,观察平均行为
  • C++ 语法之函数和函数指针
  • 合约编译部署基本流程
  • Spring(8)——MyBatis入门(2)
  • pycharm运行OpenCV项目踩坑记录