掌控进程:深入剖析 Linux 内核调度机制
用不同的调度策略调度实时进程。普通进程支持两种调度策略标准轮流分时SCHED_NORMAL默认的调度策略调度大多数非实时、通用目的的进程。用完全公平调度器CFS为所有进程提供公平的 CPU 时间分配同时考虑进程的nice值。批处理调度SCHED_BATCH 调度普通的非实时进程针对 CPU 密集型、非交互式任务进行了优化。空闲SCHED_IDLE最低优先级的调度策略。只有系统没有其他任何可运行的进程SCHED_IDLE进程才会被调度运行。二、进程优先级限期进程的优先级比实时进程高实时进程的优先级比普通进程高。优先级层次限期进程 (SCHED_DEADLINE) 有最高的优先级根据截止时间进行调度在所有其他进程之前完成。实时进程 (SCHED_FIFO,SCHED_RR) 的优先级次之高于所有普通进程。普通进程 (SCHED_NORMAL,SCHED_BATCH) 有相对较低的优先级。空闲进程 (SCHED_IDLE) 有最低的优先级。限制进程的优先级是-1。实时进程的实时优先级是 1-99优先级数值越大表示优先级 越高。普通进程的静态优先级是 100-139优先级数值越小表示优先 级越高可通过修改 nice 值改变普通进程的优先级优先级等于 120 加上 nice 值。优先级数值限期进程优先级由截止时间决定截止时间越早逻辑优先级越高。实时进程优先级范围是 1 到 99。数值越大优先级越高。普通进程静态优先级范围是 100 到 139。数值越小优先级越高。普通进程的优先级可以修改nice值来调整。nice值的范围是 -20 到 19。静态优先级计算公式静态优先级 120 nice 值。空闲进程优先级最低内部表示为 -1。prio是调度优先级数值越小优先级越高多数情况为normal_prio。优先级限期进程普通进程实时进程prionormal_prionormal_prionormal_priostatic_prio0120 加上 nice 值数值越小优先级越高。0normal_prio-1static_prio99至rt_priorityrt_priority001至99数值越大优先级越高在 task_struct 结构体中4 个成员和优先级有关如下代码语言C自动换行AI代码解释// include/linux/sched.h int prio; int static_prio; int normal_prio; unsigned int rt_priority;int prio;进程的动态优先级也是调度器实际用的优先级。数值越小优先级越高。int static_prio;进程的静态优先级。普通进程由120 nice 值决定实时进程和限期进程为 0因为优先级由rt_priority或截止时间决定。int normal_prio;进程的正常优先级。基于static_prio或rt_priority计算得出。unsigned int rt_priority;实时进程的实时优先级范围是 1 到 99。对于非实时进程值为 0。三、公平调度 CFS 与其它调度3.1、调度类Linux 内核 sched_class 调度器有五种类型dl_sched_class限期调度类。rt_sched_class实时调度类。stop_sched_class停机调度类。idle_sched_c lass。fair_sched_class。其中每种调度类都有自己的调度策略。主要是为方便添加新的调度策略 Linux 内核抽象一 个调 度类 sched_class。其调试器类型源码如下kernel/sched/sched.h代码语言C自动换行AI代码解释extern const struct sched_class dl_sched_class extern const struct sched_class rt_sched_class extern const struct sched_class stop_sched_class extern const struct sched_class idle_sched_c lass extern const struct sched_class fair_sched_classstop_sched_class调度类可以抢占其他进程其他进程不能抢占它停机调度类是指将处理器停下来做更加紧急的工作只有迁移线程属于停机调度类每个CPU有一个迁移线程cpu_id。dl_sched_class调度类使用红黑树将进程按照绝对截至限期从小到大排序每次调度的时间选择绝对截止限期最小的进程。rt_sched_class将每个调度优先级维护一个队列通过位图bitmap能够快速查找第一个非空队列DECLARE_BITMAP(bitmap,MAX_RT_PRIO1)。调度类优先级由高到低进行排列停机调度类限期调度类 实时调度类公平调度类空闲调度类。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2416736.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!