The V Distributed System David R. Cheriton One-line summary: Use a modular micro-kernel to make IPC fast and the OS simple and to cluster your workstations. Overview/Main Points * Kernel is distributed, in that separate copies of the kernel executing on each network node cooperate to provide a single system abstraction of processes and address spaces (using a base set of communication primitives). The computing power of a mainframe is provided, while the idle of single-user machines is reduced. * Small kernel approach is good for implementing the basic protocols and services in a modular way. In V, system-provided services are provided in the run-time libraries. * High performance communication is the most important factor for distributed systems. They worked to optimize the common cases and structure the kernel for optimal communication (fixed-sized messages, VMTP protocol for request-response, initialize processes with template header, ...). Optimizations helped to reduce the cost of multi-cast, which was important for the handling of shared state and group communication. * Protocols, not the software, define the system. Especially important is the ability to support groups in the protocol (for distributed systems, migration, and replication). * Kernel provides time, process, memory, communication, and device management in separate kernel modules, each of which is linked to the IPC facilities. All servers are accessed similarly whether they are local or remote. Modularity allows for fine-tuning of individual components. * Kernel implements only the amount of caching and consistency for memory and files and device management required to protect its integrity. Scheduling is primarily performed outside the kernel by a process that manipulates priorities. * I/O system is designed to impose a standard structure on messages between devices. Instead of open files, they use block-oriented, stateful UIO objects for everything (displays, devices, printers, internet protocols, pipes, etc.). * Object identifiers are used to identify objects such as files, address spaces, and directories in a host-independent manner. Clients find objects using multi-cast and caching. A global name server keeps track of services as well, in order to differentiate non-existence from failure. Conclusions The modular kernel does look like a good way to try out and test new components/services, and to avoid the loading of unnecessary modules. However, all of the modules that are given as examples are necessary and would probably be loaded anyway, so I would think that a monolithic modular kernel would offer better performance over their basic system. Flaws Scalability? Performance? (these guys are really bad at this...) What permissions are needed to add a new kernel server? It is claimed that process termination is simplified because resources are managed at the process level by various servers using garbage collection. This would seem to take more time... (servers poll clients to see whether they still exist). ------------------------------------------------------------------------ Back to index