美文网首页
进程调度

进程调度

作者: allenhaozi | 来源:发表于2020-02-02 12:48 被阅读0次

多任务

多任务系统可以划分为两类:

  • 非抢占式多任务

除非进程自己停止, 否则它会一直执行

  • 抢占式多任务

由调度程序决定什么时候停止一个进程的运行, 以便其他进程能够得到运行的机会, 这个强制的挂起动作就叫做抢占

调度策略通常通常在两个矛盾的目标中间寻找平衡

  • 进程的响应迅速
  • 最大系统利用率

进程优先级

用户和系统都可以通过设置进程的优先级来影响系统的调度
Linux系统采用了两种不同的优先级范围:

  1. nice值
    范围是-20到+19, 默认值是0, 越大的nice值意味着更低的优先级, 低nice值得进程可以过得更多的处理器时间
  2. 实时优先级
    默认它的变化范围是0到99, 越高的实时优先级意味着进程优先级越高, 任何实时的优先级都高于普通的进程

时间片

是一个数值, 表示进程在被强占前所能持续运行的时间, 调度策略必须规定一个默认的时间片, 但是这并不是一个简单的事情,
过长: 导致系统对交互的响应表现欠佳, 让人觉得无法并发执行应用程序
过短: 明显增加进程切换带来的处理器耗时

默认时间片

IO消耗型: 不需要更多的时间片
处理器消耗型: 希望越长的时间片

所以默认的时间片很短, 10ms

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

是否抢占:

  1. 优先级
  2. 是否有时间片

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

CFS

允许每个进程运行一段时间, 循环轮转, 选择运行最少的进程作为下一个进程
在所有可运行进程总数基础上计算出一个进程应该运行多久, 而不是依靠nice值来计算时间片,
nice值在CFS中作为进程获取得的处理器运行比的权重, 越高的nice值或者更低的处理器使用权重

每个进程都按其权重在全部可运行进程中所占比例的时间片来运行, 为了计算准确的时间片, CFS为完美多任务中的无限小调度周期的近似值设立了一个目标, 这个目标成为目标延迟,
越小的调度周期将带来越好的交互性, 同时也跟接近完美的多任务接受更高的切换代价和更差的系统吞吐

相同nice值

我们假定 目标延迟 是20ms, 如果有两个同样优先级的程序, 每个人物被其他抢占前可以运行10ms, 如果4个 每个5ms, 如果无限大, 每个运行的时间片趋于0
由此产生了 最小粒度 默认的情况下这个值是1ms

不同nice值

我们来看看具有不同的nice值得两个可运行程序
目标延迟: 20ms
A: nice值是0, B:nice值是5
B是A的1/3 ?
A: 20 * 3 / 4 = 15
B: 20 * 1 / 4 = 5

vruntime

CFS使用vruntime变量来记录一个程序到底运行了多长时间以及它还应该再运行多久

进程选择

选择具有最小vruntime的任务
CFS采用红黑树来组织可运行队列, 并利用其迅速找到最小的vruntime值进程
所有进程最左边的那个叶子节点,

抢占

从一个可执行进程切换到另一个可执行进程, 由定义在kernel/sched.c中的context_switch函数负责处理
保存,恢复栈信息和寄存器信息

相关文章

  • Nuttx Task Schedule

    调度概念 进程调度 按照某种调度算法从就绪队列中选取进程分配CPU,主要是协调对CPU等的资源使用。进程调度目标是...

  • 第三章 处理机调度与死锁

    3.2 作业与作业调度 3.2.3 先来先服务(FCFS)和短作业优先(SJF)调度算法 进程调度 进程调度方式:...

  • 学习之路 | 1 进程调度

    进程调度 多任务 Linux的进程调度 策略 策略决定调度程序在何时让什么进程运行。调度器的策略往往就决定系统的整...

  • 常用调度算法简介

    常用调度算法简介 一、关于调度 进程调度用于多进程或者多线程并发访问资源。 进程调度的需求出现在同时执行多个任务(...

  • 进程调度

    目标 本章将讨论Linux内核是如何进行进程调度的,进程调度程序(也称为调度器)的工作与实现原理。 进程调度程序负...

  • Linux 调度

    调度策略与调度类 进程包括两类: 实时进程(优先级高); 普通进程 两种进程调度策略不同: task_struct...

  • Linux进程调度

    Linux进程调度是通过内核子系统:进程调度程序完成的。进程调度程序决定投入运行的进程、何时运行已经运行时长。从这...

  • Linux内核学习013——进程调度(二)

    Linux内核学习013——进程调度(二) Linux的进程调度 早期版本(1~2.4)的Linux内核中,调度程...

  • 打通Framework与Kernel-谈谈我对进程管理的理解

    Kernel:Linux学习-进程管理与调度(一)-进程描述及其生命周期Linux学习-进程管理与调度(二)-进程...

  • 操作系统-03-操作系统的作业管理

    进程调度 进程调度是指计算机通过决策决定哪一个就绪进程可以获得CPU的使用权。 进程调度一般需要保留旧进程的运行信...

网友评论

      本文标题:进程调度

      本文链接:https://www.haomeiwen.com/subject/iagfxhtx.html