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