From: James Welle (jwelle_at_Exchange.Microsoft.com)
Date: Tue Jan 06 2004 - 19:05:44 PST
In this paper, Dijkstra describes the experience of developing
an operating system at Technological University and gives an overview of
the architecture and design of the system. In the Appendix of the paper,
he introduced semaphores as the method for synchronization.
The system itself is divided into layers, each of which has a
specific purpose related to controlling hardware or the user's
interaction with the system. Layer 0 is responsible for controlling
processor allocation. Layer 1 is the segment controller which handles
the drum and core memory. Layers 2 and 3 are concerned with user input
and output.
The layered approach allows the implementation of lower layers
to be ignored at those above. Memory is referenced by a segment address
which is independent of the physical address where the memory resides.
This seems like an early precursor to virtual memory. Above Layer 0, the
number of processers available is irrellevant. This paper reminded me of
essays recently written for the web by Joel Spolsky and several others
about layers of abstraction. The theme of those essays is that layers of
abstraction are good, but that there are often times where a user of the
system really needs to understand what is happenning at all levels.
Dijkstra may be hinting at this same issue when he mentions the "page
flutter" that would occur between the segement controller and higher
layers.
Explicit mutual synchronization is used to control the execution
of the sequential processes running on the machine. The method for this
synchronization is explained in the Appendix. I was surprised to see
semaphores introduced there with no references. I was not aware Dijkstra
invented semaphores, but he is credited with inventing them on the web.
Since there are no references in the paper, it is difficult to tell
whether or not this is the original paper where semaphores were
introduced.
I was also surprised to see such a focus on testing the system
in this paper. In the 1960s, I would have expected testing to have been
more of an afterthought but Dijkstra mentions running unit tests on each
layer and also attempting to design exhaustive test cases for all the
possible states of the machine.
Dijstra's notion of a "homing position" and his description of
the cyclic nature of the sequential processes was very intuitive, but it
would have been nice to see more formal proofs of the concepts.
jw
This archive was generated by hypermail 2.1.6 : Tue Jan 06 2004 - 19:06:44 PST