There is a broad (and in fact, multidimensional) spectrum of distributed systems. To explore this spectrum, consider asking the following questions:
* How many processors are in the system * Is memory shared between processors * How many processes are allowed per processor * How do processes communicate * Can processes move from processor to processor * Can resources move from place to place * What are the shared resourcesIn answering these questions, four large classes of systems emerge, isolated uniprocessors, the typical subject of introductory courses, plus multiprocessors, networks of systems, and distributed systems.
Some computer systems have multiple CPU's and multiple memories, but (under the constraints of some protection mechanism) any code running on any processor may access any location in memory. Some of these machines have a single ready list shared equally by all processors, while others assign processes to processors for any of a variety of reasons.
The Encore systems the University of Iowa is currently phasing out, and the Silicon Graphics Onyx system are example multiprocessors.
It is important to note that, at some level of abstraction, multiprocessor systems may be viewed as having a communications network. Typically, this network connects processors and memory, and it is typically possible to isolate transactions on this network that resemble messages. What qualifies a system for classification as a multiprocessor and not a distributed system of some kind is that the messages typically concern individual memory references.
Operating systems for multiprocessors frequently differ only slightly from systems for uniprocessors. The difference is that, where a uniprocessor had a single idle process on the ready list, multiprocessors must have enough idle processes to satisfy all processors, and the ready list must be shared. If a system is written with a uniform mechanism for entry and exit from critical sections, most of the changes required to move such a system to a multiprocessor are confined to this mechanism. This explains why UNIX has been successfully ported to a number of multiprocessors.
A network operating system is a conventional operating system which includes provisions for attaching it to a network. Most versions of UNIX in common use today are network operating systems, and there are networkable versions of both MS/DOS and the Macintosh OS.
Typical features that distinguish a network operating system from a stand-alone operating system include:
Remote Command Execution, for example, as provided by the UNIX rsh command. This allows a user to issue a command to be executed on a particular remote system.
Remote File Access, for example, as provided by the UNIX rcp command or by the more general ftp subsystem. These allow users to copy files from one system to another.
Remote Login, for example, as provided by the UNIX rcp command or by the more general telnet subsystem. These allow users of one system to open interactive sessions on a remote system.
At a lower level, network operating systems must provide user processes with access to communications protocols for communicating over the network with processes on remote machines. These provide the basis for the implementation of network-oriented commands such as those outlined above.
Network file systems are a special feature of some network operating systems. These allow multiple machines in a network to share one logical file system, even though the different machines may run otherwise unrelated operating systems. For example, the NFS protocols developed originally by Sun Microsystems provide this ability for UNIX systems, and there are versions of the Mac OS and MS/DOS which allow those machines to support these protocols.
A distributed operating system differs from a network of machines each supporting a network operating system in only one way: The machines supporting a distributed operating system are all running under a single operating system that spans the network. Thus, the print spooler might, at some instant, be running on one machine, while the file system is running on others, while other machines are running other parts of the system.
With network operating systems, each machine runs an entire operating system. With distributed operating systems, the entire system is itself distributed across the network. As a result, distributed operating systems typically make little distinction between remote execution of a command and local execution of that command. In theory, all commands may be executed anywhere; it is up to the system to execute commands where it is convenient.
Network operating systems are naturally compatable with inhomogenous networks, that is, networks containing many different kinds of machines. Thus, for example, the Internet connects many UNIX machines, but it also connects machines running DEC's VMS operating system, IBM PCs running MS/DOS, OS/2 and Windows NT, IBM Mainframes running IBM's VM operating system, and Apple Macintosh computers. This inhomogeneity is tolerated as long as each network operating systems involved supports some subset of the same protocols.
Distributed operating systems have typically been implemented on homogenous networks, where all machines support identical instruction sets. In fact, though, if there are any differences between machines, even, for example, differences in optional extensions such as floating point units, the system must distinguish between machines in exactly the same way it would have to if it supported machines with different instruction sets.
The most troublesome differences in a distributed system are those involving differences in data representation.