多任务系统可划分为:非抢占式多任务和抢占式多任务,区别在于能否发生抢占动作

2.5内核开始使用O(1)调度程序,使用了静态时间片算法和针对每一处理器的运行队列

该调度算法对于调度那些响应时间敏感(交互进程)的程序先天不足

2.6.23内核开始使用“反转楼梯最后期限算法”(RSDL)替代了O(1)算法,它被称为“完全公平调度算法”

策略

IO消耗性和处理器消耗性进程

前者指进程的大部分时间用来提交IO请求或是等待IO请求,它们经常处于运行状态但通常都只运行一会儿,大部分时候IO请求会阻塞,如GUI界面

处理器消耗性进程把时间大多用在执行代码上,除非被抢占,否则它们通常都一直不停的运行没有IO需求,但是系统不应该让它们一直运行,调度策略是尽量降低它们的调度频率而延长其运行时间

调度策略要在进程响应速度和最大系统利用率上找平衡

Linux的优先级策略:使用nice优先级和实时优先级两个

关于时间片:Linux的调度器并没有直接分配时间片到进程,它是将处理器的使用比划分给了进程,这样一来进程获取的处理器时间与处理器负载密切相关,这个比例进一步还会受到nice值的影响,nice值作为权重将调整进程所使用的处理器时间使用比

新的CFS调度器,其抢占时机取决于新的可运行程序消耗了多少处理器使用比,如果小于当前进程,那么立即抢占,否则推迟运行

Linux调度算法

Linux调度器以模块方式提供,允许不同类型有针对性地选择调度算法

调度器类

模块化结构,允许多种不同的可动态添加的调度算法并存,调度属于自己范畴的进程

Unix系统调度器实质问题:分配绝对时间片引发的固定切换频率给公平性造成了很大的变数

CFS的做法是允许每一个进程运行一段时间、循环轮转、选择运行最少的进程作为下一个运行进程,而不再采用分配给每个进程时间片的做法,CFS在所有可运行进程总数基础上计算出每一个进程应该运行多久而不是依靠nice值来计算时间片,nice值被用来获取处理器的使用权重

任何进程所获得的处理器时间是由它自己和其他所有可运行进程nice值的相对差值决定的,nice值对时间片的影响不再是算数加权而是几何加权,任何nice值对应的绝对时间不再是一个绝对值,而是处理器的使用比

CFS不是完美的公平,它只是近乎完美的多任务

Linux调度的实现

位于kernel/sched_fair.c

时间记账

对运行时间做记账确保进程只在公平分配给它的处理器时间内运行

调度器实体结构为一个名叫se的成员变量,位于task_struct

系统通过周期性调用update_curr(),无论是在进程可运行状态还是被堵塞状态,vruntime可以准确地测量给定进程的运行时间,而且可知道谁应该是下一个被运行的进程

进程选择

挑一个具有最小vruntime的进程

使用红黑树来组织可运行进程队列,比利用其迅速找到最小vruntime值的进程

rbtree,是一个自平衡二叉搜索树,寻找最小vruntime值的进程就是返回最左页子节点,但是一般都不会遍历,而是储存下当前时刻的最左叶子节点(再每新插入一个数据的时候进行缓存)

调度器入口

schedule()函数,定义在sched.c中

其中有一个pick_next_task()函数,会以优先级为序,从高到低依次检查每一个调度类,选择最高优先级的进程

睡眠和唤醒

进程休眠时内核的操作都相同:进程把自己标记成休眠状态,从可执行红黑树中移除,放入等待队列,然后调用schedule()函数选择和执行一个其他进程。唤醒过程刚好相反,进程被设置为可执行状态,然后再从等待队列中移到可执行红黑树中

等待队列:是有在等待的进程组成的链表

抢占和上下文切换

上下文切换

从一个可执行程序切换到另一个可执行程序

context_switch()函数负责处理,每当新的进程被选出来准备投入运行的时候,schedule()函数会调用它,完成两项基本工作

1、把虚拟内存从上一个进程映射切换到新进程中

2、把处理器状态切换到新进程处理器状态,

用户抢占

发生在:从系统调用返回用户空间时、从中断处理程序返回用户空间时

内核抢占

2.6版本的内核中引入了内核抢占

只要重新调度是安全的,内核就可以在任何时间抢占正在执行的任务

只要没有持有所,内核就可以进行抢占,锁是非抢占区域的标志,如果没有锁,正在执行的代码就是可以重新导入的,也就是可以抢占的

发生在:中断处理程序正在执行且返回内核空间之前、内核代码再一次具有可抢占性的时候、如果内核中的任务显式的调用schedule()、如果内核中的任务阻塞(同样会调用schedule())

linux内核实现片选跳变,《Linux内核设计与实现》读书笔记:进程调度相关推荐

  1. linux时间跳变影响,Linux起用夏令时,跳变后导致容器日志时间和系统时间相差一小时...

    Linux启用夏令时,跳变后导致容器日志时间和系统时间相差一小时 日志时间与系统时间相差一小时解决方案 一. 分析 2007年10月分,夏令时曾经做更改,2007年与之前发布的jdk版本均有此问题,2 ...

  2. linux内核设计与实现看不懂,Linux内核设计与实现读书笔记

    Unix强大的根本原因: Unix简洁, 提供几百个系统调用, 设计目的明确 Unix中 所有东西都被当做文件对待 Unix内核和相关系统工具是用C语言开发的, 移植能力强大 Unix进程创建迅速, ...

  3. Linux内核设计与实现 读书笔记

    第二章 Linux内核 1 内核开发特点 1)内核编译时不能访问C库: 2)浮点数很难使用: 3)内核只有一个定长堆栈: 4)注意同步和并发. 第三章 进程管理 1 current宏:查找当前运行进程 ...

  4. linux+模块与设备关系,linux内核设计与实现读书笔记——设备和模块

    一.设备类型 1.块设备 blkdev:以块为单位寻址,支持重定位(数据随机访问),通过块设备节点来访问. 2.字符设备cdev:不可寻址,提供数据流访问,通过字符设备节点访问. 3.网络设备:对网络 ...

  5. 嵌入式Linux设备驱动程序开发指南9(平台设备驱动)——读书笔记

    平台设备驱动 九.平台设备驱动 9.1 平台设备驱动概述 9.2 GPIO驱动 9.2.1 简介 9.2.2 硬件名称 9.2.3 引脚控制器 9.2.4 引脚控制子系统 9.2.5 GPIO控制器驱 ...

  6. 进程调度(一)--linux内核设计与实现读书笔记

    进程的调度程序是保证进程能有效工作的一个内核子系统.调度程序负责决定将哪个进程投入运行,何时运行以及运行多少时间.简单的来说,调度程序就是在给一堆就绪的进程分配处理器的时间,调度程序是多任务操作系统的 ...

  7. Linux内核设计与实现读书笔记

    1.进程管理 内核通过task_struct管理进程. 2.进程调度 1.可执行队列runqueue. 2.用户抢占.从中断返回或者系统调用返回的时候发生. 3.系统调用 1.系统调用参数放在寄存器里 ...

  8. 嵌入式Linux设备驱动程序开发指南17(IIO子系统一)——读书笔记

    IIO子系统一 十七.IIO子系统(一) 17.1 简介 17.2 数模转换--DAC实验 17.2.1 IIO缓冲区 17.2.2 触发器 17.2.3 工业I/O事件 17.2.4 iio工具 1 ...

  9. 《Linux/Unix设计思想》读书笔记与感想

    英文名:Linux and the Unix Philosophy 作者:Mike Gancarz    翻译:漆渀(ben) NIH - Not Invented Here 准则1:小既是美     ...

最新文章

  1. Unity 跑酷Demo难题总结
  2. 《领域模型》——通过重构得到更深层次的理解
  3. saltstack (1) 简介
  4. Android 5.1 Lollipop的Zygote分析——上篇
  5. . SQL多条件查询存储过程
  6. 用g++编译生成动态连接库*.so的方法及连接
  7. STM32+CubeMX开发工程笔记汇总(更新2021.8.12)
  8. 数据挖掘:模型选择——关联规则
  9. oracle--Tracing PL/SQL subprogram calls with parameters values--Mahmoud Hatem,
  10. RVA和文件偏移的转换
  11. Linux系统知识汇总
  12. oracle技术之oracle备份恢复概述
  13. c语言笛卡尔心形函数,笛卡尔心形函数故事
  14. Endnote--在参考文献列表中添加DOI
  15. ppt矩形里面的图片怎么放大缩小_如何在PPT中插入大量图片而又保持其美感?
  16. 如何把epub转mobi?
  17. 一种Android应用耗电定位方案
  18. Quasi_Binary(模拟)
  19. 【产品志】全白色 MATX 方案
  20. POI:java导出excel,java设置单元格公式,求和

热门文章

  1. 研究生必备自学课程!打好科研的数学基础与机器学习基础!
  2. (Step2-500题)POJ训练计划+SGU
  3. 实战java虚拟机 百度云_《实战JAVA虚拟机 JVM故障诊断与性能优化》pdf百度云下载...
  4. Leetcode每日一题:118 + 119.pascals-triangle I and II(杨辉三角1和2)
  5. 查询某表所有列名的SQL语句
  6. 三种代理服务器以及反向代理详解
  7. 零基础大数据学习框架
  8. 两年前端菜鸟回忆篇(1)
  9. 2种方式解决vue路由跳转未匹配相应路由避免出现空白页面或者指定404页面
  10. 自动化测试--testNG