Thanks, Henrik.

I knew where the HZ value defined, my platform is ARM, so it is 100.
I just want to know where the code for formula:
base time quantum = (140-static priority)*20 if static priority < 120 

                                  (140-static priority)*20  if static priority 
>=120

or it is deleted at New kernel version, the kernel code I used is
2.6.27.

>>Actually, most likely, the IRQ will set TIF_NEED_RESCHED.
I checked the code only timer IRQ will set TIF_NEED_RESCHED,
are there any common irqs will cause process be preempted?
I can't find at irq_handler, and irq_exit().


Best Regards,
Peter Chen


On Sun, 2009-03-22 at 12:33 +0100, Henrik Austad wrote: 

> On Sunday 22. March 2009 11.44.13 Peter Chen wrote:
> > Dear all,
> >
> > Recently, I have read the book <<Understanding the Linux Kernel>>
> >
> > And I have two points not clearly about scheduler, hope someone here can
> > help me. Thank you in advance.
> 
> Note: UTLK describes the O(1) scheduler. From 2.6.23 the CFS has replaced the 
> O(1) and how priorities are represented and how next tasks are found has 
> changed. The basics are the same though. If another task has higher priority
> 
> See http://lxr.linux.no/linux+v2.6.28.8/Documentation/scheduler/sched-design-
> CFS.txt for an intro to CFS.
> 
> >
> > 1. At book, there are below formula:
> > base time quantum = (140-static priority)*20  if static priority < 120
> >                     (140-static priority)*20  if static priority >=120
> >
> > it is for i386/686, and this value should be HZ related. But I can't
> > find related code at sched.c, can anyone point it to me?
> 
> HZ is defined when you configure the kernel. See a .config. It can be 100, 
> 250, 
> 300 and 1000.
> 
> 
> > 2. For the preemptive kernel, I know below situation may will happen
> > preempt implicitly(if i am error, please point out), are there any
> > situation will happen preempt?
> 
> Basially the kernel will preempt curr if there are one or more other ready 
> tasks with higher priority. This can be done either implicitly as you say, or 
> explicitly (by the function calling schedule() itself).
> 
> > 1. The situation for each timer interrupt occurs:
> >     i: If process time quantum expires, it will be replaced
> >         ii: If process A(who owns CPU)'s priority is lower than process
> > B who is also at running queue. The process A will be replaced for
> > process B.
> > 2. At IRQ handler, it wakes up process B. then, after IRQ exiting, the
> > higher priority process B will preempt process A who is interrupted by
> > above IRQ.
> 
> Actually, most likely, the IRQ will set TIF_NEED_RESCHED.
> 
> 
> Whenever the kernel returns from kernel-mode to user-mode, it will test curr 
> for TIF_NEED_RESCHED (the need reschedule flag). If this is set, it will 
> invoke 
> schedule(), and the kernel will change curr with a new task.
> 
> henrik

Reply via email to