1、红黑树存储了系统中所有的可运行进程,节点的键值 是可运行进程的虚拟运行时间。
2、进程高度的主要 入口点是函数schedule(),定义在kernel/sched.c中。是内核其它部分用于调用进程调度器的入口:
(1)选择哪个进程可以运行,何时将其投入运行。
(2)schedule()需要和一个具体的调度类相关联
A.会找到一个最高优先级的调度类(有自己的可运行队列),问该调度类谁才是下一个该运行的进程。
B.调用pick_next_task()(定义在kernel/sched.c),以优先级为序,从高到低,依次检查每个调度类,并从最高优先级的调度类中,选择最高优先级的进程。
C.核心是for循环,以优先级为序,从最高优先级工始,遍历了每个进程调度类,每个调度类实现了pick_next_task函数 ,返回指向下一个可运行进程的指针 ,没有时返回NULL。
3、进程睡眠:把自己标记成休眠状态,从可执行红黑树中移出,放入等待队列,调用schedul()选择执行一个进程。
等待队列由等待某些事件发生的进程组成的简单链表,内核用wake_queue_head_t代表等待队列。可通过DECLARE_WAITQUEUE()静态创建,也可由init_waitqueue_head()动态创建。
4、唤醒通过函数wake_up()进行,会唤醒指定的等待队列上的所有进程,调用函数try_to_wake_up(),该函数负责将进程设置为TASK_RUNNING状态,调用enqueue_task()将此进程放入红黑树中。
哪段代码造成了等待条件达成,就要负责随后调用wake_up()

linux内核杂记(8)-进程调度(3)相关推荐

  1. linux内核杂记(11)-进程调度(6)

    LINUX实时调度策略 调度策略分类 1.SCHED_FIFO (1)简单的先入先出调度方法 (2)不使用时间片,一旦SCHED_FIFO的进程处于可执行状态,就会继续执行,直到它自己执行完毕或显式释 ...

  2. linux内核杂记(10)-进程调度(5)

    一.用户抢占 1.用户抢占时机 从系统调用返回用户空间 从中断处理程序返回用户空间 2.检查标志 内核返回后检查need_resched标志 如果被设置了,内核会选择一个更适合的进程投入进行 3.返回 ...

  3. linux内核杂记(7)-进程调度(2)

    1.进程调度的效果应如同系统具备一个理想中的完美多任务处理器,每个进程 能获得1/n 个处理器时间,n指可运行进程数量. 2.调度时进程抢占会带来一定的代价,换入与换出进程消耗,缓存效率等.CFS考虑 ...

  4. linux内核杂记(6)-进程调度(1)

    1.LINUX2.5系列内核中,采用了一种O(1)调度程序的新调度程序,该算法对调度响应时间 敏感的程序(比如交互的桌面系统 )不足,但对大服务器的工作 负载很理想 . 2.自内核2.6开发初期,引用 ...

  5. linux内核杂记(12)-进程调度(7)

    与调度相关的系统调用 1.进程的nice值 nice() 设置进程的nice值 2.进程的调度策略 sched_setscheduler()设置进程的调度策略 sched_getscheduler() ...

  6. linux内核杂记(9)-进程调度(4)

    1.上下文切换从一个可执行进程切换到另一个要执行进程.由定义在kernel/sched.c中的context_switch()函数负责处理. 2.每当一个新的进程被选出来准备投入运行时,schedul ...

  7. 【Linux 内核】Linux 内核特性 ( 组织形式 | 进程调度 | 内核线程 | 多平台虚拟内存管理 | 虚拟文件系统 | 内核模块机制 | 定制系统调用 | 网络模块架构 )

    文章目录 一.Linux 内核特性 1.Linux 内核组织形式 2.Linux 进程调度 3.Linux 内核线程 4.Linux 内核多平台虚拟内存管理 5.Linux 虚拟文件系统 6.Linu ...

  8. 【Linux 内核】Linux 内核体系架构 ( 进程调度 | 内存管理 | 中断管理 | 设备管理 | 文件系统 )

    文章目录 一.进程调度 二.内存管理 三.中断管理 四.设备管理 五.文件系统 一.进程调度 进程调度 : 进程 是 系统中 进行 资源分配 的 基本单位 ; 每个进程 在 运行时 , 都 感觉自己占 ...

  9. linux内核-进程与进程调度

    进程四要素 要给进程下一个确切的定义不是件容易的事情.不过,一般来说linux系统中的进程都具备下列诸要素: 有一段程序供其执行,就好像一场戏要有个剧本一样.这段程序不一定是进程所专有,可以与其他进程 ...

最新文章

  1. 掩码语言模型(Masked Language Model)mlm
  2. java培训:Java的十大算法
  3. 老大,你为什么在代码中要求我们使用LocalDateTime而不是Date?
  4. 【Echarts】 绘制世界地图和中国省份
  5. 转:c# 根据当前时间获取,本周,本月,本季度,月初,月末,各个时间段
  6. android 城市列表数据,用RecyclerView写的城市列表
  7. 关于 Angular view Query 的 id 选择器问题的单步调试
  8. spring源码阅读(1/4) - Bean生成
  9. C#算法设计排序篇之06-堆排序(附带动画演示程序)
  10. linux下gcc的编译过程详解
  11. java 对象地址_如何获取Java对象的地址?
  12. Android Studio 项目运行错误,弹出“Detected ADB对话框”
  13. 浅记一下伽卡他卡被全屏控制时脱离控制
  14. 在 VSLAM 的后端优化中的重投影误差的雅可比计算详细推导
  15. Shell脚本——Shell编程规范及变量
  16. 2017年中秋前记录
  17. 高校房产管理系统有哪些模块?
  18. python爬取链家新房_Python爬虫实战:爬取链家网二手房数据
  19. this is related to npm not being able to find a file
  20. CSS基础:CSS的上下文之层叠上下文

热门文章

  1. 【软件需求工程与建模 - 小组项目】阶段性汇报-软件设计规格说明书3.0
  2. Jaspersoft Studio简介
  3. Vue.js指令实例
  4. Java 读书笔记 (十一) Number Math 类
  5. flume1.8 开发指南学习感悟
  6. layui富文本编译器添加图片
  7. 工资表 车辆工程 冯大昕
  8. EntityFreamWork 项目总结
  9. 读取一个文件中的字符,统计每个字符出现的次数
  10. jquery easyUi简单介绍