SIGOPS-2005: The Structure of the

SIGOPS-2005: The Structure of the "THE"-Multiprogramming

System 

https://dl.acm.org/doi/pdf/10.1145/363095.363143

Abstract

A multiprogramming system is described in which all activities are divided over a number of sequential processes. These sequential processes are placed at various hierarchical levels, in each of which one or more independent abstractions have been implemented. The hierarchical structure proved to be vital for the verification of the logical soundness of the design and the correctness of its implementation.

Intro

Having very limited resources (viz. a group of six people of, on the average, half-time availability) and wishing to contribute to the art of system design–including all the stages of conception, construction, and verification, we were faced with the problem of how to get the necessary experience.

  • (1) Select a project as advanced as you can conceive, as ambitious as you can justify, in the hope that routine work can be kept to a minimum; hold out against all pressure to incorporate such system expansions that would only result into a purely quantitative increase of the total amount of work to be done.
  • (2) Select a machine with sound basic characteristics (e.g. an interrupt system to fall in love with is certainly an inspiring feature); from then on try to keep the specific properties of the configuration for which you are preparing the system out of your considerations as long as possible.
  • (3) Be aware of the fact that experience does by no means automatically lead to wisdom and understanding; in other words, make a conscious effort to learn as much as possible from your previous experiences.

A Progress Report

We have made some minor mistakes of the usual type (such as paying too much attention to eliminating what was not the real bottleneck) and two major ones.

  • For too long a time we confined our attention to “perfect installation
  • We conceived and programmed the major part of the system without giving more than scanty thought to the problem of debugging it.

A Survey of the System Structure

Storage Allocation

In our terminology we made a strict distinction between memory units and corresponding information units, a segment just fitting in a page.

For segments we created a completely independent identification mechanism in which the number of possible segment identifiers is much larger than the total number of pages in primary and secondary store.

The segment identifier gives fast access to a so-called “segment variable” in core whose value denotes whether the segment is still empty or not, and if not empty, in which page (or pages) it can be found.

Processor Allocation

In a single sequential process (such as can be performed by a sequential automaton) only the time succession of the various states has a logical meaning, but not the actual speed with which the sequential process is performed. Therefore we have arranged the whole system as a society of sequential processes, progressing with undefined speed ratios.

System Hierarchy

\[\text{Operator} \rightarrow \text{User program} \rightarrow \text{Sequential processes} \rightarrow \text{Message interpreter} \\ \rightarrow \text{Segment controller} \rightarrow \text{Processor allocation}\]
  • At level 0 we find the responsibility for processor allocation to one of the processes whose dynamic progress is logically permissible (i.e. in view of the explicit mutual synchronization).
  • At level 1 we have the so-called “segment controller,” a sequential process synchronized with respect to the drum interrupt and the sequential processes on higher levels.
  • At level 2 we find the “message interpreter” taking care of the allocation of the console keyboard via which conversations between the operator and any of the higher level processes can be carried out.
  • At level 3 we find the sequential processes associated with buffering of input streams and unbuffering of output streams.
  • At level 4 we find the independent user programs and
  • at level 5 the operator (not implemented by us).
  • The system structure has been described at length in order to make the next section intelligible.

Design Experience

  • The conception stage took a long time.
  • We learned the art of reasoning by which we could deduce from our requirements the way in which the processes should influence each other by their mutual synchronization so that these requirements would be met.
  • We learned the art of reasoning by which we could prove that the society composed of processes thus mutually synchronized by each other would indeed in its time behavior satisfy all requirements.
  • Each test shot itself contained, on top of the (partial) system to be tested, a number of testing processes with a double function. First, they had to force the system into all different relevant states; second, they had to verify that the system continued to react according to specification.

Conclusion

Therefore one must test it with a set of relevant test cases. What is, or is not, relevant cannot be decided as long as one regards the mechanism as a black box; in other words, the decision has to be based upon the internal structure of the mechanism to be tested.

It seems to be the designer’s responsibility to construct his mechanism in such a way–i.e. , so effectively structured–that at each stage of the testing procedure the number of relevant test cases will be so small that he can try them all and that what is being tested will be so perspicuous that he will not have overlooked any situation.

I am sorry to say, industrial software makers tend to react to the system with mixed feelings. On the one hand, they are inclined to think that we have done a kind of model job; on the other hand, they express doubts whether the techniques used are applicable outside the sheltered atmosphere of a University and express the opinion that we were successful only because of the modest scope of the whole project.

It is not my intention to underestimate the organizing ability needed to handle a much bigger job, with a lot more people, but I should like to venture the opinion that the larger the project, the more essential the structuring!

A hierarchy of five logical levels might then very well turn out to be of modest depth, especially when one designs the system more consciously than we have done, with the aim that the software can be smoothly adapted to (perhaps drastic) configuration expansions.

Written by Yiran //