Computer architecture is a big topic and, hence, more than a bit difficult to teach. To understand it well, a wide range of detail needs to be mastered--ranging from digital logic at its lowest level and its implementation at the gate level, up to the architecture of entire computers. Digital circuits ranging in size from only a few transistors up to millions of transistors are usually covered in a single text.
Understanding this range of detail is complicated by the constraints of the physical realization of computer hardware. These include timing considerations, the various implementation styles used (RISC, CISC, and VLIW), and commercial interests, such as the need to maintain support for older architectures in the Intel x86 line of processors.
This book presents this range of detail quite well. It is very readable and effectively conveys the author’s knowledge of the subject. Starting with basic logic, Shiva shows how components are built, from simple gates on up. At the lowest level, he covers the logical basis of the circuits, from the Boolean logic of truth tables, through the way the circuits interact (including timing considerations), to the construction of the basic components (encoders, decoders, registers, and so on) of digital hardware. At the highest level, entire computer architectures are considered.
Reading this text, I learned some new things and found new ways to consider some of the things I have seen before. I would be reluctant to use it in a class, however, even though I rather like it. The first three chapters, covering logic, sequential circuits, and memory, are excellent. After that, though, it begins to slip a bit. It is not that the information presented is not excellent, readable, and informative; rather, the author seems to assume too much knowledge on the part of the reader.
In several places, when seeking a more complete explanation of a term or abbreviation in order to more fully understand a particular point, I found that these were difficult to locate and, too often, not even explained in the text. In other places I found terms used in ways that did not seem familiar, or statements that puzzled me. As an example, an architecture is said to provide “two IEEE 1394 connections,” but the author says that this requires Windows 98 or Windows NT. Does this really mean that other operating systems cannot take advantage of this feature?
In some places, I found the coverage of topics to be a bit odd. The variance in implementation philosophy of the RISC and CISC camps is not explained in enough depth for readers to appreciate how wide a gap there has been between these camps, and how the differences in philosophy have influenced newer architectures.
The later parts of the book are further marred by poor reproductions of figures from technical manuals and by some other problems of detail. For example, a two-page diagram of registers includes an entire page of empty boxes labeled D0, D1,…D7, A0, A1… and so on. This does not seem to convey any valuable information. In another section we find the statement that the virtual address space “covers the full 231 bytes of the current user address space.” 231 bytes? I suppose that this should be 231 bytes--but I had to look at it a couple times before I realized this, and this kind of simple error is all too frequent.
To compound these problems, the index is seriously lacking, and there is no glossary of terms and acronyms to help with that lack. Several acronyms are used that seem not to be defined (at least, I could not find definitions for them).
Many of these problems are relatively minor in comparison with the book’s value, but they make it much harder to use as a text. Computer architecture is already intimidating for the average student in a computer science or computer engineering program. Readers who already know something about computer design and architecture will appreciate this book and may well learn something from it, and I might use it as supplementary reading for students. But I am not at all sure I would use it as a primary text.