See also my paper Honesty in History that looks at how historical facts get distorted.
Why Do we Teach Computer Architecture?
Two generations ago, British school children had to learn Latin in order to enter a university. Clearly, at some point it was thought that Latin was a vital prerequisite for everyone going to university. When did they realize that students could still benefit from a university education without a prior knowledge of Latin? Three decades ago students taking a degree in electronics had to learn the dance of electrons in magnetic fields – a subject so frightening that older students passed on its horrors to the younger ones in hushed tones. To my relief, this required course on electron dynamics was dropped the year before I went to university because courses in semiconductor electronics were replacing courses in vacuum tube physics.
If courses in the past have fallen out of the curriculum with no obviously devastating effect on the education of students, what about today’s curriculum? This article examines one particular course because it is at the crossroads and may go either way – into oblivion or into a new future via metamorphosis.
Computer architecture is probably the oldest component of the computer curriculum.
Computing as we know it emerged in the 1940s and 1950s with the first-
The very first courses on computer science were concerned with the design and construction of computers. At that time programming was in its infancy and compilers, operating systems, and databases did not exist. In the 1940s, working with computers meant building computers.
By the 1960s computer science as a discipline in its own right had emerged. With the introduction of courses in programming, numerical methods, operating systems, compilers, and databases, the then curriculum reflected the world of the mainframe. By end of the 1970s, the microprocessor had arrived and the computer was well on the road to its commoditization.
In the 1970s computer architecture was still, to a considerable extent, an offshoot of electronics. Texts were more concerned with the circuits in a computer than with the fundamental principles of computer architecture as now encapsulated by the expression “instruction set architecture”, ISA.
Computer architecture experienced a renaissance in the 1980s. The advent of the low-
Since today’s students either have their own computer or have access to a computer
laboratory, the role of the single-
In the late 1980s and early 1990s computer architecture underwent another change.
The rise of the RISC microprocessor turned the focus of attention from complex instruction
set computers of the 80x86 and 68K families to the new high-
By the late 1990s computer architecture had stabilized again with Hennessey and Patterson’s
two texts dominating the education world. Computer architecture was largely concerned
with the instruction set architecture, pipelining, hazards, superscalar processors,
and cache memories. Topics such as microprocessor systems design at the chip-
Computing in the 1990s
What was happening to the rest of computer science while computer architecture was
reaching its maturity in the 90s? In short, rather a lot was happening in computer
science. Computer science has expanded exponentially since its early days and the
1990s witnessed the introduction of several new subject areas such as object-
The growth of the computer market, particularly for those versed in the new Internet-
Should computer architecture remain in the CS curriculum?
Recent developments in computer science have put pressure on course designers to
remove old material to make room for the new. The fraction of students that will
ever be directly involved in computer design is declining. Universities are beginning
to provide programs in multimedia-
In such a climate some have suggested that computer architecture is a prime candidate for pruning. It is easy to argue that computer architecture is as irrelevant to computer science as, say, Latin is to the study of contemporary English literature. If a student never writes an assembly language program or designs an instruction set, or interfaces a memory to a processor, why should we burden him or her with a course in computer architecture? Does the surgeon study metallurgy in order to understand how a scalpel operates? Does the pilot study thermodynamics to understand how a jet engine operates?
Such crude analogies can easily be dismissed by constructing counter analogies. It’s easy to say that an automobile driver does not have to understand the internal combustion engine to drive an automobile. However, it is patently obvious that a driver who understands mechanics can drive in such a way as to enhance the life of the engine and to improve its performance. The same is equally true of computer architecture – a knowledge of the computer systems can improve the performance of software if the software is written to exploit the underlying hardware.
The digital computer lies at the heart of computer science. Without it, computer science would be little more than a branch of theoretical mathematics. The very idea of a computer science program that did not provide students with an insight into the computer would be strange in a university that purports to educate students rather than to merely train them.
Those supporting the continued teaching of computer architecture employ several traditional arguments. First, education is not the same as training and CS students are not simply being shown how to use commercial computer packages. A course leading to a degree in computer science should also cover the history and the theoretical basis for the subject. Without an appreciation of computer architecture, the computer scientist cannot understand how computers have developed and what they are capable of.
However, there are concrete reasons why computer architecture is still relevant in
today’s world. Indeed, I would maintain that computer architecture is as relevant
to the needs of the average CS student today as it was in the past. Suppose a graduate
enters the industry and is asked to select the most cost-
Computer architecture cannot be divorced entirely from software. The majority of
processors are found not in PCs or workstations but in embedded applications. Those
designing multiprocessors and real-
There are two other important reasons for teaching computer architecture. The first reason is that computer architecture incorporates a wealth of important concepts that appear in other areas of the computer science curriculum. This point is probably least appreciated by computer scientists who took a course in architecture a long time ago and did little more than learn about bytes, gates and assembly language. The second reason is that computer architecture covers more than the CPU; it is concerned with the entire computer system. Because so many computer users now have to work with the whole system (e.g., by configuring hard disks, by specifying graphics cards, by selecting a SCSI or FireWire interface), a course covering the architecture of computer systems is more a necessity than a luxury.
Computer Architecture – a Metamorphosis
One day, computer architecture courses may be dropped from the traditional CS curriculum, leaving only a few universities to teach architecture. Equally, computer architecture may be seen as topic suitable only for EE departments.
One way of dealing with computer architecture is to downgrade it so that it ceases to be a mainstream core subject and is broken into pieces and distributed throughout the curriculum. The basis of the von Neumann machine and the fetch/execute cycle could be sent off to the introduction to programming course; material dealing with memory systems could be slotted into the operating systems course; and buses and interfaces can find a home in courses on computer communications. Such an approach is possible, but it would leave students without a coherent understanding of the computer system.
In order to continue to thrive, I suggest that computer architecture courses in computer
science departments should evolve to reflect the real needs of today’s computer science
subjects. In short, computer architecture should be less “CPU-
Should Computer Architecture be Computer Systems Architecture?
Some computer architecture courses are, in one sense, a curiosity because they cover
the architecture and organization of the processor but make relatively little reference
to buses, memory systems, and high-
Computer technology was once driven by the paperless-
These trends have led to important commercial developments in computer architecture;
for example Intel's MMX instruction set that provides simple SIMD parallelism and
saturated arithmetic processing. The demands of multimedia are being felt in areas
other than computer architecture. Hard disks are designed to provide a continuous
stream of data, and design techniques for low latency are becoming more important
than those for high-
Some of the most impressive advances in recent years have been in computer graphics. More and more of the burden of image processing is being moved onto graphics chips. Similarly, digital signal processing, once the province of the electrical engineer, is edging into mainstream computing as multimedia systems provide support for sound processing.
Supporting the CS Curriculum
It is in the realm of software that you can most easily build a case for the teaching
of assembly language. During a student’s career, he or she will encounter abstract
concepts in areas ranging from programming languages, to operating systems, to real-
Consider some of the areas where computer architecture can add value to the CS curriculum.
The Operating System
Computer architecture provides a firm basis for students taking operating system courses. In computer architecture students learn about the hardware that the operating system controls and the interaction between hardware and software; for example in cache systems. Consider the following two examples of the way in which the underlying architecture provides support for operating system facilities.
Some processors operate in either a supervisor or a user mode. The operating system runs in the privileged (and protected) supervisor mode and all applications run in the user mode. This mechanism is used to construct a secure environment in which the effects of an error in an application program can be prevented from crashing the operating system or other applications. Covering these topics in an architecture course makes the student aware of the support the processor provides for the operating system and enables those teaching OS courses to concentrate more on operating system facilities than the mechanics of the hardware.
Programming and Data Structures
Students encounter the notion of data types and the effect of strong and weak data
typing when they study high-
Computer architecture is concerned with both the type of operations that act on data and the various ways in which the location of an operand can be accessed in memory. Computer addressing modes and the various means of accessing data naturally leads on to the notion of pointers. Students learn how pointers function at the machine level and the support offered for pointers by various architectures. This aspect is particularly important if the student is to become a C programmer.
The efficiency of procedure call/return and parameter passing mechanisms is vital
to understanding the performance of a processor. By means of an assembly language
you can readily demonstrate the passing of parameters by value and by reference.
The use of local variables and re-
Students sometimes find the concept of recursion difficult. You can use an assembly language to demonstrate how recursion operates by tracing through the execution of a program. The student can actually observe how the stack grows as procedures are called.
Computer architecture is awash with concepts that are fundamental to computer science
generally and which do not appear in other parts of the undergraduate curriculum.
A course in computer architecture can provide a suitable forum for incorporating
fundamental principles in the CS curriculum. For example, a first course in computer
architecture introduces the student to bits and binary encoding techniques. A few
years ago much time would have been spent on special-
Computer architecture is seen by some as an old-
I have argued that computer architecture course has always been in a state of change because it reflects the prevailing views of what constitutes computer architecture.
Although the traditional computer architecture course could be broken up and redistributed thought the curriculum, I have suggested that it should continue to evolve. In particular, I have suggested that modern computer architecture courses should more strongly reflect the needs of students in the new areas of computing such as multimedia, because these students require an overview of the entire system rather than an in depth analysis of the CPU. I have also suggested that computer architecture should pay more attention to the global curriculum and be used as a vehicle to introduce fundamental computer science concepts such as data compression.