1.5 KiB
1.5 KiB
- 调度策略
- SCHED_NORMAL(SCHED_OTHER): 普通的分时进程
- SCHED_FIFO: 先进先出的实时进程
- SCHED_RR: 时间片轮转的实时进程
- SCHED_BATCH: 批处理进程
- SCHED_IDLE: 只在系统空闲时才能被调度执行的进程
- 调度时机
- 主动式
- 在内核中直接调用schedule() 当进程需要等待资源而暂时停止运行,主动请求调度把自己挂起
- current -> state = TASK_INTERRUPTIBLE(可唤醒的阻塞态)
- schedule()
- 在内核中直接调用schedule() 当进程需要等待资源而暂时停止运行,主动请求调度把自己挂起
- 被动式
- 又名抢占式调度,用户态抢占2.4+2.6,内核态抢占2.6
- 用户抢占 -> 用户态(时间) / 抢占
- 从系统调用返回用户空间
- 从中断处理程序返回用户空间
- 内核态抢占
- 进程/线程一旦运行到内核态,就可以一直执行,直到它主动放弃或者时间片耗尽为止,会降低整个系统的实时性 2.4
- 中断处理程序完成,返回内核空间之前
- 当内核代码再一次具有可抢占性的时候,如解锁以及使能软中断
- 不允许抢占
- 内核正在运行中断处理
- 正在执行调度
- 持有锁的时候
- 抢占计数
- 抢占式内核有一个内核抢占计数preement_count
- 主动式
- 调度步骤
- schedule函数工作流程
- 清理当前运行中的进程
- 选择下一个要运行的进程
- 设置新进程的运行环境
- 进程上下文切换
- schedule函数工作流程