Linux是多任务抢占操作系统,多任务就是指多个进程间通过分时切换来并发执行。非抢占的系统是对每个进程而言,除非时间片用完或主动放弃否则不会被剥夺CPU,主动放弃包括调用一些调度的系统调用(比如sched_yield)或者调用IO等阻塞操作。抢占式系统表示即使当前进程没有用完时间片,也没有主动放弃CPU,如果调度系统发现有更高动态优先级的进程,则强制剥夺当前进程的CPU,选择更高动态优先级的进程执行。
    
    调度系统什么时候查看是否有更高优先级的进程呢?有这些情况:①时钟中断处理程序(Linux2.6的系统时钟频率默认是1000HZ,即每1ms调用一次时钟中断处理程序,具体系统配置的时钟频率可以通过cat /boot/config-* | grep "^CONFIG_HZ="来获取)。如果是多核处理器,则每个CPU都会执行时钟中断处理程序(其他中断处理程序只会映射到某个CPU上执行);②其他一些中断处理程序,会让某个CPU执行调度程序;③当前进程阻塞、睡眠等主动放弃处理器;④当前进程用完时间片;⑤创建了新进程;⑥执行一些调度相关的系统调用,比如改变进程的静态优先级等。
    
    内核2.6的进程调度策略一共有三种:SCHED_NORMAL,SCHED_FIFO和SCHED_RR.其中SCHED_NORMAL用于普通进程的调度,后两种用于实时进程的调度。
    
    Linux的进程有的属于IO消耗型进程,有的属于处理器消耗型进程。IO消耗型进程希望获得更多的处理器响应机会,每次响应不需要很长时间;处理器消耗型进程则相反。调度程序通常在系统响应速度和最大系统吞吐量之间寻求平衡。
    
    Linux进程的静态优先级。静态优先级分为两个范围:0~99是实时进程的静态优先级(值越大优先级越高),100~139是普通进程的静态优先级(通过nice值表示,-20~19,值越大优先级越低)。
    
    首先介绍普通进程的调度策略。Linux采用称为完全公平调度算法的调度策略(CFS),每个CPU都有个可运行队列,多个处理器的可运行队列会在调度时进行队列的平衡处理。对某个处理器而言,应该选取哪个进程投入执行是调度的核心问题,CFS根据当前可运行队列中普通进程的静态优先级给每个进程分配处理器使用比,确定周期时间T(T的选取和可运行进程个数相关,默认是20ms,这个时间T是用来控制进程切换频率的,如果太小会导致进程很快完成当前分配的处理比,而重新分配处理比,重新调度)。调度时计算虚拟运行时间,这个时间很关键,因为调度系统就是选择最小虚拟运行时间的进程投入执行。
    
    虚拟运行时间是指每个进程的实际运行时间标准化后的时间,这个时间是相对的,可以理解为实际时间处理处理器使用比。调度思想是这样的,每个进程已经分配好处理器使用比了,调度系统希望各个进程差不多同时用完这个使用比,而不是有的进程很早完成,有的进程很晚完成。那么各个进程的完成的程度就是调度的依据,总是选择完成比最小的进程投入运行。
    
    如果一个进程阻塞了,其他进程运行了一段时间,显然这个阻塞进程的完成比最小,那么当它醒过来的时候,会导致很长一段时间都只运行这个进程,所以在唤醒时会将完成比调整为当前可运行队列中完成比的最小值。新建的进程会根据优先级计算一个完成比,而不是简单的完成比赋为0.
    
    再介绍实时进程的调度。SCHED_FIFO策略很简单,就是选取最高静态优先级的实时进程投入运行,并且直到进程运行完成或被更高优先级的实时进程抢占。SCHED_RR是带时间片的SCHED_FIFO.内核不为实时进程计算动态优先级。

Linux内核2.6的进程调度相关推荐

  1. 【Linux 内核】Linux 操作系统结构 ( Linux 内核在操作系统中的层级 | Linux 内核子系统及关系 | 进程调度 | 内存管理 | 虚拟文件系统 | 网络管理 | 进程间通信 )

    文章目录 一.Linux 内核在操作系统中的层级 二.Linux 内核子系统 三.Linux 内核子系统之间的关系 一.Linux 内核在操作系统中的层级 Linux 内核 所在层级 : 整个计算机系 ...

  2. linux swi 内核sp,Linux内核分析课程8_进程调度与进程切换过程

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Linux内核课第八周作业.本文在云课堂中实验楼完成. 原创作品转载请注明出处 <Linux内核分析>MOO ...

  3. Linux内核设计与实现---进程调度

    进程调度 1 策略 I/O消耗型和处理器消耗型的进程 进程优先级 时间片 进程抢占 2 Linux调度算法 可执行队列 优先级数组 重新计算时间片 schedule() 计算优先级和时间片 睡眠和唤醒 ...

  4. (笔记)Linux内核学习(三)之进程调度

    进程调度: 在可运行态进程之间分配有限处理器时间资源的内核子系统. 一 调度策略 1 进程类型 I/O消耗型进程:大部分时间用来提交I/O请求或是等待I/O请求,经常处于可运行状态,但运行时间短,等待 ...

  5. linux内核调度,Linux内核的三种调度策略

    一 Linux内核的三种调度策略: 1,SCHED_OTHER 分时调度策略, 2,SCHED_FIFO实时调度策略,先到先服务.一旦占用cpu则一直运行.一直运行直到有更高优先级任务到达或自己放弃 ...

  6. Linux内核分析2:一个简单的时间片轮转多道程序内核代码分析

    Lab2:一个简单的时间片轮转多道程序内核代码 席金玉   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 ...

  7. Linux内核进程调度的时机和进程切换

    陈铁+ 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 对于现代操作系统,多 ...

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

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

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

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

最新文章

  1. MySQL5.7参数log_timestamps
  2. 【codevs2912】反素数,好好学习天天向上
  3. vector中resize()和reserve()区别
  4. 总是通过加班,来完成工作,那都是假象
  5. atitit。 hb Hibernate sql 查询使用
  6. Centos7.5 安装禅道16.x版本,Linux 安装最新版本的禅道
  7. C++ 二进制读入和Minist图片展示
  8. 无80端口情况下使用 CertBot 申请SSL证书 并实现自动续期
  9. 做成事情的3个要素:意愿、能力、资源
  10. arm交叉编译ntpdate与服务器进行时间同步
  11. 高速设计学习-干货!高速串行Serdes均衡之FFE
  12. python ipad pro_离开 PC,在 iPad Pro 上也能编程了?
  13. 光伏项目电力监控系统的重要
  14. 2022全球与中国瞬态发生器市场现状及未来发展趋势
  15. 威眼局域网监控软件3.7.2发布
  16. Web安全之CTF测试赛
  17. Axure RP 9最新版的授权码(专业版)亲测可用
  18. 视觉算法需要哪些知识,视觉算法和图像算法
  19. ISD1700系列语音芯片使用注意事项
  20. VMware 安装 Windows11

热门文章

  1. SQL Server 创建约束图解 唯一 主键
  2. jquery---基本标签
  3. 在vmware esx平台创建windows 2003 server群集时无法找到共享磁盘的解决方法
  4. 在Linux上配置Telnet服务
  5. ASP.NET 页生命周期概述
  6. Node.js和NoSQL开发比特币加密货币应用程序(下)
  7. 爱奇艺发布2018年Q2财报:总营收62亿元同比大增51%,会员收入达25亿元
  8. CentOS7编译安装LNMP
  9. centos6.5下的elk部署
  10. 【有上下界网络流】【ZOJ】2314 Reactor Cooling