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,时间复杂度,能够在树上进行快速高效的插入或者删除进程

 

posted @ 2022-01-13 20:44  年轻人——001  阅读(294)  评论(0编辑  收藏  举报