当前位置: 技术问答>linux和unix
菜鸟求教:linux 如何用时间片轮换进程,在进程间切换?
来源: 互联网 发布时间:2016-07-07
本文导语: 我看linux内核完全注释,里面我没看懂,是不是 do_timer() 里的 schedule() 处理的? 大致流程是: 进入时钟中断, 处理jiffies, do_timer() schedule() 就这样就行了。 期待权威的资料和详细的讲解! 我最大的疑惑就...
我看linux内核完全注释,里面我没看懂,是不是 do_timer() 里的 schedule() 处理的?
大致流程是:
进入时钟中断,
处理jiffies,
do_timer()
schedule()
就这样就行了。
期待权威的资料和详细的讲解!
我最大的疑惑就是在自己的程序里定时,能定准确吗?udelay或mdelay或sleep或usleep,这些函数是怎么和进程调度,轮换,协调工作的啊?
系统实现多任务就是靠时钟中断处理程序来调度吗?别无他法?(单个处理器,不说多个cpu)
请好心的老手,高手,不吝赐教!
大致流程是:
进入时钟中断,
处理jiffies,
do_timer()
schedule()
就这样就行了。
期待权威的资料和详细的讲解!
我最大的疑惑就是在自己的程序里定时,能定准确吗?udelay或mdelay或sleep或usleep,这些函数是怎么和进程调度,轮换,协调工作的啊?
系统实现多任务就是靠时钟中断处理程序来调度吗?别无他法?(单个处理器,不说多个cpu)
请好心的老手,高手,不吝赐教!
|
do_timer() ->update_process_times
if (p->pid)
{
if (--p->counter counter = 0;
p->need_resched = 1;
.......
先把时间配额counter的值减去一个单位,然后检查是否用完了时间配额。
当返回用户空间时,会检查need_resched的值,如果为1,就调用schedule
if (p->pid)
{
if (--p->counter counter = 0;
p->need_resched = 1;
.......
先把时间配额counter的值减去一个单位,然后检查是否用完了时间配额。
当返回用户空间时,会检查need_resched的值,如果为1,就调用schedule