图解Linux内核进程调度系统

news2024/11/29 0:37:01

目录

1.进程调度系统

2.调度类

3.调度策略

4.调度实体

5.调度器

6.CPU运行队列


1.进程调度系统

Linux进程调度是操作系统内核中的一个重要组成部分,它负责决定哪个进程可以在CPU上运行。

进程调度的目标是合理分配CPU资源,提高系统的整体运行效率和响应能力。

Linux设计了一套进程调度系统方便的实现进程调度目标。

Linux进程调度系统主要由:调度类,调度策略,调度实体,调度器,CPU运行队列组成。

图片

2.调度类

调度类在Linux内核中的定义:

struct task_struct {

const struct sched_class *sched_class; //调度类

struct sched_entity se; //完全公平调度实体

struct sched_rt_entity rt; //实时调度实体

struct sched_dl_entity dl; //截止调度实体

unsigned int policy;  //调度策略

};

struct sched_class结构体定义

  struct sched_class {

      void (*enqueue_task) (struct rq *rq, struct task_struct *p, int flags);

      void (*dequeue_task) (struct rq *rq, struct task_struct *p, int flags);

      void (*yield_task)   (struct rq *rq);

      bool (*yield_to_task)(struct rq *rq, struct task_struct *p);

      void (*check_preempt_curr)(struct rq *rq, struct task_struct *p, int flags)

      struct task_struct *(*pick_next_task)(struct rq *rq);

      void (*put_prev_task)(struct rq *rq, struct task_struct *p);

      void (*set_next_task)(struct rq *rq, struct task_struct *p, bool first);

      void (*task_tick)(struct rq *rq, struct task_struct *p, int queued);

      void (*task_fork)(struct task_struct *p);

      void (*task_dead)(struct task_struct *p);

      void (*switched_from)(struct rq *this_rq, struct task_struct *task);

      void (*switched_to)  (struct rq *this_rq, struct task_struct *task);

      void (*prio_changed) (struct rq *this_rq, struct task_struct *task,

                    int oldprio);

      unsigned int (*get_rr_interval)(struct rq *rq,

                      struct task_struct *task);

      void (*update_curr)(struct rq *rq);

......

  };

Linux内核定义的5种调度类(优先级由高到低)

图片

3.调度策略

struct task_struct {

unsigned int policy;  //调度策略

};

图片

4.调度实体

进程调度实体是操作系统中负责进行进程调度的组件或对象。它通常是一个数据结构,用于存储进程的相关信息,包括进程的标识符、状态、优先级以及其他调度所需的属性。

调度类在Linux内核中的定义:

struct task_struct {

    struct sched_entity se; //完全公平调度实体

    struct sched_rt_entity rt; //实时调度实体

    struct sched_dl_entity dl; //截止调度实体

    };

图片

5.调度器

Linux进程调度通过主调度器和周期性调度器发起。

主调度器:schedule()

周期性调度器:schedule_tick()

6.CPU运行队列

Linux为每个CPU分配一个运行队列。

struct rq {

......;

struct cfs_rq       cfs;

struct rt_rq        rt;

struct dl_rq        dl;

};

图片

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

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

相关文章

Java Web 学习笔记(二) —— JDBC

目录 1 JDBC 概述2 JDBC 快速入门3 JDBC API 详解3.1 DriverManager3.2 Connection3.3 Statement3.4 ResultSet3.5 PreparedStatement3.5.1 代码模拟 SQL 注入3.5.2 PreparedStatement 的使用3.5.3 PreparedStatement 原理 4 数据库连接池4.1 数据库连接池概述4.2 数据库连接池…

通讯网关软件034——利用CommGate X2ODBC实现Modbus RTU数据转储ODBC

本文介绍利用CommGate X2ODBC实现从Modbus RTU设备读取数据并转储至ODBC数据源。CommGate X2ODBC是宁波科安网信开发的网关软件,软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示,实现从Modbus RTU设备读取数据并转储至ODBC…

性价比最高的护眼台灯是哪一款?盘点五款最具性价比的护眼台灯

现在的孩子,不是以往的孩子那么的无忧无虑,他们要考虑的是学习的成绩,所以很多孩子为了能在父母面前能得到夸奖,就努力的学习,那么台灯就不可缺少,但是如今市场上的台灯太多了,如果你购买的台灯…

HTTParty库

HTTParty是一个流行的Ruby库,用于简化HTTP请求和处理响应。它提供了一个简单的接口,可以轻松地发送HTTP请求,并处理返回的数据。 使用HTTParty,你可以: 发送GET、POST、PUT、DELETE等不同类型的HTTP请求。 设置请求头…

二、GRE VPN

GRE VPN 1、GRE介绍2、GRE基本原理3、GRE报文格式4、报文在GRE中传输过程5、价值6、Keepalive检测7、GRE应用8、配置GRE隧道8.1、配置绑定GRE协议的接口8.2、配置Tunnel接口8.3、配置Tunnel路由 9、GRE配置举例9.1、GRE静态路由示例9.1.1、路由器运行动态路由协议实现互通9.1.2…

STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式)

STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式) 一、所用材料: STM32F103C6T6最小系统板 STM32CUBEMX(HAL库软件) MDK5 示波器或者逻辑分析仪 二、所学内容: 通过定时器TIM的输出比较模式得到预…

分析外贸SEO推广流程?网站谷歌SEO优化方法?

外贸SEO推广详细教程?外贸企业站如何做谷歌SEO推广? 外贸SEO推广是国际贸易领域中的一项重要战略,通过优化网站内容和结构,提高搜索引擎排名,从而增加在线可见性,吸引更多国际客户。顺风船将深入分析外贸S…

可回馈式直流电子负载在光伏储能行业的应用

可回馈式直流电子负载在光伏储能行业的应用非常广泛,光伏储能系统主要由光伏阵列、逆变器和储能电池组成直流电子负载作为一个重要的测试设备,可以对光伏储能系统进行性能评估和负载模拟。可回馈式直流电子负载可以用于光伏阵列的性能评估,通…

【Proteus仿真】【Arduino单片机】RGB彩灯

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用WS2812 RGB彩灯等。 主要功能: 系统运行后,RGB彩灯花样显示。 二、软件设计 /* 作者:嗨小易(…

【WIFI】关于MTK的射频参数文件CFG_WIFI_Default.h介绍

代码路径: vendor/mediatek/proprietary/custom/<project-name>/cgen/cfgdefault/CFG_WIFI_Default.h 先看下面这张图片,这是修改了国家码 2.4Ghz 5Ghz的配置参数 简单举例: 修改了国家码US改了那2个参数,可以看到一个改了0x55代表U,一个改了0x53代表S 加起…

Elasticsearch 8.X 如何生成 TB 级的测试数据 ?

1、实战问题 我只想插入大量的测试数据&#xff0c;不是想测试性能&#xff0c;有没有自动办法生成TB级别的测试数据&#xff1f;有工具&#xff1f;还是说有测试数据集之类的东西&#xff1f;——问题来源于 Elasticsearch 中文社区https://elasticsearch.cn/question/13129 2…

2023年11月实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先&#xff0c;来看下效果图 在线体验地址&#xff1a;https://geojson.hxkj.vip&#xff0c;并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

JVS低代码表单引擎助你打造高效表单设计流程

在日常的设计表单过程中&#xff0c;常常会有需要录入一大段文字的场景&#xff0c;例如评论、留言、产品介绍、内容说明等场景&#xff0c;那么简单的文本框组件就不满足了&#xff0c;这里JVS提供了 两种描述类型的组件&#xff0c;多行文本框和富文本组件&#xff0c;如下图…

ChatGPT 实际上是如何工作的?

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; ChatGPT 操作的两个主要阶段 我们再用谷歌来打个比方。当你要求谷歌查找某些内容时&#xff0c;你可能知道它不会——在你提出要求的那一刻——出去搜索整个网络来寻找答案。相反&#xff0c;谷歌会在其数…

Django实战项目-学习任务系统-发送邮件通知

接着上期代码内容&#xff0c;继续完善优化系统功能。 本次增加发送邮件通知功能&#xff0c;学习任务系统发布的任务&#xff0c;需要及时通知到学生用户知晓。 由于目前智能手机普及&#xff0c;人人都离不开手机&#xff0c;所以手机端接收通知信息更加及时有效。 其中微信…

[开源]企业级在线办公系统,基于实时音视频完成在线视频会议功能

一、开源项目简介 企业级在线办公系统 本项目使用了SpringBootMybatisSpringMVC框架&#xff0c;技术功能点应用了WebSocket、Redis、Activiti7工作流引擎&#xff0c; 基于TRTC腾讯实时音视频完成在线视频会议功能。 二、开源协议 使用GPL-3.0开源协议 三、界面展示 部分…

git根据commitid创建tag标签

1.首先&#xff0c;创建一个新的标签。你可以使用以下命令创建一个轻量级标签&#xff08;lightweight tag&#xff09;&#xff1a; 针对当前标签而言,也就是你所在的当前分支而言 git tag <tag_name>2.如果你想创建一个带注释的标签 针对当前标签而言,也就是你所在的…

写出优美的代码:考虑使用静态工厂方法替代构造方法

文章目录 一、静态工厂方法区别于工厂方法模式二、静态工厂方法的优点1、有名字&#xff08;1&#xff09;优势&#xff08;2&#xff09;源码分析&#xff1a;BigInteger&#xff08;3&#xff09;源码分析&#xff1a;Executors&#xff08;4&#xff09;常用命名 名称 2、不…

Vue 自动登录示例

router.beforeEach((to, from, next) > {if (to.meta.title) {document.title "xxxxx" to.meta.title;}let token window.sessionStorage.getItem(userInfo);// 如果没有token 并且没有任何响应 就要去action中自动登录if (!token) {const loginForm {usernam…

在紫光同创盘古50K开发板上进行DDR读写测试

本原创文章由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处 适用于板卡型号&#xff1a; 紫光同创PGL50H开发平台&#xff08;盘古50K开发板&#xff09; 一&#xff1a;软硬件平台 软件平台&#xff1a;PDS_…