该函数完成如下工作
确定当前就绪队列, 并在保存一个指向当前(仍然)活动进程的task_struct指针
检查死锁, 关闭内核抢占后调用__schedule完成内核调度
恢复内核抢占, 然后检查当前进程是否设置了重调度标志...函数, 去查找最优的那个进程, 当然因为大多数情况下, 系统中全是CFS调度的非实时进程, 因而linux内核也有一些优化的策略
其执行流程如下
如果当前cpu上所有的进程都是cfs调度的普通非实时进程...prev是隶属于CFS的普通非实时进程
* 而当前cpu的全局就绪队列rq中的进程数与cfs_rq的进程数相等
* 则说明当前cpu上的所有进程都是由cfs调度的普通非实时进程...的进程则直接返回,否则递减时间片,如果时间片耗完,则需要将当前进程放到运行队列的末尾, 这个时候才操作运行队列(FIFO和RR进程,是否位于同一个plist队列?)...标志,则函数重新执行进行调度 */
2.2 __schedule如何完成内核抢占
完成一些必要的检查, 并设置进程状态, 处理进程所在的就绪队列
调度全局的pick_next_task选择抢占的进程