Chapter 1. Introduction
1.1. Overview
Modern computing systems are marvelously complex. Based on the notion of electricity flowing through wires, they manage to allow us to compose e-mail, The goal of this book is to learn about the fundamentals of how they work.
To harness that complexity, computer designers have developed a system of layers, where each layer provides easy access to a bit more functionality. In this book, we'll think of the computing system as having four layers, as diagrammed in Figure 1.1.
Figure 1.1: The four layers of a computing system.
Programming language Operating system Machine language Digital circuit
Each layer may be thought as providing what is called a virtual machine. That is, it is built to provide a particular set of functionality, using a particular interface.
This book's general plan is to study the computing system from the bottom up: That is, we'll begin with digital circuits, then work into studying machine language, then the operating system, and finally the programming language. Since it's written primarily for people studying the design of software, the emphasis will be on the implications for software design.
But before we begin that plan, we first study a particular programming language — the C programming language.
1.2. About this book
This book is an open-source book, released under the Creative Commons Attribution-Share Alike license. Basically, that allows you to distribute and edit versions of this book, with some conditions. I think you'll agree that this approach to distributing the book is far preferable to the classical method of getting a publisher to publish and distribute the book, and then forcing readers to pay for the privilege of reading my words.
But there is a flip-side to this: Whereas publishers have the money
to pay people to suggest improvements and to edit the book, I don't and
must depend on my readers. If you find any errors, or if you find any
parts particularly confusing, your e-mail to
will be most welcome.
If you find this book useful, then you can consider this e-mail
message your payment
for the book.
(Please send e-mail about the text only. Unless you're a Hendrix
student, I don't have time to field generic questions.)
This book was originally written for a college course I've taught for several years at Hendrix College in Arkansas, also titled Computing Systems Organization. By the time they take the course, students have studied Java programming for at least one semester, but often they've completed two or even three semesters of studying software. They take this course in preparation for a range of more advanced undergraduate courses, addressing such topics as computer architecture, operating systems, networking, and programming languages.
