SYSTEM SOFTWARE and SOFTWARE SYSTEMS:
Concepts and Methodology
is a work intended to offer a systematic treatment of the theory
and practice of designing and implementing
system software. This is achieved by structuring the hardware
and software resources of a computer system as mathematical systems.
The mathematical construction of formal systems
is first examined and then is
used to develop an appropriate concept of an
ad hoc system that can model the hardware
and the software resources managed by the system software.
This approach of treating system software is motivated by
the desire we and other
have to further search for the intellectual
substance of the computer science as suggested in the
``Denning Report''
In this book, we use the methodology for handling algebraic systems to develop a systematic approach to constructing ad hoc systems. In doing so, the collection of computing objects defining the software of a computing installation is decomposed into a hierarchy of layers. Each layer of this hierarchy is constructed on top of the previous layers. The bare hardware is the predefined layer. The approach for constructing the hierarchy of layers and the methodology for specifying objects within layers are developed as computing systems constructed by the systematic approach for ad hoc system construction. The link between the software and hardware components that provides the hierarchical construction of the system software is the specification of each computing resource as a data type in terms of:
The computational behavior of the subsystem components of the system software are defined by carefully choosing the notion of a process. A process is a formal specification of the computing activity performed by a processor while executing a computation task. The processor and its activity, ``the process,'' define the layer of the system software hierarchy implemented on the hardware level under the name ``process data type.'' The whole system software is further constructed on top of the process data type by means of the mathematical methodology previously presented. When compared with other texts on system software, this book offers more than just another enumeration of the actual components of the software of a given computer installation. A methodology for software system development and a framework for teaching and learning system software is offered.
The book is intended as a textbook for an introductory course on system software. However, a broad spectrum of professionals in computer science may benefit from it. It may help the beginner to start a proper academic education in the field. It may help teachers to find the appropriate framework for teaching. It may help researchers to identify the major problems in their area of interest as well as to find the suitable mechanisms to approach their solutions. The objects discussed in the book are mathematically constructed, but they are not idealized. That is, the objects discussed in this book are representations of real computations handled by system software while assisting problem solving with a computer.
In order to make this book self-contained, the book introduces the reader to the methodology used in mathematics to handle formal systems and develops the concept of an ad hoc system. The ad hoc system construction is then illustrated with a list management systems. The understanding of this material would be be facilitated by the background provided by the following computer science courses:
Volume 1: Systems Methodology for Software is dedicated to the discussion of systems methodology as a unifying approach applied to both hardware and software development. It introduces the language of systems and classifies the system software. The material presented in this volume is distributed in 5 chapters.
Both formal systems and ad hoc systems are discussed in Volume 1. The systematic approach for ad hoc system construction is developed as a tool for constructing hardware and software systems as objects manipulated by a computer installation. The mechanism used for this construction is the hierarchy of computing systems. The main components of the hierarchy defining the software of a computer installation are identified in terms of the services they provide to each other and the services all of them provide to the computer user. These services are classified according to their users (processes or programmers) as the Execution Support Environment and the Programming Support Environment. An overview of their evolution is also given.
Volume 2: Execution Support Environment, is dedicated to the discussion of the design and implementation of the software tools managing program execution. The material presented in this volume is distributed in chapters 6 through 12.
The execution support environment of a computer installation
is organized as a hierarchy of software subsystems
designed to assist a processor to execute programs.
This part introduces the operating system.
The discussion of the operating system is
structured formally as layers
well defined by a
relationship.
The system function call is used as
a mechanism for achieving this relationship.
Volume 3: Programming Support Environment, is dedicated to the discussion of the design and implementation of the software tools used for program development. The material presented in this volume is distributed in chapters 13, 14, 15 and 16.
The programming support environment of a computer installation
is organized as a hierarchy of software subsystems
designed to assist the human user in program development.
The
relationship
is applied again and the programming support environment is
developed as the pair consisting of a control language and the processor
that maps control language programs into appropriate computing processes.
The concept of a command interpreted as a system program call
is used as the mechanism for implementing the
relationship.
The objects studied in this part are mainly programs which are
designed to solve various classes of problems.
Translators, software tools, and application
packages are the objects which are studied here.
Their construction is illustrated by assemblers, loaders, and linkers.
The scope of this book is larger than of an undergraduate course. More topics are collected in this book than can be covered in a one semester undergraduate class. However, the organization of our material allows teachers to select from the topics of the book the sequence which fits best their interest in software development, and it provides the student with a logical body of knowledge for mastering the complexity of the system software. The sixteen chapters of the book are organized in four modules, each module containing four chapters (see Figure 0.1).
In Figure 0.1 we denote by arrows the possible reading flows.
Each module is organized in a diamond-shape where the
vertexes are chapters of the module and the directed graph
shows the reading relationship between these
chapters. Any path in this
diagram which goes from Begin to End would provide
a logical sequences of topics. Our favorite sequence is:
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(10)
(12)
(13)
(15)
(16)
The decision to split the material of this book in three volume was determined by contents, economical, and managerial factors.
Acknowledgment: we thank many generations of undergraduate and graduate students at the University of Iowa who have taken the class 22C:32, Introduction to system software, in the Department of Computer Science and have read this text. They helped us correct many bugs and typos and resolved most of the problems that accompany each section.
The authors