Linux内核源码—进程调度(4.20.17)

sched_class

Linux 中有多种不同的调度策略,每一种调度策略都由不同的调度器类实现,在 sched_class 中定义了调度器需要实现的接口。

上面涉及到的 rq 就是 runqueue,每个 cpu 都对应着一个 runqueue,用来维护在该 cpu 上运行的进程。如果我们去看 struct rq 的定义,可以看到它 包含了 cfs_rq, rt_rq 和 dl_rq 这三种不同的 rq 供调度器使用

如果我们现在 fork() 了一个进程,就需要将它加入到 cfs_rq 队列中,此时 enqueue_task 运行 cfs 调度策略的入队方法,也就是在红黑树中插入节点。

sched_entity

由于调度往往还需要一些额外的信息,所以在 Linux 中定义了调度实体类。

我们还可以看到,在一个进程描述符 task_struct 中是包含多个调度实体的,sched_class 指针指向其对应的调度器,然后调度器再调度相应的调度实体。

Original: https://www.cnblogs.com/zyb993963526/p/15974912.html
Author: Kayden_Cheung
Title: Linux内核源码—进程调度(4.20.17)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/10040/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总