Angel: Resource Unification in a 64-bit Microkernel
Kevin A. Murray, Tim Wilkinson, Tom Stiemerling, Paul H. J. Kelly · 1994
The appearance of 64-bit processors allows a new approach to microkernel design -- a single unified address space. This paper describes this kind of approach as adopted in Angel. From our experience with a message passing microkernel MESHIX, we discovered that a multi-address space, POSIX architecture is unsuitable for general parallel applications development. Angel was therefore designed to provide a more flexible environment. Central to these aims is a simplification of resources. This is achieved through the use of a single address space holding volatile and persistent data and all processes, and which absorbs communication to remove the distinction between local and remote machines. In addition, a simple user-level, first citizen, threaded process structure with software interrupts has been developed. The resulting kernel, written in C++, is compact and simple yet offers fully protected services and is more flexible than many of its contemporaries. A single address space provides some unique problems -- most importantly the need to provide POSIX compatibility. We have investigated this, and developed a modified compiler. This is capable of generating code from unmodified POSIX applications which may be forked to a new address but still executed correctly. This avoids compromising the single address space and only entails a small performance penalty (approximately 5%). A first generation microkernel is now complete and runs as an emulation on the Sparc. A native system will soon be available.