目录

进程分类

进程抢占

调度算法和调度类

普通进程的调度

基础时间片的计算

动态优先级和平均睡眠时间

实时进程调度

同优先级FIFO RR并存


进程分类

有两种传统的分类法:

方法一

  • CPU密集
  • I/O密集

方法二

  • 交互 (比如记事本)
  • 批处理 (比如后台、编译器进程)
  • 实时

进程抢占

进程是可抢占的,在新的进程进入TASK_RUNNING状态,表示可以运行的时候,内核会检查他们的动态优先级。如果比当前的进程优先级高就调用调度器进行调度。

调度算法和调度类

SCHED_FIFO
一个先入先出的实时过程。当调度器将CPU分配给进程时,它会将进程描述符保留在运行队列列表中的当前位置。如果没有其他更高优先级的实时进程可以运行,那么该进程将继续使用CPU,即使其他具有相同优先级的实时进程也可以运行。
SCHED_RR
一个实时的时间片轮过程。当调度器将CPU分配给进程时,它会将进程描述符放在运行队列列表的末尾。此策略可确保将CPU时间公平地分配给所有具有相同优先级的SCHED_RR实时进程。
SCHED_NORMAL
普通的分时进程。

普通进程的调度

基础时间片的计算

时间片不是每个进程都一样的。是根据静态优先级算出来的。

优先级越高时间片越长。

动态优先级和平均睡眠时间

动态优先级会在静态优先级的基础上根据前一段时间统计的平均睡眠时间进行小幅度调整。

平均睡眠时间长,内核认为这个进程可能是交互式进程。会抬高它的动态优先级。

实际的调度是按照动态优先级调度的。

实时进程调度

每个实时进程都与实时优先级相关联,其值范围从1(最高优先级)到99(最低优先级)。调度程序总是倾向于高优先级的可运行进程,而不是低优先级的进程;换句话说,是实时的进程在保持可运行时抑制每个低优先级进程的执行。

同优先级FIFO RR并存

Linux 提供了两种实时调度策略,SCHED_FIFO 和 SCHED_RR。正常的非实时调度策略是 SCHED_NORMAL。 SCHED_FIFO 实现了一个简单的没有时间片的先进先出调度算法。一个可运行的 SCHED_FIFO 任务总是调度在任何 SCHED_NORMAL 任务之上。当 SCHED_FIFO 任务变为可运行时,它会继续运行,直到它阻塞或显式让出处理器;它没有时间片,可以无限期地运行。只有更高优先级的 SCHED_FIFO 或 SCHED_RR 任务可以抢占 SCHED_FIFO 任务。具有相同优先级的两个或多个 SCHED_FIFO 任务循环运行,但同样仅在它们明确选择这样做时才让出处理器。如果 SCHED_FIFO 任务是可运行的,则所有优先级较低的任务在完成之前都无法运行。 SCHED_RR 与 SCHED_FIFO 相同,只是每个进程只能运行到它用完预定的时间片。也就是说,SCHED_RR 是带有时间片的 SCHED_FIFO,它是一种实时循环调度算法。当 SCHED_RR 任务耗尽其时间片时,任何其他处于其优先级的实时进程都将被调度轮询。时间片仅用于允许重新安排相同优先级的进程。与 SCHED_FIFO 一样,高优先级的进程总是立即抢占低优先级的进程,而低优先级的进程永远不能抢占 SCHED_RR 任务,即使它的时间片已用尽。

只有当发生以下事件之一时,实时进程才会被另一个进程取代:

  • 该进程被具有更高实时优先级的另一个进程抢占
  • 该进程执行阻塞操作,并将其置于休眠状态(状态为TASK_可中断或TASK_UNINTERRUPTIBLE)。
  • 进程停止(状态为TASK_STOPPED或TASK_TRACED),或被终止(状态为EXIT_ZOMBIE或EXIT_DEAD)。
  • 该进程通过调用sched_yield()系统调用来自愿放弃CPU(请参见本章后面的“与调度相关的系统调用”部分)。
  • 这个过程是实时循环(SCHED_RR),它已经耗尽了它的时间片。

Linux 进程调度策略相关推荐

  1. Linux进程调度策略分析

    Linux系统是抢占式多任务操作系统,是否要将一个进程立刻投入运行(也就是抢占当前进程),完全由该进程的优先级和是否有时间片来决定.但 CFS调度器:抢占时机取决于新的可执行程序消耗了多少处理器使用比 ...

  2. Linux进程调度策略的发展和演变--Linux进程的管理与调度(十六)

    日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 ...

  3. Linux进程调度策略有哪几种,Red Hat Enterprise Linux 8的9种实时进程调度策略

    Red Hat Enterprise Linux 8的9种实时进程调度策略 Red Hat Enterprise Linux 8使用是Linux内核版本是Kernel 4.18,其系统进程的实时调度策 ...

  4. linux进程调度策略和优先,linux进程调度之FIFO和RR调度策略

    严格地说,对于优先级对于实时进程和普通进程的意义是不一样的. 1.在一定程度上,实时进程优先级高,实时进程存在,就没有普通进程占用CPU的机会,(但是前一篇博文也讲过了,实时组调度出现在内核以后,允许 ...

  5. Linux进程管理与调度-之-目录导航【转】

    转自:http://blog.csdn.net/gatieme/article/details/51456569 版权声明:本文为博主原创文章 && 转载请著名出处 @ http:// ...

  6. Linux进程调度器概述--Linux进程的管理与调度(十五)

    日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 ...

  7. linux 的 swapper 进程不能sleep,Linux进程管理与调度.ppt

    Linux进程管理与调度 关于进程与线程Linux进程实现Linux进程调度策略Linux进程调度实现 1Linux进程与线程 Linux进程Linux线程 进程作为资源分配的基本单位而存在 线程作为 ...

  8. linux进程调度算法:分时调度策略、FIFO调度策略、RR调度策略

    原文链接:https://www.cnblogs.com/zhouhbing/p/3904827.html Linux内核的三种调度策略 一 Linux内核的三种调度策略: 1,SCHED_OTHER ...

  9. linux 进程rt,RTLinux进程调度策略总结

    实时调度策略介绍 实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,普通分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了 ...

最新文章

  1. as 不显示gradle视图_Python构建RESTful网络服务[Django篇:基于类视图的API]
  2. Linux基础网络服务概述
  3. threadlocal存连接对象的目的_面试官:知道ThreadLocal嘛?谈谈你对它的理解?
  4. Eclipse和PyDev搭建完美Python开发环境(Windows篇)(转)
  5. 权限认证php,2016年Linux认证基础知识:php做权限管理
  6. Algorithm Gossip (22) 中序式转后序式(前序式)
  7. php单文件短链接,php实现的短网址算法分享
  8. 【若依(ruoyi)】数据选择对话框
  9. Java黑皮书课后题第4章:*4.23(金融应用:酬金)编写一个程序,读取下面信息,然后输出一个酬金声明
  10. FortiGate双链路不同运营商上网配置
  11. 创邻科技张晨:智能物联为图数据库的迅速发展提供了良好应用场景
  12. 渐变背景免费UI设计素材专辑,让设计显得魅力非凡
  13. deeplearning中卷积后尺寸的变化
  14. 【题解】最近公共祖先
  15. 如何在新系统下重玩老游戏
  16. 【图解】ERP系统如何操作?具体步骤是什么?
  17. 单条知识:什么是平面束方程
  18. 合规安全大考核:移动应用安全策略全盘点
  19. 多目标线性规划(matlab编程)
  20. google 云开启 ssh 账号密码登录

热门文章

  1. 百度 android tts sdk,百度Android语音合成(TTS)SDK使用方法
  2. (何凳成博客)MySQL 加锁处理分析——学习笔记
  3. [转]什么是工作分解结构(WBS)?
  4. 还不错的云盘网盘PHP系统源码+支持对接云存储
  5. 关于页面出现未定义错误的解决
  6. 【Linux基础】常用开发工具——yum包管理工具
  7. html5 2019新年祝福页面,新年祝福语2019
  8. 小米运动APP小米手环公交卡充值,出现参数非法错误
  9. 双目立体视觉(双摄测距)
  10. 【爬虫】Python使用动态IP,多线程,爬取uncomtrade的数据