Syllabus for the Course
Here is a brief description of the main points to be covered in this
course, and how they relate to one another.
A detailed lecture schedule
is also available.
A computer appears as a component in any of a number of systems that
interact with their environments to solve interesting problems. It often
helps to think of these systems as though they were collections of people
solving the given problem, to anthropomorphize them, in order to
relate them to everyday experience.
For example, consider the problem of providing traffic control at a
One could imagine a police officer or school crossing guard as
a solution to this problem: The officer observes the pedestrians, and
stops traffic when one or more wish to cross.
At some point, the officer decides to halt the stream of pedestrians
to give automobile traffic use of the crossing.
The overall task can be broken down into simpler tasks:
- Sensing the desire of pedestrians to cross
- Signaling the traffic
- Signaling the pedestrians
- Deciding when to stop allowing pedestrians to cross
A system thus needs analogs of the officer's eyes, hands and brain to
carry out the task. If we think about existing systems for traffic control
at pedestrian crossings, we see two of these analogs immediately:
The officer's eyes are replaced by a button pedestrians press
to record their wish to cross,
and the officer's hands are replaced by the lights that signal
the traffic and the pedestrians.
The process of deciding when to respond to pedestrian requests and when
to stop allowing pedestrians to cross can be carried out by an algorithm
based upon button presses and time. You already know from your elementary
programming course (or equivalent experience) how to develop computer
programs that accept inputs and deliver outputs based upon those inputs.
Thus you can see how a computer that is a component of the
pedestrian crossing control system could replace the officer's brain.
In order to be able to design systems with computers as components, you
need to understand both what the computers can do internally and how they
can interact with their environment.
Generally speaking, you should already know what computers can do internally.
This course therefore focuses on how the computer
interacts with its environment.
It is intended to provide you with a good understanding of the capabilities
and operation of the major classes of input/output device, as well as
familiarizing you with the low-level details of how the computer uses these
devices to monitor and control a system.
- The Capabilities of the Central Processor:
We begin by looking at the central processing unit (CPU), the brain of a
The central processor remains our focus for the next four weeks,
as we gain familiarity with ways to program it.
During that period we examine the
CPU architecture, the structure of
a CPU Program, and the
data types that it understands.
Examples are used to illustrate how programs are written in the native language
of the machine, and how we control complexity by decomposing a program into
- Programmed Input/Output:
As an example of interaction with the environment, we next look at simple
that read and write streams of characters.
They are typical of the operations used to receive and transmit other kinds
of information, like on/off states or samples from continuous signals.
- Interrupt Handling:
The simple algorithms work, but they require the central processor to
concentrate exclusively on one task.
Interrupts can be used to
switch the central processor's attention among several tasks.
Once we have the possibility of dealing with a multitude of devices operating
at different rates, we need to be able to
data in order to handle bursts of information arriving too fast to process.
(Of course the average data rates must remain within our processing
- Managing Concurrency:
Like the human brain, the central processor must be able to switch its
attention smoothly from one task to another. It must ensure that in the
tasks do not interfere with one another, yet may cooperate when required.
Management of loosely-coupled
turns out to be a very tricky problem that requires careful design and a
deep understanding of certain aspects of the underlying hardware.
In addition to being able to respond to interrupts generated by devices,
the central processor must have access to some absolute notion of
such as we get from our wristwatches.
Without this, there would be no way for the central processor to schedule
events like halting the flow of pedestrians at the crossing.
- Floating-Point Number Representation:
A number representing a physical quantity may be very large (e.g. the
diameter of the universe) or very small (e.g. the diameter of an electron).
These numbers can seldom be measured with an accuracy of more than a few
decimal digits, however.
``Scientific notation'' uses a few digits to capture the measurement and a
power of 10 to specify the size of the value.
Floating-point is the computer
version of scientific notation.
Evaluation of common arithmetic operations on floating-point numbers can
sometime yield surprising results, and it is important to understand the
advantages and disadvantages of this data type.
- Memory Mapping:
The more tasks a system must handle, the more likely it is that problems
will arise within individual tasks. It is therefore increasingly important
to separate tasks with firewalls, so that if one task fails it does not
corrupt others. One obvious way of separating tasks is to use
to prevent one task from overwriting another's storage.
Current systems attempt to smooth out the large differences between
processor and memory speeds by providing a small
on the same chip as the central processor.
The intent is that most of the memory references will actually use that
cache instead of the main memory, and therefore a system designer needs
to understand the properties of the processor cache to improve performance.