每日阅读4之linux内核设计与实现——linux调度实现之调度器入口
2013-03-23 16:52
387 查看
linux调度的入口函数时schedule(),定义在文件kernel/sched.c
是内核其它部分用于调用进程调度器的入口:选择哪个进程可以运行,何时将其投入运行
通常需要和一个具体的调度类相关联,一般是优先级最高的,每个调度类都有一个自己的可运行队列
这个函数唯一的作用就是调用pick_next_task,依次检查每个调度器类,并且从最高优先级的调度器类中选择最高优先级的进程运行。。
/*
* Pick up the highest-prio task:
*/
static inline struct task_struct *
pick_next_task(struct rq *rq)
{
const struct sched_class *class;
struct task_struct *p;
/*
* Optimization: we know that if all tasks are in
* the fair class we can call that function directly:
*/
if (likely(rq->nr_running == rq->cfs.nr_running)) {
//这里做了个优化,如果只有一个调度器类( 每一个调度器类都实现了自己的pick_next_task函数,普通进程的调度器类为CFS),
p = fair_sched_class.pick_next_task(rq);
if (likely(p))
return p;
}
class = sched_class_highest;
for ( ; ; ) {
p = class->pick_next_task(rq);
//从最高优先级的调度类开始,选择每个最高优先级调度器类中的那个进程
if (p)
return p;
/*
* Will never be NULL as the idle class always
* returns a non-NULL p:
*/
class = class->next;
}
}
OVER!!!
下一章是睡眠与唤醒
是内核其它部分用于调用进程调度器的入口:选择哪个进程可以运行,何时将其投入运行
通常需要和一个具体的调度类相关联,一般是优先级最高的,每个调度类都有一个自己的可运行队列
这个函数唯一的作用就是调用pick_next_task,依次检查每个调度器类,并且从最高优先级的调度器类中选择最高优先级的进程运行。。
/*
* Pick up the highest-prio task:
*/
static inline struct task_struct *
pick_next_task(struct rq *rq)
{
const struct sched_class *class;
struct task_struct *p;
/*
* Optimization: we know that if all tasks are in
* the fair class we can call that function directly:
*/
if (likely(rq->nr_running == rq->cfs.nr_running)) {
//这里做了个优化,如果只有一个调度器类( 每一个调度器类都实现了自己的pick_next_task函数,普通进程的调度器类为CFS),
p = fair_sched_class.pick_next_task(rq);
if (likely(p))
return p;
}
class = sched_class_highest;
for ( ; ; ) {
p = class->pick_next_task(rq);
//从最高优先级的调度类开始,选择每个最高优先级调度器类中的那个进程
if (p)
return p;
/*
* Will never be NULL as the idle class always
* returns a non-NULL p:
*/
class = class->next;
}
}
OVER!!!
下一章是睡眠与唤醒
相关文章推荐
- 每日阅读3之内核设计与实现(第三版)4.5——linux调度实现之进程选择
- 每日阅读1之内核设计与实现(第三版)4.5——linux调度实现之时间记账
- 每日阅读5之linux内核设计与实现——linux内核调度之睡眠与唤醒
- 每日阅读6之linux内核设计与实现——抢占与上下文切换
- 每日阅读9之linux内核设计与实现——中断上半部与下半部
- 读薄「Linux 内核设计与实现」(2) - 进程管理和调度
- 每日阅读12内核设计与实现——中断处理程序与中断上下文
- linux内核设计与实现一书阅读整理 之第五章
- Linux内核设计与实现-进程管理与进程调度
- linux内核设计与实现一书阅读整理 之第三章
- 每日阅读7之linux内核设计与实现——实时调度与调度系统调用
- linux内核设计与实现摘录及 Linux的内核源代码 的阅读
- 每日阅读11之内核设计与实现——注册中断处理程序
- linux内核设计与实现一书阅读整理 之第一二章整合
- Linux 内核设计与实现学习笔记之第一章Linux内核简介和第二张从内核出发
- Linux内核通用队列的使用笔记(读linux内核设计与实现)
- Linux 2.4.x内核中网络协议栈QoS模块(TC)的设计与实现
- Linux内核设计与实现 第十八章
- linux内核进程调度以及定时器实现机制
- Linux内核设计与实现 学习笔记(7)设备与模块