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