22C:116,
Lecture Notes, Lecture 1, Fall 2000
Douglas W. Jones
University of Iowa
Department of Computer Science
- The course title says something important about this class
- Advanced - This is an advanced course, it has prerequisites!
if you haven't had a prior course on operating systems,
you should be very hesitant about taking this course!
- Operating Systems - This is a course about operating systems.
This word by word breakdown can be continued!
- Operating - The use of this word implies a subject
(something that operates) and an object (something
that is operated). What are these?
The object is clearly the computer. The operating system operates
the computer.
The indirect subject is clear. The operating system operates on
behalf of its human user community.
The direct subject is less clear. Generally, the human users interact
with applications programs of one kind or another, and the operating
system operated directly on behalf of these applications.
- Systems - This word says quite a bit. A system is composed
of components of some kind, frequently not primitive
components, but subsystems in their own right. What
are these subsystems, and does the organization of
the operating system relate to their ogranization?
- What is an Operating System?
Posing This question to a class typically generates the following
kinds of responses:
- It may provide a uniform interface across multiple
platforms. This is certainly true of modern UNIX (and
its many variants such as Linux, HP-UX, IRIX, AIX),
although UNIX was not designed with this in mind.
Other modern operating systems, notably MS-Windows and
Mac OS can hardly be described as being platform
independent, although Mac OS, in its evolution, has
migrated from the 68000 processor used in early Macintosh
computers to the Power PC architecture of modern systems,
and Microsoft's Windows NT has been ported to a variety
of non-Intel platforms..
- It provides abstractions such as files, windows, timers
and other tools that programmers would like to use.
- It controls the allocation of resources:
- One or more CPUs.
- The main memory.
- The I/O channels.
- The secondary memory.
This resource management model was at the forefront of
most thinking about operating systems in the 1970's, when
most computer systems were shared between many users
who were in competition for the scarce resources of the
systems.
With the advent of personal computers, there was even talk
about the irrelevance of operating systems, since with only
one user, it was easy to imagine that there were no resource
contention problems remaining.
- It provides mechanisms for enforcing security policies.
A good operating system will provide general purpose
mechanisms that can be used to enforce a variety of
policies; most systems in use today, from UNIX to MS/DOS
were designed for environments where security was not
a big issue, so to the extent they support security,
their mechanisms are generally special purpose, limiting
the range of policies that may be enforced.
- The combination of hardware plus operating system software
provides a virtual machine to the users. The resources of
this machine are more closely related to the needs of
applications programmers than the resources of the bare
hardware.
- But to most users, the operating system remains a mysterious
piece of expensive and often quirky software. In one sense,
there is no need for an operating system, since in theory,
everything done by the system could be done directly by
the application software.
A VERY SHORT COURSE OUTLINE: The first half of this course focuses
on traditonal operating systems, those that run on a single CPU or a few CPUs
that share a single main memory. The second half of the course focuses on
some of the issues that are raised by the introduction of distributed
systems, where a network connects several to many tightly clustered
CPU-memory clusters.
WARNING:
This is a hard class. The prerequisites for studying this subject include
the following:
- A course on elementary computer architecture.
You are expected to have a fair understanding of computer architecture
at two levels. First, you should be familiar with processor-memory-switch
level descriptions of computers, including questions of basic bus structure,
direct memory access I/O, and memory management units. Second, you should
be familiar with the instruction-set-processor level, specifically with
issues of memory addressing, register utilization, and typical input/output
instructions.
- A course on elementary operating systems.
You are expected to have a fair understanding of process, memory and
input-output management from the user's perspective. File system organization
and security, input-output buffering, process creation and synchronization
issues should be familiar.
- An introductory course on analysis of algorithms.
Graph algorithms play a major part in this course. Specifically,
algorithms for finding connected components of a graph, algorithms for
depth first and breadth first traversal of a graph, and algorithms for
finding shortest paths in a graph. Knowledge of data structures and recursive
programming sufficient to understand such algorithms is essential.
- Significant programming skills.
We will illustrate a number of concepts from operating systems with
exercises involving the Unix system and with exercises involving a low-level
portable thread package written in C and usable in C, C++ and possibly in
other languages. While we do not specify the particular programming
language you should use, use of the required thread package is likely to be
very difficult in languages other than C or C++; it is possible that the
routines in the package may operate correctly if called using external
linkage from languages such as Pascal or Ada, but there are no guarantees
of this!