about the L4Linux scheduler

Adam Lackorzynski adam at os.inf.tu-dresden.de
Wed Oct 17 22:35:58 CEST 2007


On Tue Oct 16, 2007 at 20:53:51 +0900, Lin wrote:
> 
> > > (1) When a L4 thread which is runnig as a Linux task is scheduled by
> > >     L4, is the Linux task ("task_struct" instance) corresponds to the
> > >     L4 thread scheduled as "l4lx.cpu0" by Linux scheduler ?
> > >     (Of course, "l4lx.cpu0" is not scheduled by L4 at this time.)
> > >
> > > For example, there are two user processes A and B in Linux server now.
> > >
> > > There are two threads (tasks) corresponds to A and B in L4, and there
> > > are two "task_struct" instances (both of them only execute the loop of
> > > "l4x_user_dispatcher") in Linux system.
> > >
> > > When the L4 thread of A is running (scheduled by Fiasco), the context
> > > of "l4lx.cpu0" is "task_struct" of A.
> > >
> > > If Fiasco switches the running thread from A to B, the context of
> > > "l4lx.cpu0" is changed to "task_struct" of B after ? (or no change ?)
> > >
> > > In other words, are the active L4 thread of Linux process and the L4
> > > thread the context of "l4lx.cpu0" corresponds to always the same ?
> >
> > Fiasco can never switch from A to B directly as both are never ready at
> > the same time. The switch order is always A -> Linux-server -> B.
> > Besides that the active context of the Linux server always corresponds
> > to the L4 thread currently active, as you already stated.
> 
> I have been able to confirm this mechanism for your help.
> Thanks a lot !
> 
> I attached my image of context switches in L4Linux system (correct ?).
> 
> 
> When I execute two programs which does not cause any system call or
> exception (except at start and end of program), they seems to switch
> together at almost constant intervals.

Switch together? They are scheduled in a way the Linux scheduler
decides.

> (Actually, other programs such as init, watchdog, pdflush also run at
> times.)
> 
> What is the trigger of this context switch ?
>
> In other words, what is the [?] in (2) in my attachement ?
> 
> Is it a IPC message ?
> If so, what is the kind of this IPC ?
> And, what is the cause of it ?

Interrupts wake up the Linux server (e.g. the timer interrupt) which
then stops the running user process (if any).

> 
> 
> 
> Regards,
> Lin

> THE CONTEXT SWITCH MECHANISM IN L4LINUX (Lin's expectation...)
> 
> +----------------------------------------------+
> | * : L4 thread scheduled by Fiasco scheduler  |
> | # : task_struct scheduled by Linux scheduler |
> +----------------------------------------------+
> 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> (1) Starting state
>  - L4 thread "A" is active.
>  - The context of Linux server is the task_struct corresponds to "A".
>  - L4 thread "B" is waiting IPC from Linux server.
> 
> +-------------------+
> | Linux server      |
> |+-----------------+|
> || task_struct(A)# ||
> |+-----------------+|
> |+-----------------+|
> || task_struct(B)  ||
> |+-----------------+|
> |         :         | +-----------------+ +-----------------+
> |         :         | |  L4 thread (A)* | |  L4 thread (B)  |
> +-------------------+ +-----------------+ +-----------------+
>     (Waiting IPC)          (Running)         (Waiting IPC)
> 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> (2) Switch to Linux server
>  - Linux server is scheduled by Fiasco scheduler (how to ?).
>  - "A" and "B" are waiting IPC from Linux server.
> 
> +-------------------+
> | Linux server *    |
> |+-----------------+|
> || task_struct(A)# <-----------+
> |+-----------------+|          | [?]
> |+-----------------+|          |
> || task_struct(B)  ||          |
> |+-----------------+|          |
> |         :         | +-----------------+ +-----------------+
> |         :         | |  L4 thread (A)  | |  L4 thread (B)  |
> +-------------------+ +-----------------+ +-----------------+
>       (Running)          (Waiting IPC)       (Waiting IPC)
> 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> (3) Linux server internal context switch
>  - schedule() is called in Linux server, and then task_struct of "B"
>    becomes the context of it.
> 
> +-------------------+
> | Linux server *    |
> |+-----------------+|
> || task_struct(A)  ||
> |+--------l--------+|
> |+--------V--------+|
> || task_struct(B)# ||
> |+-----------------+|
> |         :         | +-----------------+ +-----------------+
> |         :         | |  L4 thread (A)  | |  L4 thread (B)  |
> +-------------------+ +-----------------+ +-----------------+
>       (Running)          (Waiting IPC)       (Waiting IPC)

Yes.

> 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> (4) Switch to "B"
>  - Linux server replies IPC to "B" and wait again.
>  - "B" is only ready, so it is scheduled.
Yes.
> 
> +-------------------+
> | Linux server      |
> |+-----------------+|
> || task_struct(A)  ||
> |+-----------------+|
> |+-----------------+|        [IPC reply ?]
> || task_struct(B)# |-------------------------------+
> |+-----------------+|                              V
> |         :         | +-----------------+ +-----------------+
> |         :         | |  L4 thread (A)  | |  L4 thread (B)  |
> +-------------------+ +-----------------+ +-----------------+
>     (Waiting IPC)        (Waiting IPC)         (Running)

Good pictures!


Adam
-- 
Adam                 adam at os.inf.tu-dresden.de
  Lackorzynski         http://os.inf.tu-dresden.de/~adam/




More information about the l4-hackers mailing list