zl程序教程

您现在的位置是:首页 >  系统

当前栏目

【Linux 内核】调度器 ① ( 调度器概念 | 调度器目的 | 调度器主要工作 | 调度器位置 | 进程优先级 | 抢占式调度器 | Linux 进程状态 | Linux 内核进程状态 )

Linux内核概念进程状态 工作 位置 调度
2023-09-14 09:07:27 时间





一、调度器




0、调度器概念


Linux 内核的 " 进程调度 " 是按照 设计好的调度算法 安排的 , 该算法对应的功能模块 称为 " 调度器 " , 英文名称是 Scheduler ;


1、调度器目的


进程调度 目的是 最大限度利用 CPU 资源 , 也就是 CPU 时间片 ;


2、调度器主要工作


" 调度器 " 主要的工作 :

  • ① 就绪 -> 执行 : 选择 " 就绪状态 " 的进程执行 ; ( 占用 CPU )
  • ② 执行 -> 就绪 : 打断 " 执行状态 " 的进程执行 , 先进入 " 阻塞状态 " , 然后变为 " 就绪状态 " ; ( 让出 CPU )

" 调度器 " 可以 切换 " 进程状态 " , 主要是 " 就绪状态 "" 执行状态 " 这两个状态之间相互切换 ;


3、调度器位置


调度器 在 如下的 进程状态图 中的位置是 " 就绪状态 " 与 " 运行状态 " 之间 ;

  • 就绪状态 : 进程 已经 获取了 相关资源 , 以及 运行条件准备就绪 ;
  • 执行状态 : CPU 时间片被分配给了该进程 , 正在 CPU 中执行该进程 ;

在这里插入图片描述


4、进程优先级


" 调度器 " 根据 " 进程优先级 " 进行 进程调度 ;


进程优先级 参考 【Linux 内核】进程管理 - 进程优先级 ② ( prio 调度优先级 | static_prio 静态优先级 | normal_prio 正常优先级 | rt_priority 实时优先级 ) 博客 ;

进程优先级限期进程实时进程普通进程
prio 调度优先级等于 normal_prio 字段等于 normal_prio 字段等于 normal_prio 字段
static_prio 调度优先级字段 值总为 0 0 0 , 没有意义字段 值总为 0 0 0 , 没有意义 120 + n i c e \rm 120 + nice 120+nice , 其数值越小 , 优先级越高
normal_prio 正常优先级 − 1 -1 1 99 − r t _ p r i o r i t y 99 - \rm rt\_priority 99rt_priority 120 + n i c e \rm 120 + nice 120+nice , 其数值越小 , 优先级越高
rt_priority 实时优先级字段 值总为 0 0 0 , 没有意义字段 值为 1 1 1 ~ 99 99 99 , 其数值越大 , 优先级越高字段 值总为 0 0 0 , 没有意义

5、抢占式调度器


" 抢占式调度器 " 概念 : 如果 " 调度器 " 支持 " 就绪状态 " " 运行状态 " 之间可以相互转换 , 则该调度器称为 " 抢占式调度器 " ;





二、Linux 内核进程状态 API 简介



Linux 内核进程状态有以下五种 :

  • TASK_RUNNING 执行 / 就绪状态
  • TASK_INTERRUPTIBLE 可中断睡眠状态
  • TASK_UNINTERRUPTIBLE 不可中断睡眠状态
  • __TASK_STOPPED 进程停止状态
  • EXIT_ZOMBIE 僵尸状态

上面的 5 5 5 种状态是 Linux 内核中定义的状态 , 详细细节参考 【Linux 内核】进程管理 ( Linux 内核中的进程状态 | TASK_RUNNING | TASK_INTERRUPTIBLE | __TASK_STOPPED | EXIT_ZOMBIE ) 博客 ;





三、Linux 进程状态



Linux 进程有如下状态 :

  • 创建状态 : 进程 刚被创建时 , 处于创建状态 ;
  • 就绪状态 : 进程 已经 获取了 相关资源 , 以及 运行条件准备就绪 ; 一旦和获取 CPU 时间片使用权 , 就立刻进入 执行状态 ;
  • 执行状态 : CPU 时间片被分配给了该进程 , 正在 CPU 中执行该进程 ;
  • 阻塞状态 : 等待被分配 CPU 时间片的过程 中 , 处于该状态 ;
  • 终止状态 : 进程 终止后的状态 ;

在这里插入图片描述

状态之间的转换 , 参考 【Linux 内核】进程管理 ( Linux 中进程的 CPU 资源调度 | 进程生命周期 | 创建状态 | 就绪状态 | 执行状态 | 阻塞状态 | 终止状态 | 进程生命周期之间的转换 ) 博客 ;