Hi, I am directing this question to both, the Karlsruhe and the Dresden, L4 mailing list, because I know both are working on new L4 specifications.
(Background:) I am working with L4 in Dresden on real-time systems, which become fairly complex lately. One of the questions, which began to bother me more and more, is: What is the use of finite IPC timeouts?
Ideally sending an IPC should be immediate (zero timeout) or should be performed eventually (infinite timeout). The only (useful) application of finite timeouts, I have seen so far, is the combination of multiple tasks in a single threaded server. That is waiting for IPC and for a regularly appearing timer event. (This sometimes implied adjusting the IPC timeout by the time used between the IPC waits.) Otherwise the use of finite timeouts is rather inconvenient, since the time used for the timeout depends on the whole surrounding system (software and hardware) and is thus impractical.
I'm personally convinced that you do not need finite IPC timeouts. A single bit differentiating zero and infinte timeouts should be sufficient. To imitate the concurrent waiting for an IPC or timer event one could set up a timer with the kernel and inculde the "timer-source" into the receive scope of the wait IPC. Timer events can be dropped if the receiver is not ready. This would also simplify the tasks using IPC timeouts as timer event source.
Coming back to my questions: What is the use of finite timeouts?
Or maybe the question should be: Would it simplify kernel (and user land) design if seperating the concepts of finite timeouts and IPC?
If you have reasons to include finite timeouts into future versions of the L4 Specification, please convince me.
Thanks, Ron.