调度器Linux CFS调度器:实现多任务管理的优先级分配(linuxcfs)
网络编程
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,它支持动态的插入、删除、搜索操作,这样每个任务都能被优先分配好自己应得的资源,从而实现多任务管理的优先级分配。
编辑:一起学习网
标签:优先级,数据结构,时间,分配,操作系统