lab 18 - mux
Much of my recent reading has led me back to
various implementations of a multiplexer. This is
an important and powerful abstraction and I want
to understand it better. I know very little about
it now. I'd like to implement one in limbo, for
example to multiplex the link between sam and
samterm as suggested in the protium paper. Hence
my interest in sam in the earlier lab.
Here is a some of the things I've been reading
recently about multiplexers. See if you see a
pattern. J. Hickey's Master thesis at MIT
implements mux for plan9 which puts a 9p
multiplexer into user space and provides
asynchonous IO for user threads.
Search 9fans for multiplexing where there is some
interesting discussion on the use of multiplexers
For example, an idea by rog and russ's response
And futher proposals by russ proposal for mux,
local 9p multiplexing and remote 9p multiplexing.
See also an implementation of a generic rpc
multiplexer, libmux, in plan9port
The various window systems by Rob Pike, mux, 8Â½,
and rio are multiplexers for their environment,
the screen, mouse and keyboard.
The spree game engine is a multiplexer at the
application leve for the object hierarchy managed
by the server.
And in inferno /emu/port/devmnt.c is the
multiplexer for 9p.
In the original exokernel paper the authors argued
the principal function of an operating system is
to multiplex access to hardware, and should do
nothing else. Multiplexers are vital to providing
9p service and in protium the authors argue they
are a vital piece of infrastructure for
In summary, this is something I need to learn more
about. I'll proceed in these labs with studying
the code to libmux and devmnt and try to implement
the mux for the sam session.