LinuxO(1)调度算法

news2024/11/25 16:44:03

概念

在Linux中,O(1)调度算法是一种进程调度算法。O(1)表示算法的时间复杂度是常数级别的,与系统中的进程数量无关。

运行队列结构

  • 他采用了两个运行队列,一个活动队列和一个过期队列。活动队列中的进程是有资格获取CPU时间片的进程,过期队列中的进程是已经用完时间片的进程。而操作系统始终只会调度活动队列的进程。
  • 多个队列又被分为多个优先级数组,例如从0~139。优先级不同,Linux下版本可能有差异,数值越小优先级越高。
  • 利用哈系统指针数组140个元素,类型为struct task_struct*,前100个下标不用考虑是为实时进程进行使用的。剩下的40个元素是对于分时进程进行考虑。对于剩下的40个元素利用哈系统将进程优先级相同的。串在一起。通过优先级挂队里相同优先级的进程会被链接在一起。
  • 也可以理解为在一个CPU里面有一个运行队列,一个运行队列里面有两张表,一个是活动队列和一个过期队列。

活动队列

  • 时间片还没有结束的所有进程都按照优先级放在该队列。
  • nr_active:总共有多少运行状态的进程
  • queue[140]:一个元素就是一个进程队列相同优先级的进程按照fifo规则进行排队调度,所以数组下标就是优先级。
  • 在该结构中选择一个最合适的进程过程是如何?
  • 从0号下标开始,遍历queue[140]
  • 找到第一个非空队列,该队列必定为优先级最高的队列。
  • 拿到选中队列的第一个进程开始运行,调度完成。
  • 遍历queue[140]时间复杂度是常数,但还是太低效了。
  • bitmap[5]:一共是140个优先级,一共140个进程队列。为了提高查找非空队列的效率,就可以用五个。32个比特位表示队列是否为空,这样便可以大大提高查找效率。

过期队列

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

active指针和expired指针

  • active永远指向活动队列。
  • expired永远指向国旗队列。
  • 活动队列上的进程越来越少,过期队列上的进程越来越多,因为进程时间片到期时一直都存在的。在最终只要能够交换活动队列指针和过期队列指针的内容,就相当于又具有一批新的活动进程。
  • 进程有三种情况,运行退出。不退出,但时间偏到了。有新的进程产生了。

调度过程

初始状态

系统中有活动队列和过期队列,活动队列包含有资格获取CPU时间片的进程,这些进程按照优先级分布在不同的优先级数组中。优先级从0~139。

选择进程运行

当进行进程调度时,调度器首先查看活动队列中优先级最高数组,在这个优先级最高的数组中选择一个进程来运行。这个选择过程比较简单快速,因为它不需要遍历整个系统的所有行程,只需在特定的优先级数组里选择。

时间片用完

当活动队列中的进程用完自己的时间片之后,他不会立刻回到活动队列的头部重新竞争CPU。因为操作系统采用分时操作系统。分时操作系统是要保持绝对的公平,进程调度绝对公平。而是被移动到过期队列中相应的优先级数组里。

队列交换

当活动队列中所有的进程都玩都用完时间片,也就是活动队列中没有可运行的进程时,活动队列和过期队列进行交换。此时原来的过期队列变为活动队列,而原来的活动队列变为过期队列,新的活动队列中的进程又可以开始竞争CPU资源。这个交换操作的时间复杂度也是o1。

优点

由于采用这种结构,查到下一个要运行的进程的时间复杂度为o一,无论系统中有多少个进程都能快速的做出调度决策,提高了系统的响应速度和整体的性能。并且保证了分时操作系统调度进程绝对的公平。

应用场景

多用户交互环境

在桌面Linux系统中,当多个用户同时登录并且运行多个程序时,如打开多个办公软件,浏览器标签等oe1调度算法能够快速的在这些进程中进行切换,保证每个用户操作都能得到及时响应,提供流畅的交互体验。

服务器环境

由于外部服务器就像运行或ngnx服务器可能同时处理多个客户端请求,oe调度算法可以高效的调度处理这些请求的进程。不管同时存在的请求数量多少都能快速的分配cpu响应性能。

多任务处理

在Linux系统执行多任务时,例如一边进行文件下载,一边编译程序,一边运行后台服务等情况。O1调度算法能够合理分配CPU时间片给各个任务。对应的进程使这些任务都能有条不紊的进行。

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

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

相关文章

阳台山足球营地的停车位探寻

阳台山足球营地的环境是真好哈。停车场名称:阳台山森林公园配套停车场。应该很多爬山的人车子也停在这里。而且我没想到的,阳台山的山泉水还有不少居民每天提着空桶去山上装。看来环境是真的很好哈 停车场有地面和地下停车场,停车位个数查不…

Linux驱动开发(速记版)--设备模型

第八十章 设备模型基本框架-kobject 和 kset 80.1 什么是设备模型 设备模型使Linux内核处理复杂设备更高效。 字符设备驱动适用于简单设备,但对于电源管理和热插拔,不够灵活。 设备模型允许开发人员以高级方式描述硬件及关系,提供API处理设备…

若依使用(二次开发)

RouYi-MT RouYi-MT下载: 下载地址 RouYi-MT的使用(修改若依代码中文件夹得统一包名) 将对应的Springboot文件压缩成压缩包。 填写对应的参数,生成修改后的文件。 开发步骤 1.创建子项目到RouYi-springboot中,添加…

简单易懂的springboot整合Camunda 7工作流入门教程

简单易懂的Spring Boot整合Camunda7入门教程 因为关于Spring Boot结合Camunda7的教程在网上比较少,而且很多都写得有点乱,很多概念写得太散乱,讲解不清晰,导致看不懂,本人通过研究学习之后就写出了这篇教学文档。 介…

我的创作纪念日一年

目录 机缘 收获 日常 成就 憧憬 机缘 我之所以开始写CSDN博客,源于一段特殊的时光。去年此时,我独自待在实验室,周围的世界仿佛与我无关。没有旅游,没有与朋友的欢聚,情感的挫折和学业的压力如潮水般袭来。在这样的…

2025舜宇招聘【内推码】

【2025内推码】 DSwNQ9yu DSJXN8Mr 舜宇集团2025届全球校园招聘正式启动!!! 专业需求:机械、自动化、电子、电气、通信、控制、测控、计算机、软件、物理、光学等专业; 工作地点:宁波余姚、浙江杭州、广东…

97. UE5 GAS RPG 实现闪电链技能(二)

书接上回,如果没有查看上一篇文章的同学推荐先看上一章,我们接着实现闪电链技能。 在上一章最后,我们实现了闪电链的第一条链,能够正确显示特效,接下来,我们先实现它的音效和一些bug修复。 我们在多端网络里…

(9)MATLAB瑞利衰落信道仿真2

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、瑞利衰落信道二、瑞利衰落信道建模三、仿真结果二、高斯随机变量和瑞利随机变量后续 前言 本文首先给出瑞利衰落信道模型,并根据瑞利衰落变量估…

乌班图基础设施安装之Mysql8.0+Redis6.X安装

简介:云服务器基础设施安装之 Mysql8.0Redis6.X 安装 Docker安装 # 按照依赖 yum install -y yum-utils device-mapper-persistent data lvm2 Docker Mirror 从去年开始. hub.docker.com[1] 在国内的访问速度极慢. 当时大家主要还是依赖国内的一些镜像源: 如中科…

【JNI】数组的基本使用

在上一期讲了基本类型的基本使用,这期来说一说数组的基本使用 HelloJNI.java:实现myArray函数,把一个整型数组转换为双精度型数组 public class HelloJNI { static {System.loadLibrary("hello"); }private native String HelloW…

AI编程工具的崛起:效率提升的未来在哪里?

你正在使用的编程工具会被淘汰吗?AI编程工具正在改变这一切! 在日益忙碌的开发世界里,工具的选择决定了开发者的工作效率。在过去的十年里,从代码编辑器到版本控制工具,各种工具帮助开发者逐步优化了工作流程&#xf…

C/C++逆向:函数逆向分析-调用约定分析

在进行函数逆向分析时,分析其函数调用约定具有非常重要的作用,因为调用约定直接影响了函数的参数传递、返回值、栈管理、寄存器使用等多个方面,不同的编译器和平台可能有不同的默认调用约定,识别调用约定可以帮助判断代码是由哪种…

HTB:Mongod[WriteUP]

连接至HTB服务器并启动靶机 靶机IP:10.129.99.33 分配IP:10.10.16.12 1.How many TCP ports are open on the machine? 使用nmap对靶机进行全端口TCP脚本、服务扫描: nmap -sC -sV -T4 -p- {TARGET_IP} 可以看到靶机共开放TCP端口2个&…

LC108-将有序数组转化为二叉搜索树(二叉平衡树)

文章目录 1 题目2 思路3 ACM完整代码参考 1 题目 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡二叉搜索树 示例: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释&#xff1…

最佳语音识别 Whisper-large-v3-turbo 上线,速度更快(本地安装 )

Openai 上线语音模型whisper-large-v3-turbo 在本文中,我们将介绍 whisper-large-v3-turbo 以及 whisper-web(一个直接在浏览器中进行ML语音识别的开源项目)。 尽管近年来出现了许多音频和多模态模型,但Whisper 仍是生产级自动语音…

类型模板参数与非类型模板参数

在C中,模板参数分为两种类型:类型参数和非类型参数。类型参数是指定模板类型名称的参数,而非类型参数是指定模板整型常量的参数。 模板参数不限定于类型,普通值也可作为模板参数,但这里值的类型只能是整形家族&#x…

Qt教程(001):Qt概述与安装

文章目录 一、Qt概述1.1 什么是Qt1.2 Qt优点1.3 Qt发展史1.4 支持的平台1.5 成功案例1.6 下载安装1.7 QtCreator介绍 一、Qt概述 1.1 什么是Qt Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的&…

快乐数(c语言)

1.「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。如果 n 是 快乐数 就返…

打卡第三天 P5729 【深基5.例7】工艺品制作

今天是我打卡第三天&#xff0c;做个入门题吧(#^.^#) 题目描述 输入格式 输出格式 输出一个整数表示答案。 输入输出样例 输入 #1 4 4 4 1 1 1 1 2 2 2 输出 #1 56 说明/提示 C&#xff1a; #include<bits/stdc.h> using namespace std; long long a[100][100][1…

【ubuntu】修改用户名、主机名、主文件夹名、登录名、密码

目录 1.他们是什么 2.修改方法 2.1 修改用户密码 2.2 修改主机名 2.2.1 切换到root用户 2.2.2 修改名称 2.3 修改用户名 主文件夹名 登录名 2.2.1 sudoers 2.2.2 passwd 2.2.3 shadow 2.2.4 group 2.2.5 修改主文件夹名 3.重启 1.他们是什么 &#xff08;1&#xf…