most of the benefits (security, modularity, simplicity) of a microkernel can be achieved by other means without making the performance tradeoffs. the degree to which a microkernel achieves those things itself is questionable: once you add the performance hacks much of the original benefits are gone.
i've found spin (extensible kernel) and exokernel to be more interesting conceptually than microkernels [1]. i think this is mostly because of how they approach the application with respect to the end-to-end argument.
spin takes the viewpoint that application specific code should downloadable into the kernel to provide mechanisms which more closely match the needs of an application [2]. exokernel takes the opposite approach and just provides hooks for hardware resource manipulation. the application (perhaps another os like UNIX) can then control many facilities normally associated with the os. everything else is done in userspace (avoiding context switch overhead) and system services are provided through user space libraries[3]. (it also has facilities for downloading code into kernel space as well, which kind of deviates form the spirit of the system, but is good for things that want to run at interrupt level).
other amusing things are that spin used modula3, and exokernel has neat runtime code generation (create optimal code for the specific case you need).
[1]. i've seen both of these referred to as microkernels, but i don't know that they qualify: they don't use out-of-address-space system servers to provide services, they therefore don't rely as heavily on IPC, and they differ on their choice of the tradeoff they make between running code in kernel space and in userspace.
[2]. that sounds scary from a security standpoint, but it's basically like loadable kernel modules that most os's have. in fact, it probably has a better security system than do current examples (like linux), in that a trusted compiler must sign the module after compiling locally and determining the code doesn't do anything nasty.
[3]. this is fuzzy for me, i'd like to see how this would actually be done.
here are some papers that might be fun to read on the subject:
- J. Liedtke, "On Micro-Kernel Construction", Proceedings of the 15th
ACM Symposium on Operating System Principles, ACM, December 1995.
- Brian Bershad et al., "Extensibility, Safety and Performance
in the SPIN Operating System", Proceedings of the 15th ACM
Symposium on Operating System Principles, December 1995.
- Dawson R. Engler, Frans Kaashoek and James O'Toole, "Exokernel: An
Operating System Architecture for Application-Level Resource
Management", Proceedings of the 15th ACM Symposium on Operating
System Principles, ACM, December 1995.
it might be fun to play around with these ideas at some point, since most of the code is out there to make this not too time consuming of a task (for example vmware, mol, flux oskit, bsd's, linux, etc). one more fun thing to do. hooray!
