【Linux 内核】调度器 ① ( 调度器概念 | 调度器目的 | 调度器主要工作 | 调度器位置 | 进程优先级 | 抢占式调度器 | Linux 进程状态 | Linux 内核进程状态 )
一、调度器
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 99−rt_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 资源调度 | 进程生命周期 | 创建状态 | 就绪状态 | 执行状态 | 阻塞状态 | 终止状态 | 进程生命周期之间的转换 ) 博客 ;
相关文章
- Linux内核的内存管理与漏洞利用案例分析
- Linux编译内核:五大步骤操作指南(linux编译内核的步骤)
- 学习鸟哥Linux的私房美味(鸟哥linux的私房菜)
- Linux 网络认证:安全的在线体验(linux上网认证)
- 安全第一:Linux 目录锁定技术(linux目录锁定)
- 管理Linux文件权限的基础Linux命令(linux命令文件权限)
- 浅析Linux内核配置的精妙之处(linux内核配置过程)
- 设备支持Linux内核OTG设备:双向连接更便捷(linux内核otg)
- 使用Linux指令快速精准过滤文件(linux文件过滤)
- Linux在启动时运行后台进程(linux启动后台进程)
- Linux的发展史:从Monolithic内核到多分支系统(linux的分支)
- Linux的新型分支:从概念到实践(linux的分支)
- Linux分支:从概念到实践(linux的分支)
- 机Linux串口死机处理方法(linux串口死)
- Linux 下批量重命名的技巧(批量重命名linux)
- 快捷便利,搞定批量创建Linux用户(批量创建linux用户)
- 极速搭建 Linux 下的数据库(linux搭建数据库)
- 龙井:Linux上的新生(龙井linux)
- 优化精简Linux IDL文件以获得性能优化(linuxidl文件)
- 探索Linux内核源代码树的奥秘(linux内核源代码树)
- 探究Linux内核在嵌入式系统中的应用与优势(linux内核嵌入式系统)
- Linux下连接必备软件:必不可少(linux 连接软件)