本博文主要从三个方面简单介绍下linux进程调度,调度时机,调度策略,调度步骤三个方面简单介绍下linux系统额进程调度
1 . 什么是调度
调度就是在一组可运行状态的进程中选择一个最合适的进程来执行,这个是调度程序所要完成的基本操作
2. 调度策略
SCHED_NORMAL(SCHED_OTHER): 普 通 的 分时 进程
SCHED_FIFO : 先 入 先出 的 实 时 进程
SCHED_RR : 时 间 片 轮转 的 实 时 进程
SCHED_BATCH: 批 处理 进程
SCHED_IDLE: 只 在 系统空 闲 时 才能 够 被调度执行 的
3.调度类
linux内核将上面的5种调度方式划分成两张调度类
调度 类 的 引 入 增强 了 内核 调度程序 的 可 扩展性 , 这 些类( 调度程序 模 块 ) 封装 了调度 策略 ,并将 调度 策略模 块 化
CFS 调度 类 (在 在 kernel/sched_fair.c 中实 现 ) 用 于以 下 调度 策略 :
SCHED_NORMAL 、SCHED_BATCH 和 和 SCHED_IDLE 。
实 时 调度 类 (在 在 kernel/sched_rt.c 中实 现 ) 用 于以 下 调度 策略 :
SCHED_RR 和 和 SCHED_FIFO 策略 。
备注:struct sched_class 是调度类结构体 ,其中 pick_next_task : 选择下 一 个 要 运 行 的进程,调度策略在这个函数里面体现出来
4.调度时机
1 、 主 动式
在内核 中 直 接调 用schedule() 这个函数来实现进程调度。比如在下面这种情况需要主动式调度, 当 进程 需 要 等待资 源 等 而暂 时 停 止 运 行 时 , 会把 状态 置于 挂起(睡眠) ,并 主 动 请求 调度 , 让 出CPU 。
主 动 放 弃cpu 例:
current->state = TASK_INTERRUPTIBLE; //将进程设置为可中断状态,此时就不会被调度程序唤醒
schedule();
<