The figure shows a generalized E1 architecture. E1 consists of a microkernel and a set of distributed objects acting at the user level. The microkernel supports a minimal set of primitives that are necessary for operating system construction, such as: address spaces, threads, IPC and interrupts dispatching. All operating system and application functionality is implemented by objects.
Generalized E1 architecture
Microkernel-based design has a number of advantages. First, it is potentially more reliable, than conventional monolithic architecture, as it allows to move the major part of operating system functionality beyond the privileged kernel. Second, microkernel implements a flexible set of primitives, providing high level of hardware abstraction, while imposing little or no limitations on operating system architecture. Therefore, building operating system on top of existing microkernel is significantly easier, than developing from scratch. Besides, since operating system services run at user level, rather than inside the kernel, it is possible to replace or update certain services at run-time, or even start several versions of a service simultaneously. At last, third, some of the existing microkernels achieve an IPC performance an order of magnitude over monolithic kernels . Among these are microkernels of L4 family [31, 14, 39, 25]. For object-oriented operating systems, like E1, it is extremely important to minimize the latency of control transfer between address spaces; therefore, L4 has been selected as the microkernel of E1.
The E1 system components can be divided into three groups, represented with grey bars in the following figure:
- Objects, implementing the E1 execution model and memory management.
- Component model support.
- Replication support ("Group RPC" in figure).