nodebook/Miscellaneous/嵌入式.md
2020-04-02 17:29:57 +08:00

1.5 KiB
Raw Permalink Blame History

  • 调度策略
    • 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函数工作流程
      • 清理当前运行中的进程
      • 选择下一个要运行的进程
      • 设置新进程的运行环境
      • 进程上下文切换