Path: utzoo!utgpu!news-server.csri.toronto.edu!bonnie.concordia.ca!uunet!tut.cis.ohio-state.edu!sei!fs7.ece.cmu.edu!o.gp.cs.cmu.edu!andrew.cmu.edu!+ From: Rick.Rashid@cs.cmu.edu Newsgroups: comp.os.mach Subject: Re: Bytes in Mach 3.0? (mine is smaller than yours, revisited) Message-ID: Date: 20 Feb 91 16:23:32 GMT References: <62753@bbn.BBN.COM| <1991Feb15.214231.21348@watmath.waterloo.edu| <1991Feb16.002946.5711@zoo.toronto.edu|, <1991Feb19.175717.2996@newsserv.informatik.tu-muenchen.de> Organization: Carnegie Mellon, Pittsburgh, PA Lines: 61 In-Reply-To: <1991Feb19.175717.2996@newsserv.informatik.tu-muenchen.de> Good joke. The fact of the matter is that, in many ways, Mach provides substantially more functionality that a 4.3BSD or similar kernel provides. Specifically: 1) VM - Mach's VM is substantially more sophisticated than 4.3BSD. It provides for large, sparse address spaces, copy-on-write, a well-defined layering of machine independent and dependent memory mapping code, etc. Mach also provides for the allocation of memory objects by user programs and external paging. 2) IPC - Mach provides a secure, extensible IPC facility with a variety of features designed to simplify or improve the implementation of multithreaded servers. Moreover, the speed of IPC is critical and much complexity of code in the IPC parts of Mach is due to a need for fast IPC operations. 3) Parallelism - Mach provides multiple threads per address space. Mach provides support for multiprocessors and multiprocessor scheduling including the dynamic allocate of processors to threads. It also supports multiple scheduling classes and provides the mechanism necessary for efficient implementation of multithreaded programs. Mach (and systems like it) are best described as "system software kernels". They provide key software abstractions of hardware functionality (tasks, threads, ports, messages, memory objects) which allow traditional system services such as file systems, data bases, window managers, etc. to be efficiently implemented outside the kernel. In fact, Mach is defined in such a way that even its own functionality can be implemented outside the kernel. Memory objects, ports, and even tasks and threads can be effectively implemented or simulated by user programs in such a way that no other Mach program can distinguish these "external" objects from the internal ones. The kernel itself is a Mach task with multiple Mach threads of control operating within it and it makes use many of the same IPC and VM calls used by user programs. I think the key point here is not "is mine bigger or smaller than yours", but rather, is my kernel defined and implemented in such a way as to allow system applications to be efficiently implemented above it. If it is, then you can use that kernel as the basis for many new operating systems and system applications without having to resort to placing ever larger amounts of code in supervisor state.