文章目录

  • 一、yield_task 函数 ( 放弃 CPU 执行权限 )
  • 二、check_preempt_curr 函数 ( 检查进程是否可以被抢占 )
  • 三、task_struct 函数 ( 选择运行进程 )

Linux 内核源码 linux-5.6.18\kernel\sched\sched.h 中 , 定义的 struct sched_class 调度类结构体 , 就是 " 调度器 " 对应的类 ;

一、yield_task 函数 ( 放弃 CPU 执行权限 )


sched_class 调度类结构体 中的 yield_task 函数指针 , 指向一个函数 , 调用该函数 , 该 " 进程 " 将 放弃 已分配的 CPU 时间片 的 执行权限 , 先将进程从 " 执行队列 " 中出队 , 然后再 放入到队列末尾 ;

  • 进程 是一个 调度实体 ;
  • 执行队列 是一个 红黑树 ;

也就是说 调用该函数 , 将 调度实体 ( 进程 ) 存放到了 红黑树 ( 执行队列 ) 的 最右端 ( 末尾 ) ;

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

源码路径 : linux-5.6.18\kernel\sched\sched.h#1717 ;

二、check_preempt_curr 函数 ( 检查进程是否可以被抢占 )


sched_class 调度类结构体 中的 check_preempt_curr 函数指针 , 指向一个函数 , 调用该函数 , 主要是检查 当前 " 进程 " 是否可以被 其它进程 抢占 ;

  • 进程 是一个 调度实体 ;
  • 执行队列 是一个 红黑树 ;
void (*check_preempt_curr)(struct rq *rq, struct task_struct *p, int flags);

源码路径 : linux-5.6.18\kernel\sched\sched.h#1720 ;

三、task_struct 函数 ( 选择运行进程 )


sched_class 调度类结构体 中的 task_struct 函数指针 , 指向一个函数 , 调用该函数 , 选择 之后 要 开始运行 的 " 进程 " ;

  • 进程 是一个 调度实体 ;
  • 执行队列 是一个 红黑树 ;
struct task_struct *(*pick_next_task)(struct rq *rq);

源码路径 : linux-5.6.18\kernel\sched\sched.h#1722 ;

【Linux 内核】调度器 ④ ( sched_class 调度类结构体分析 | yield_task 函数 | heck_preempt_curr 函数 | task_struct 函数 )相关推荐

  1. 【Linux 内核】调度器 ② ( sched_class 调度类结构体源码 | 源码路径 linux-5.6.18\kernel\sched\sched.h )

    文章目录 一.调度器 二.sched_class 调度类结构体 一.调度器 上一篇博客 [Linux 内核]调度器 ( 调度器概念 | 调度器目的 | 调度器主要工作 | 调度器位置 | 进程优先级 ...

  2. 【Linux 内核】调度器 ③ ( sched_class 调度类结构体分析 | next 字段 | enqueue_task 函数 | dequeue_task 函数 )

    文章目录 一.next 字段 ( 指向链表中的下一个调度类 ) 二.enqueue_task 函数 ( 将进程加入执行队列 ) 三.dequeue_task 函数 ( 从执行队列中删除进程 ) Lin ...

  3. 【Linux 内核】CFS 调度器 ⑤ ( CFS 调度器类 fair_sched_class 源码 | next 赋值 | enqueue_task 赋值 | dequeue_task 赋值 )

    文章目录 一.调度器类 sched_class 简介 二.CFS 调度器类源码 三.next 赋值 四.enqueue_task 赋值 五.dequeue_task 赋值 一.调度器类 sched_c ...

  4. [Linux][内核学习笔记]--CFS调度器

    文章目录 1. 进程的状态转换 2. 内核调度器的发展 3. 调度策略 4. 与调度相关的系统调用 5. 优先级 6. CFS调度器的实现 6.1 相关结构体 6.1.1 sched_entity 结 ...

  5. 【Linux 内核】调度器 ① ( 调度器概念 | 调度器目的 | 调度器主要工作 | 调度器位置 | 进程优先级 | 抢占式调度器 | Linux 进程状态 | Linux 内核进程状态 )

    文章目录 一.调度器 0.调度器概念 1.调度器目的 2.调度器主要工作 3.调度器位置 4.进程优先级 5.抢占式调度器 二.Linux 内核进程状态 API 简介 三.Linux 进程状态 一.调 ...

  6. 挑战360无死角讲解Linux内核 进程管理,调度器的5种实现丨C++后端开发丨C/C++Linux服务器开发丨内核开发丨网络编程

    挑战360无死角讲解 进程管理,调度器的5种实现 1. 8500行 CFS是什么 2. RT调度器使用场景 3. IDLE/Dealine调度器 视频讲解如下,点击观看: 挑战360无死角讲解Linu ...

  7. Linux系统核心调度器——周期性调度器详解

    日期 内核版本 架构 作者 内容 2019-5-13 Linux-2.6.32 X86 Bystander Linux进程调度 1 绪论 在<Linux系统进程调度--调度架构详细分析>一 ...

  8. Linux调度器 - deadline调度器

    一.概述 实时系统是这样的一种计算系统:当事件发生后,它必须在确定的时间范围内做出响应.在实时系统中,产生正确的结果不仅依赖于系统正确的逻辑动作,而且依赖于逻辑动作的时序.换句话说,当系统收到某个请求 ...

  9. linux 进程状态显示dl,Linux系统中的实时调度器DL调度器的原理是什么?详细概述...

    一.概述 实时系统是这样的一种计算系统:当事件发生后,它必须在确定的时间范围内做出响应.在实时系统中,产生正确的结果不仅依赖于系统正确的逻辑动作,而且依赖于逻辑动作的时序.换句话说,当系统收到某个请求 ...

最新文章

  1. Android 开发利用wifi调试
  2. C++vector容器学习
  3. 强监管下 协议支付会是互金平台救命稻草?(协议支付是代扣协议的升级版)
  4. [BZOJ4530][Bjoi2014]大融合 LCT + 启发式合并
  5. 使用 Redis的SETNX命令实现分布式锁
  6. java 嵌套事务_Java事务以及嵌套事务
  7. 在计算机中()个字节称为MB,计算机基础考试题库(范文).doc
  8. Android studio 装SDK,android studio安装sdk
  9. mathquill web公式编辑器 总结 、实列、 源码
  10. win10 SVN图标不显示 已解决
  11. 软件测试工程师面试技巧---问答篇
  12. 协议栈之packet_type
  13. pepe:从Pastebin收集邮件地址的信息
  14. Elasticsearch入门登录篇
  15. 蓝桥杯训练题1427: [蓝桥杯][2013年第四届真题]买不到的数目【筛选符合题目的数字。有点类似筛素数】
  16. 监听器和简单邮件发送
  17. bex5中的常用方法总结
  18. 产品经理七个局——破局之术
  19. android 网络代码是什么意思,Android判断网络状态的代码
  20. 面对金融风暴,升斗小民的处事哲学

热门文章

  1. 使用jquery.qrcode生成二维码(转)
  2. SQL删除重复的记录(只保留一条)
  3. textview的基本设置
  4. oracle定时任务失效
  5. SQL基础:常用SQL语句详解(转)
  6. legend3---lavarel常用artisan命令操作
  7. 《大道至简》阅读笔记二
  8. 【转载】Hyperledger学习小结
  9. 随机数的产生可用于的场景验证码 密码
  10. codevs地鼠游戏(贪心)