Re: Adding a new scheduling algorithm to Fiasco.OC

Valentin Hauner <[email protected]>
Newsgroups gmane.comp.micro-kernel.l4.devel
Message-ID <[email protected]>
Hi Adam,

thank you, that makes things clearer to me, especially the information
of the timer for managing preemption.

In a previous mail, you stated that a thread has a Sched_context object
embedded that stores scheduling-related information. However, I cannot
find a 1:1 relation from a Thread to a Sched_context object.
I've found various calls of the sched_context() method in 'thread.cpp',
which is defined in 'context.cpp'. Furthermore, there are several calls
of the current() method in 'thread.cpp' (returning the current context),
which is defined in 'context_base.cpp'.

So my main question is: What is the exact relation of a Thread object to
all these classes?

I assume that a Context object is cpu-specific, i.e. each Context object
points to its home cpu. Is that right? This would make sense since there
is a home_cpu attribute and a schedule() method in that class that
handles the scheduling on a certain cpu.

But what's the matter with Sched_context?
It seems to me that there is no 1:1 relation from a Thread to a
Sched_context since the sched_context() method called in 'thread.cpp' is
defined in 'context.cpp'. So is a Sched_context cpu-specific, too? This
would not make sense to me as a Sched_context object stores
thread-specific information such as the priority and the remaining
quantum of a thread.

Thanks in advance!

Best regards,
Valentin

On 07/02/2014 12:30 AM, Adam Lackorzynski wrote:
> On Mon Jun 30, 2014 at 12:08:00 +0200, Valentin Hauner wrote:
>   
>> I've added a new config directive for 'sched_edf' to the Modules.* files
>> in 'kernel/fiasco/src', that is:
>> PREPROCESS_PARTS-$(CONFIG_SCHED_EDF) += sched_edf
>> This enables the user to compile the kernel with EDF scheduling when
>> setting this directive, right?
>>     
> This adds the preprocess tag 'sched_edf' which are used in the
> expressions for the INTERFACE and IMPLEMENTATION blocks. With that you
> can chose whether a block of code is included in compilation or not.
>
>   
>> I want to implement the preemptive EDF algorithm, i.e. any running task
>> must be preempted if a new task with a shorter deadline arrives.
>> dominates() from sched_context-edf.cpp and next_to_run() from
>> ready_queue_edf.cpp are designed to choose the one with the shortest
>> deadline, but how can I tell Fiasco to act preemptive?
>>     
> So, on one CPU only one thread can be running at a time. Others might be
> ready to execute but not running. Regarding preemption, the timer
> interrupt drives scheduling (see Thread::handle_timer_interrupt) which
> calls schedule() whenever there's something to do, i.e. a timeout has
> expired. Of course schedule() might also be called for other reasons,
> for example when threads change their ready state. In the scheduler
> implementation you'll see whenever some new thread arrives or one
> leaves, so I think the preemption as you need it is already there.
>
>
>
> Adam
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.