Levels and Abstractions
The complexity of computer systems is better understood when such systems are organized into different levels. Analysis of each individual level facilitates the orderly understanding of the system's functions. Progression from the most primitive level of the hierarchy to higher levels is accomplished by creating a series of abstractions. By suppressing unnecessary details, each abstraction contains only that information relevant at the higher level. Abstractions provide conceptual paths along which only a small amount of information passes. Abstractions frequently coincide with actual boundaries in the physical systems, since abstractions were initially introduced by the designers as a means of managing the complexity of the system.
Figure 1 illustrates four levels at which a computer can be described. Each system (at any level) is characterized by a set of components and a set of ways to combine those components into structures. The behavior of the systems is formally described according to the behavior of the components and their specific combinations. Elementary circuit theory is an almost prototypic example. The components are H's, L's, C's, and voltage sources. The mode of combination is wiring between the terminals of components, which corresponds to an identification of current and voltage at these terminals. The algebraic and differential equations of circuit theory provide the means whereby the behavior of a circuit can be computed from the properties of its components and the way the circuit is constructed.
There is a recursive feature to most system descriptions. A system, composed of components structured in a given way, may be considered a component in the construction of yet other systems. There are, of course, some primitive components whose properties are not explicable as the resultant of a system of the same type. For example, a resistor is not to be explained by a subcircuit but is taken as a primitive. Sometimes there are no absolute primitives, it being a matter of convention what basis is taken. For example, one can build logic design systems from many different sets of primitive logic operations (AND, NOT, NAND, OR, NOT, etc.).
Each system level, as we have used the term in Fig. 1, is characterized by a distinct language for representing the system (i.e., the components, modes of combination, and laws of behavior). These distinct languages reflect special properties of the types of components and of the way they combine. Otherwise, there would be no point in adopting a special representation. Nevertheless, these levels exist in the system analyst's way of describing the same physical system. The fact that the languages are highly distinct makes it possible to be confident about the
existence of different system levels. Where we are fuzzy, as in the existence of an additional intermediate level, it is because new representations have not yet congealed into distinct formal languages. As we noted, within each level there exists a whole hierarchy of systems and subsystems. However, as long as these are all described in the same language, e.g., a subroutine hierarchy, all given in machine-assembly language, they do not constitute separate system levels.
With this general view, let us work through the levels of computer systems, starting at the bottom. Each level in Fig. 1 actually has two languages or representations associated with it: an algebraic one and a graphical one. These are isomorphic to each