On Fri, 20 Jan 2006 23:18:28 +1100 (EST) Gernot Heiser (GH) wrote:
GH> Note that the Inside L4 document refers to the old MIPS kernel, which GH> is one implementation of (and extended) V2 API. GH> GH> It also, like many other implementations, does time-slice donation GH> incorrectly (i.e. blindly). Time-slice donation should respect GH> priorities. I believe that this is fixed in NICTA::Pistachio-embedded, GH> but the code is the ultimate reference ;-)
Also note that time-slice donation on L4 typically does not extend across preemptions. A client that performs an RPC to a server donates its time quantum and priority to the server - this is achieved by switching only the execution context during the IPC and leaving the scheduling parameters of the client "in place". However, if the RPC is preempted by a higher- priority thread and is later resumed, the server will continue executing using its own time and priority instead of using the client's time and priority.
To my knowledge no existing L4 implementation correctly resumes the original donation after a preemption. A solution has been described in [1], but we at TUD have not implemented it yet.
- Udo
[1] http://doi.ieeecomputersociety.org/10.1109/ECRTS.2005.16