__schedule 功能描述
__schedule
1.完成一些必要的检查, 并设置进程状态, 处理进程所在的就绪队列
2.调度全局的pick_next_task选择抢占的进程
2.1
如果当前cpu上所有的进程都是cfs调度的普通非实时进程, 则直接用cfs调度找到进程
如果无程序可调度则找到 idle进程
2.2
否则从优先级*高的调度器类sched_class_highest(目前是stop_sched_class)开始依次遍历所有调度器类的pick_next_task函数, 选择*优的那个进程
//本例有 dl -> rt -> fair -> idle
//支持smp 的会有stop_sched_class -> dl_sched_class -> rt_sched_class -> fair_sched_class -> idle_sched_class
3.context_switch 完成进程上下文切换
3.1 调用switch_mm_irqs_off,把虚拟内存从一个进程映射切换到新进程中
3.2 调用switch_to,从上一个进程的处理器状态切换到新进程的处理器状态。
这包括保存、恢复栈信息和寄存器信息
调度器与调度策略
level1 : 6种调度策略
SCHED_NORAML
SCHED_BATCH
SCHED_IDLE
SCHED_RR
SCHED_FIFO
SCHED_DEADLINE
level2 : 调度器类
CFS: 封装了 SCHED_NORAML SCHED_BATCH
RT: 封装了 SCHED_RR SCHED_RR
IDLE: 封装了 SCHED_IDLE
STOP:
DEADLINE:
调度时机
分两种情况
1.一般来说,直接调度就行了
2.但是有的会分为两步,先置位 need_sched , 然后再某个时机判断 need_sched,然后调度
百检网秉承“客户至上,服务为先,精诚合作,以人为本”的经营理念,始终站在用户的角度解决问题,为客户提供“一站购物式”的新奇检测体验,打开网站,像挑选商品一样简单,方便。打破行业信息壁垒,建构消费和检测机构之间高效的沟通平台