by Nicholas Coleman

There are two fundamental differences between the philosophy of THE system
and the NUCLEUS system. The THE system employes several layers of abstraction
to describe processes, files, input and output while in the Nucleus system the
only level of abstraction is the process concept. The THE system relies
entirely on the use of semaphores for synchronization of shared memory while
the Nucleus system uses a message buffering model for inter-process
communication.

The primary difference between the two philosophies is in their respective
levels of abstraction. Dijkstra envisions a layered model of abstraction where
the process scheduler is at the lowest level followed by the memory management
(segment controller), the input device driver (message interpreter), the
peripheral device drivers (the logical communication units), and finally the
application layer. In contrast, Hansen has effectively only one layer of
abstraction: the process. While the system nucleus (much like a modern kernel)
provides the framework for a process to exist, a great deal of power -- such as
memory management, process creation, and message passing -- is given to the
processes. Indeed, what one would now think of as a "file" is referred to as
an "external process" in the Nucleus system. While Dijkstra has created an
operating system with many layers, Hansen has created many virtual operating
systems with only one real level of abstraction.

As Dijkstra is the inventor of the semaphore it is perhaps no surprise that his
system bases it's synchronization scheme entirely on this concept. He mentions
in his appendix that he uses them in two ways: mutex and private sempahores. In
this way he is able to avoid race conditions and conflicts over devices. He
claims that deadlock (or "the Deadly Embrace") is always avoided in this
system, though he does not explain how in this paper. Hansen, on the other
hand make a point of mentioning that Dijkstra's semaphores are not sufficient
to provide for an efficient and safe system. Instead, the Nucleus system
allows for inter-process communication using message buffering. He provides
send and wait (recieve) primitives and a common buffer pool. The main drawback
of this paradigm, according to Hansen, is that the buffer pool is one more
resource that needs to be managed.