Re: Linux kernel preemption (kernel 2.6 of course)

From: Robert Love
Date: Sat Nov 08 2003 - 19:21:56 EST


On Fri, 2003-11-07 at 20:27, Oleg OREL wrote:
> I was browsing linux kernel to undetsnand how kernel preemption does
> work. I was hacking around schedulee_tick and other functions called
> out of timer interrupt and was unable to found any call to schedule()
> or switch_to() to peempt currently running task, instead just mangling
> around current and inactive runqueues.

Linux rarely forces a reschedule, because interrupt handlers cannot
block. So we have the need_resched variable (in 2.6, a flag in
thread_info) to note if a reschedule is pending.

The scheduler is then invoked asap.

> That leads me to a thought that currently running task wont be
> preempted within time-tick, instead it might happends in the next call
> to preempt_schedule out of spin_lock for instance.

Yes, this is true. With kernel preemption enabled, if a task is
executing in the kernel, and an interrupt occurs that marks
need_resched, the reschedule will take place immediately on return from
interrupt UNLESS a lock is held. In which case the reschedule will
occur when the lock is released (specifically, when preempt_count hits
zero).

Without kernel preemption, the reschedule will not take place until the
executing task in the kernel blocks and a return to user-space occurs.

Robert Love


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/