新闻中心

EEPW首页>嵌入式系统>设计应用> uClinux进程调度器的实现分析

uClinux进程调度器的实现分析

作者: 时间:2012-03-24 来源:网络 收藏

if (unlikely(!c)) {

/*若处于运行队列中的进程没有可调度的,那么得重新分配时间片*/

struct task_struct *p;

for_each_task(p)

p->counter = (p->counter >> 1) + NICE_TO_TICKS(p->nice);

goto repeat_schedule;

}

sched_data->curr = next;

task_set_cpu(next, this_cpu);www.51kaifa.com

if (unlikely(prev == next)){

/*如果选中的进程和原来运行的进程是同一个*/

prev->policy = ~SCHED_YIELD;

goto same_process;

}

kstat.context_swtch++;

/*全局统计进程上下文切换次数*/

prepare_to_switch();

/*准备进行进程切换*/

{

……/*进程的页表处理,代码略*/

}

switch_to(prev, next, prev); www.51kaifa.com

/*切换到选中的进程中*/

__schedule_tail(prev);

/*考虑将当前被切换下来的进程,放到别的CPU上运行*/

same_process:

reacquire_kernel_lock(current);www.51kaifa.com

/*重新获得内核锁*/

if (current->need_resched)

goto need_resched_back;

return;

}


整个schedule()的工作流程可以概述成以下几步:

1). 清理当前运行中的进程

2). 选择下一个投入运行的进程

3). 设置新进程的运行环境www.51kaifa.com

4). 执行进程上下文切换

5). 后期整理

5 结束语

的进程调度有其独有的特征,比如为了将三种协调一致同时不增加程序复杂度,为每一个进程设置相应的,并设置实时进程的优先级远高于非实时进程,使得在调度过程中不必去区分实时进程和非实时进程,从而获得最佳响应时间。同时,操作系统采用底半部分处理策略,将中断处理服务程序分割成两部分,提高了响应时间。另外,被暂时挂起的中断处理程序及任务队列,都要放在schedule( )中去处理,并优于其它进程调度,形成了uClinux独具特色的调度风格。

参考文献:

[1] Claudia Salzberg Rodriguez,Gordon Fischer,Steven Smolski.The Linux Kernel Primer[M].北京:机械工业出版社,2006www.51kaifa.com

[2] 邹治锋,张曦煌.Linux 2.6进程调度[J].微计算机信息.2006,1-2:77-79[3] uClinux官方网站源码下载. http://www.uclinux.org/pub/uClinux/dist/.2007


上一页 1 2 3 下一页

关键词:uClinux调度策略进程调度器

评论


相关推荐

技术专区

关闭