Exokernel: An Operating System Architecture for Application-Level Resource Management, SOSP 1995
Suppose you are running two applications A and B on an exokernel. A first successfully allocates a physical page P. B then tries to allocate the same page P. How does the exokernel make sure the second allocation from B will fail? What if B tries to trick the kernel into deallocating P (which it doesn’t own)? Describe what kind of data structures the exokernel needs for bookkeeping.
Suppose you are developing two mutually distrustful networked applications on an exokernel; there is only one network interface card (NIC). When the NIC receives a packet, how does the exokernel decide which application to deliver the packet to (i.e., demultiplexing)? In other words, can a malicious application hijack packets destined to the other application? What are the proposed & implemented solutions, as well as their pros and cons?
As a comparison: consider two applications on Linux,
both invoking and waiting on the recv(sockfd, ...)
syscall with different sockets.
Think how the Linux kernel associates network packets with sockets and applications,
and whether an exokernel can do the same.
On a side note: if you have done the JOS labs in your ugrad OS class, there is a related challenge problem in lab 6 (search for “multiple network servers”). This is just FYI; you don’t need to do the lab to understand the paper.
Based on the performance evaluation of the paper, do you think applications can benefit from the exokernel architecture? If so, describe specifically which parts of the evaluation you find useful and convincing; otherwise, describe additional benchmarks you would like to see.
Provide a list of questions you would like to discuss in class. Feel free to provide any comments on the paper and related topics (e.g., which parts you like and which parts you find confusing).