messages forwarding for microkernels
Posted: Thu Jan 20, 2005 10:48 am
Heya everyone.
I'm now done with my "redesign" of Clicker's message passing architecture, which is now based on ports abstraction (like much other microkernels) rather than on purely asynchronous events and handler functions (which sucked big time)
You can see it at
http://clicker.sourceforge.net/wiclicke ... tsProposal
I'd be interrested by your feedbacks, esp. from those who have fought with message passing in their own OS (BI?)
The main design lines are:
- every message is addressed to a single port and each port is owned by a single thread.
- each thread has its own mbox to store one pending message, but for asynchronous message, the emitter has the option to get a temporary mbox so that its own mbox remains free for other purpose
- a thread may listen on several ports at the same time and being notified as soon as one of those ports receives a message.
- a thread may send a message on P1 and tell the system it wishes a reply on another port P2 (to implement RPC-like things)
Only short fix-sized messages are considered here so far. Larger messages can easily be constructed by passing a short message with "memory reference" that allows the receiver to map emitter's frames.
I don't try to have zero-copy message passing atm.
I'm now done with my "redesign" of Clicker's message passing architecture, which is now based on ports abstraction (like much other microkernels) rather than on purely asynchronous events and handler functions (which sucked big time)
You can see it at
http://clicker.sourceforge.net/wiclicke ... tsProposal
I'd be interrested by your feedbacks, esp. from those who have fought with message passing in their own OS (BI?)
The main design lines are:
- every message is addressed to a single port and each port is owned by a single thread.
- each thread has its own mbox to store one pending message, but for asynchronous message, the emitter has the option to get a temporary mbox so that its own mbox remains free for other purpose
- a thread may listen on several ports at the same time and being notified as soon as one of those ports receives a message.
- a thread may send a message on P1 and tell the system it wishes a reply on another port P2 (to implement RPC-like things)
Only short fix-sized messages are considered here so far. Larger messages can easily be constructed by passing a short message with "memory reference" that allows the receiver to map emitter's frames.
I don't try to have zero-copy message passing atm.