Unifying the User and Kernel Environments

Vendors of commercial operating systems today invest resources in two very different environments—one for userlevel (application or server) programming and one for kernel-level (device driver or subsystem) programming. The kernel environment is typically more restrictive, with completely different interfaces and programming conventions. Based on our experience developing and deploying an operating system for an interactive TV system, we believe that it is desirable to unify the user and kernel environments. We structured our operating system to provide common programming and run-time environments for user-level code and kernel-level code. For example, modules loaded into the kernel did not have any restrictions on their use of shared libraries or stack space. We found that unifying the user and kernel environments with common interfaces and run-time requirements, common documentation, and a common debugger produced significant software-engineering benefits. In addition, we could transparently collocate trusted server code in the kernel to reduce memory usage and improve performance.

[1]  Francois Armand Give a Process to your Drivers , 1991 .

[2]  Elliott I. Organick,et al.  The multics system: an examination of its structure , 1972 .

[3]  Dirk Grunwald,et al.  Whole-program optimization for time and space efficient threads , 1996, ASPLOS VII.

[4]  V. Rich Personal communication , 1989, Nature.

[5]  David L. Black,et al.  Machine-independent virtual memory management for paged uniprocessor and multiprocessor architectures , 1987, ASPLOS 1987.

[6]  Rich Draves,et al.  The Rialto Virtual Memory System , 1997 .

[7]  David L. Black,et al.  Machine-independent virtual memory management for paged uniprocessor and multiprocessor architectures , 1987, IEEE Trans. Computers.

[8]  Larry L. Peterson,et al.  Fbufs: a high-bandwidth cross-domain transfer facility , 1994, SOSP '93.

[9]  F. J. Corbató,et al.  Multics: the first seven years , 1972, AFIPS '72 (Spring).

[10]  Dawson R. Engler,et al.  Exokernel: an operating system architecture for application-level resource management , 1995, SOSP.

[11]  Art Baker The Windows NT Device Driver Book: A Guide for Programmers , 1996 .

[12]  A. Retrospective,et al.  The UNIX Time-sharing System , 1977 .

[13]  Kamran Husain,et al.  Linux unleashed , 1995 .

[14]  Gerry Kane,et al.  MIPS RISC Architecture , 1987 .

[15]  Michael B. Jones,et al.  The Tiger Video Fileserver , 1996 .

[16]  George Eckel Inside Windows NT , 1993 .

[17]  Brian N. Bershad,et al.  Using continuations to implement thread management and communication in operating systems , 1991, SOSP '91.

[18]  K. Thompson,et al.  The UNIX time-sharing system , 1978 .

[19]  Mahadev Satyanarayanan,et al.  Efficient User-Level File Cache Management on the Sun Vnode Interface , 1990, USENIX Summer.

[20]  Helen Custer,et al.  Inside Windows NT , 1992 .

[21]  G. G. Stokes "J." , 1890, The New Yale Book of Quotations.

[22]  Mike Hibler,et al.  In-Kernel Servers on Mach 3.0: Implementation and Performance , 1993, USENIX MACH Symposium.

[23]  Michael B. Jones,et al.  An overview of the Rialto real-time architecture , 1996, EW 7.

[24]  Michael Tucker Programming the Motorola 88000 , 1991 .

[25]  Jerry Huck,et al.  Architectural support for translation table management in large address space machines , 1993, ISCA '93.

[26]  M. Frans Kaashoek,et al.  Software prefetching and caching for translation lookaside buffers , 1994, OSDI '94.

[27]  Michael B. Jones Proceedings of the fifteenth ACM symposium on Operating systems principles , 1995, SOSP 1995.

[28]  Brian N. Bershad,et al.  Extensibility safety and performance in the SPIN operating system , 1995, SOSP.