一起学习网 一起学习网


调度器Linux CFS调度器:实现多任务管理的优先级分配(linuxcfs)

网络编程 调度器Linux CFS调度器:实现多任务管理的优先级分配(linuxcfs) 10-11

Linux CFS调度器(Completely Fair Scheduler,完全公正调度器)是Linux内核中采用的一种调度器,它旨在实现在操作系统中多任务的管理,它让操作系统根据优先级及其它多种因素来决定每一块CPU处理哪个任务,以实现根据每个任务的特性选择最合适的CPU调度策略。Linux CFS调度器向操作系统中的运行的任务分配表示 CPU 运行时间的时间片,每个任务都会按照其优先级和运行时间从而分配 CPU 时间片,这样就能充分利用 CPU 便于任务的调度,以达到负载均衡的效果,以保证系统低延迟、高效率和稳定运行。

Linux CFS调度器按照 “Actual Finish Time” (ACT) 的形式来管理进程和对象,它使用一种基于红黑数求根树 (RB-Tree) 的数据结构(参见下图)来进行管理,这是一种有效管理多任务的数据结构。

![RB-Tree管理](01160311_ws44s3w4qwq.jpg)

RB-Tree 的特点:(1) 根据它的秩 (degree) 来排序运行任务,根据优先级排序,(2) 支持动态的插入、删除、搜索等操作,(3) 时间复杂度为 O (logn),即几乎不会发生阻塞,从而可以保证进程在实时性方面更稳定,具有更好的响应速度。

下面这段代码是 Linux CFS 调度器的优先级转换函数:

static inline void __prio_changed(struct rq *rq, struct task_struct *p,
int oldprio)
{
if (rq->curr == p) {
set_rq_task(rq, p);
rq->aff_info.flags |= RQCF_ACTIVE_BALANCE;
}
if (p->prio
insert_task_rbtree(rq, p);
else
delete_task_rbtree(rq, p);
}```
它会根据传入的参数调用相关的函数来改变任务的优先级,以实现每一次优先级的变化,并修改RB-Tree数据结构。
Linux CFS调度器可使操作系统充分利用CPU,它支持动态的插入、删除、搜索操作,这样每个任务都能被优先分配好自己应得的资源,从而实现多任务管理的优先级分配。

编辑:一起学习网

标签:优先级,数据结构,时间,分配,操作系统