************************************************************************ UNIX as an application program ************************************************************************ This paper describes Mach operating system. Mach is a micro-kernel. This means that the kernel implements only the very basic services needed by user applications, and all higher-level operating system services, such as memory management, file systems and pagers are implemented above the micro-kernel in application servers. The motivating factors behind micro-kernels are flexibility, extensibility and portability. Mach, with a UNIX server running on top is structured as follows: the Mach kernel provides IPC services, memory object creation, scheduling, trap redirection and low-level device support. All other functions usually associated with the operating system are provided by a user-level process - a Unix server. The applications running on Mach have to use a Transparent System Call Emulation library. This library runs in the address space of the application and redirects all system calls made to the operating system to the Unix server via Mach IPC facility. The emulation library code is shared between parent and children processes. Requests for service come to the Unix server in the form of Mach messages that request a particular Unix operation. A thread is dispatched to handle each request. The implementation described in the paper uses a very interesting optimization for handling I/O. After doing many tests, the authors realized that copying data on I/O was prohibitively expensive. They decided that they should map all files directly into the user address space, which is managed by the Transparent Emulation library. This enabled most all file system calls to be executed right in the library without ever contacting the server. The experimental section of this paper is pretty weak. Most tests compare the previous release of Mach with Mach running with Unix server. There are almost no comparisons with other top-of-the-line operating systems. There is one test, compile test, that compares performance of Mach with SunOS 4.0, however the results are not explained at all. Most of the tests presented in the paper involve file system operations - and this is the piece of the system that has been heavily optimized. It is not fair, therefore, to test only the most optimized part of the system. It is clear that the reader would want to know how other types of applications perform. For example, the table comparing process management costs under Mach and SunOS 4.0 shows that getpid and fork/exit operations are more expensive under Machs. I felt that the authors did not study the advantages and disadvantages of micro-kernel thoroughly: they did not show when one can gain and lose in performance, and they did not provide motivation for using micro-kernel when there is performance penalty involved.