Lecture: exokernel II

Application Performance and Flexibility on Exokernel Systems, SOSP 1997

Question

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?

Question

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?

Question

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.

Question

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.