1 / 3
文档名称:

调度子系统3_周期调度器.pdf

格式:pdf   页数:3
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

调度子系统3_周期调度器.pdf

上传人:翩仙妙玉 2013/12/22 文件大小:0 KB

下载得到文件列表

调度子系统3_周期调度器.pdf

文档介绍

文档介绍:奔跑的Linerdx的专栏
调度子系统3_周期调度器
分类: Linux调度子系统 2013-12-11 17:18 229人阅读评论(0) 收藏举报
linux内核进程调度
// 周期调度器
// 调用路径:update_process_times->scheduler_tick
// 函数任务:
//
//
//
// balance的时间戳
// balance
void scheduler_tick(void)
{
int cpu = smp_processor_id();
struct rq *rq = cpu_rq(cpu);
//当前运行的进程
struct task_struct *curr = rq->curr;
raw_spin_lock(&rq->lock);
//更新rq的clock
update_rq_clock(rq);
//更新队列负载
update_cpu_load_active(rq);
//更新进程的运行时间
curr->sched_class->task_tick(rq, curr, 0);
raw_spin_unlock(&rq->lock);
#ifdef CONFIG_SMP
//更新下一次load balance的时间戳
rq->idle_balance = idle_cpu(cpu);
//触发load balance软中断
trigger_load_balance(rq, cpu);
#endif
}
// 更新队列负载(rq->cpu_load[])
// 每scheduler tick(TICK_NSEC)被调用一次
// 函数任务:
//
// 通过CPU_LOAD_IDX_MAX个项记录rq的历史负载信息
// 更新方法
// cpu_load[0] =
// cpu_load[1] = (cpu_load[1] + )/2
// cpu_load[2] = (cpu_load[2]*3 + )/4
// cpu_load[3] = (cpu_load[2]*7 + )/8
//
// 更新下一次计算cpu负载的时间点
// 计算cpu负载
// 调用路径:scheduler_tick->update_cpu_load
static void update_cpu_load(struct rq *this_rq)
{
//rq中所有se负载的总和
unsigned long this_load = this_rq->;
int i, scale;
1
this_rq->nr_load_updates++;
//通过CPU_LOAD_IDX_MAX个项记录rq的历史负载信息
for (i = 0, scale