• Donate
  • Log In
Home
  • About
    • About
      • About Us
      • Our Board of Directors
      • Board Meeting Minutes
      • Board Elections
      • Updates & Announcements
      • Our Staff
      • Governance & Financials
      • Lifetime Achievement Award
  • Events
    • Events
      • Upcoming
      • Past
      • Conference FAQ
      • Conference Policies
      • Code of Conduct
      • Calls for Papers
      • Author Resources
      • Grant Opportunities
      • Best Papers
      • Test of Time Awards
  • Join & Support
    • Join & Support
      • Become a Member
      • Ways to Give
      • Our Supporters
      • Student Opportunities
      • Sponsorship Opportunities
  • Archive
    • Archive
      • Proceedings
      • Multimedia
      • ;login: Archive
      • Short Topics in System Administration Series
      • Journal of Education in System Administration (JESA)
      • Journal of Election Technology and Systems (JETS)
      • Computing Systems Journal
  • Search
Join the conversation
Back to ;login: Online

Computer Architecture

by Charles Fox
May 13, 2024
Bookreview
Authors: 
Rik Farrow
Article shepherded by: 
Rik Farrow

I really enjoyed reading this textbook. That's not something I've ever written after reading a technical book, but Charles Fox writes with a style that is both conversational and invitational that kept me reading.

I had studied computer architecture, a senior-level course, in 1978, and had some interest in updating what I had learned, and forgotten, since then. Fox starts out with a history of computing, going all the way back to notched bones, working through clay tablets, then to Pascal's accumulator, and Babbage's Analytical Engine. I had wondered how this could possibly be of any use to the reader, other than entertainment, but Fox uses this information, along with descriptions of machines more akin to computers, like Hollerith machines (1890), Colosus (1943) and the Manchester Baby (1948), later in the book by drawing comparisons between the components of these machines to the architecture of more familiar CPUs.

Historical data representations (Chapter 2) leads to discussion of bases and exponents that forms the requirement for understanding computer logic, representation of binary numbers as hex, and floating point representation. Babbage's Analytical Engine makes another appearance, this time to show how decimal computers work, like the 1950s UNIVAC and IBM 650. Fox reminds us that besides floating point, there's another 'FP': fixed point. Fixed point numbers get used for inference in LLMs today. Fox also describes character representations, multimedia, and data structures.

Chapter 3 starts by considering musical processing units, like player pianos, and uses this to describe fetching instructions, decoding them, then using the decoded instruction to execute playing notes. Fox then resurrects Babbage's Analytical Engine again as the basis for describing modern CPUs. I thought this actually worked quite well, making later stages of the book where much more complicated CPU designs are explained much clearer. Fox also prepares to gently explain assembly programming languages as they appeared as codes punched into cards for Jacquard looms and the Babbage Analytical Engine.

Chapter 4 is about switches, the basis of digital computing. Again, I wondered at first just how important a deep dive that takes you all the way to understanding field effect transistors is. Fox clearly explains these, starting with water valves, electrical valves (tubes), then transistors, and this turned out to be quite meaningful for me, as Fox explains how energy is lost when switches/transistors are operated.

Fox presents digital logic in Chapter 5, starting with Claude Shannon's masters thesis, that introduced two innovations in computer architecture: logic gates and that any computation can be performed using a small set of logic gates. Logic gates are described using truth tables, and Fox has arrived at the same point my 1970s textbook reached at the beginning of chapter 2. But getting here has been interesting, and I would say necessary, because things quickly get a lot more complicated after this.

One of the things I most liked about this textbook are the exercises at the end of each chapter. I often have found textbook exercises impossible to figure out, and in 1978 I worked with a study group to solve homework problems. Fox's exercises are more interesting, although I skipped the "Challenging" ones. Fox also introduces open source tools including Logisim, a Java-based tool for designing and simulating logic circuits.

Fox continues to build on these foundations, describing more and more complicated machines as he goes on. He has the best description of the complicated set of registers used in x86 CPUs because he explains how we got from having one accumulator and a handful of other registers to the mind-boggling array of registers in an amd64 architecture. Toward the end of the book, he extends this while explaining SIMD (single-instruction, multiple data) and MIMD instructions and how they use 64 or 128 bit wide registers to hold multiple values to be operated on in parallel. Later on, this helped me to understand GPU designs, how they work in parallel and why this is so critical for machine learning systems in use today. Fox clearly explains how GPUs are programmed in Chapter 15 on parallel architectures.

I knew that the instruction set I began using with the Intel 8080 had grown, but not that it has continued to grow almost exponentially. From less than 70 instructions to over 3,800 instructions today, described in a five volume set of manuals that Fox suggests only compiler writers will ever read. His description of RISC forms a welcome contrast to x86, although I did encounter an error here, one that Fox told me occurred during editing.


Fox often includes assembly language examples and exercises and I wondered about this. On the one hand, doing so fits in neatly with the way he explains different subjects. On the other hand, very few programmers today have any experience with assembler--not that I think this is a good thing. But if you really want to understand the bare machine, knowing how to boot an amd64 into 64-bit mode may be more important than simply a mind-boggling example of what happens when a CPU design maintains backward compatibility. Fox also includes code examples for some simpler home computers that so many hackers used during the 1980s, such as the Commodore Amiga.


I reviewed the e-Book version, and found the illustrations worked fine in grayscale, with the exception of the register set for amd64 (Figure 15-3) where having some colors beyond shades of gray would have been helpful. Jumping around in e-Books is also tricky in my preferred PDF reader (Okular), and I missed seeing the introduction, where one of my big questions had been answered: who should read this book?


In the introduction, Computer Architecture is clearly described as a textbook, and I believe will work incredibly well in this regard. But what about programmers who never got to take an architecture class, or did take one from an indifferent teacher? I think that any programmer who wants a better understanding of the systems she is using would find her time well spent reading this book. There are times when I did wish Fox would emphasize certain hardware features and how they impact performance a bit more. While Fox includes the table of the hierarchy of memory based on how fast each tier is, knowing just how critical locality is to memory, whether in the cache or in DRAM, can have a strong impact when working with large data (see algorithms for the 21st century, by Steve Johnson). Fox does mention that reading memory is fast once a row is selected, but not that it can up to ten times faster. But that's just a particular peeve of my own. This is really an excellent book.

Computer Architecture

Charles Fox

NoStarch Press: March 2024, 535 pages

ISBN-13: 9781718502864
Article Categories: 
Programming
Hardware
Last updated May 13, 2024
Authors: 

Rik Farrow has been a consultant for 44 years. He has written two books, as well as worked as the technical editor for a UNIX magazine and for two editions of a popular operating system book. He also taught UNIX system administration and Internet security during the 90s internationally, and worked as a volunteer for USENIX program and steering committees. Rik has been the editor of ;login: since 2005.

[email protected]
  • Log in to post comments
USENIX logo
  • Contact USENIX
  • Privacy Policy

© USENIX 2025
EIN 13-3055038

Website designed and built by Giant Rabbit LLC
Powered by Backdrop CMS

We need contributions from individuals like you.

USENIX conferences directly influence the development of computing systems and products used worldwide. Contribute today to support this vital work for the next 50 years.

Secure the Future of USENIX

Donate
Close