linux进程调度的实现一共由四部分组成
(1)、时间记账(就是记录进程已经运行了多长时间了,还要运行多长时间)
(2)、进程选择(加入红黑树)
(3)、调度器入口
(4)、睡眠和唤醒
进程记账:
这个说的挺形象的,就是记录一个进程占用处理器资源的时间长短。既然要记录,那么就需要存放在一个位置,内核说:放在sched_entity结构中吧!
sched_entity结构(2.6内核源码kernel/sched/fair.c 1134 行):
struct sched_entity {
struct load_weight load; /* for load-balancing */
struct rb_node run_node;
struct list_head group_node;
unsigned int on_rq;
u64 exec_start;
u64 sum_exec_runtime;
u64 vruntime;
u64