Application Performance and Flexibility on Exokernel Systems, SOSP 1997
Consider an application running on top of an exokernel
with its own libOS/libFS.
The application wants to append some data to a file /README
.
The libFS thus needs to allocate a new block from disk
and update the file’s inode (which contains a list of block numbers for the file content).
Remember that the exokernel doesn’t understand the layout of the file system.
How can the libFS convince the exokernel
that the new inode’s content is correct?
For instance,
it should include the newly allocated block,
it shouldn’t be able to “steal” another file’s block,
and it shouldn’t corrupt other parts of the inode.
Similarly,
suppose the application wants to read the content of /README
.
How can the libFS prove to the exokernel that it does own this file’s content?
What checks will the exokernel perform?
What crash-safety guarantees does an exokernel provide? To be more specific, after the machine crashes, is it possible for one libFS to contain disk blocks that belong to another libFS?
The Cheetah HTTP Server performs a set of optimizations. Do you think one can implement these optimizations in a server running on a conventional OS (e.g., Linux), or are they exokernel-specific? Feel free to discuss other types of applications in this context.
Provide a list of questions you would like to discuss in class. Feel free to share your thoughts on the exokernel architecture.
For instance, if you are interested in code downloading, check Chapter 6, “Reflections on Downloading Code” in Dawson Engler’s PhD thesis. It discusses several code downloading mechanisms and domain-specific languages described by the two papers: DPF (dynamic packet filters), ASH (application-specific handlers), wakeup predicates, and XN templates.