C++
Peter Dufault
dufault at hda.com
Fri Jul 18 15:51:58 PDT 2003
On Friday, Jul 18, 2003, at 13:34 US/Eastern, Matthew Dillon wrote:
:As I understand it mp_SendMsg is a function pointer in the message
port
:structure. It gets filled in when the port is created.
:
Precisely. mp_SendMsg() is controlled by the target port and thus
is
responsible for any frontend optimizations and conversions,
including
chaining. mp_SendMsg is the 'agent' for the target port.
This leads to all sorts of cool possibilities. Inserting a shim
becomes very easy, you would provide your own port that hides the
real one and then you would do your own frontend processing. For
example:
struct myport {
MsgPort port;
MsgPort *realport;
}t;
...initialization of port...
myport->port.mp_SendMsg = myfunc;
myport->realport = originalport;
And then:
int
myfunc(struct myport *port, Msg *msg)
{
if (message is something we want to play with) {
...
}
/* else fall through to original port */
return(port->realport->mp_SendMsg(port->realport, msg));
}
The port agent would be responsible for all sorts of things. For
example, in the kernel on a port representing entry into the TCP
stack
the port agent would be responsible for partitioning the work
amoungst
available TCP stack worker threads and forwarding the message
Did you consider using a subset of C++ for the kernel? I'm asking
because of this example and because I personally would have had to
consider it because of the hand-built repetitive infrastructure of pure
C.
I can see many drawbacks (enforcing a subset, issues associated with
many fingers in the pie, etc) and I want to know what you thought about
it.
More information about the Kernel
mailing list