linux调度器原理
linux内核默认提供了5个调度器,linux内核使用struct sched_class来对调度器进行抽象:
- stop调度器,stop_sched_class:优先级最高的调度器,可以抢占其他所有进程,不能被其他进程抢占
- deadline调度器,dl_sched_class:使用红黑树,把进程按照绝对截止期限进行排序,选择最小进程进行调度运行
- rt调度器,rt_sched_class:实时调度器,为每个优先级维护一个队列
- cfs调取器,c f s_sched_class:完全公平调度器,采用完全公平调度算法,引入虚拟运行时间概念
- idle-task调取器,idle_sched_class:空闲调度器,每个cpu都会有一个idle线程,当没有其他进程可以调度时,调度运行idle线程
cfs调度器原理:
- cfs是completely fair shceduler简称,即完全公平调度器
- cfs主要思想是维护为任务提供处理器时间方面的平衡,这意味着应给进程分配相当数量的处理器
- 分给某个任务的时间失去平衡时,应给失去平衡的任务分配时间,让其执行
- cfs通过虚拟运行时间(vruntime)来实现平衡,维护提供给某个任务的时间量
- 进程按照各自不同的速率在物理时钟节拍内前景,优先级高则权重大,其虚拟时钟比真实时钟跑得慢,但获取比较多的运行时间
vruntime红黑树
vfs调度器没有将进程维护在队列中,而是维护了一个以虚拟运行时间为顺序的红黑树,红黑树的主要特点有:
- 1,自平衡,树上没有一条路会比其他路径长出两倍
- 2,时间复杂度,能够在树上进行快速高效的插入或者删除进程
全世界的程序员们联合起来吧!